ざっくり説明 ルーターの役割とは?

From: リスキルテクノロジー 松田航
新宿本校にて、、、

通信やインターネットに接続するためには
ネットワークが必要です。

ネットワークとは何か?
的なお話もありますが、
とりあえず置いておきます。

ネットワークというと、
なんとなくイメージではわかりますよね?

今このブログを見ているあなたも
何らかのネットワークに接続して閲覧しています。

今回はネットワーク構築に欠かせない
ルーターの基本的な役割についてご説明しましょう。

ルーターの基本
~「ルーター=郵便局」~

ルーターという名前は、
あなたも聞いたことがあると思います。

インターネットの普及により
ルーターはどの家庭にも設置されています。

家庭に設置されているルーターは
インターネット用のブロードバンド回線に接続するため
ブロードバンドルーターと呼ばれる事が多いですね。

このようにルーターは用途によって
呼び名が変わるのですが、
ややこしいのでここでは全て「ルーター」とします。

ルーターの役割は
もちろんコンピューターと通信することですが
その通信するデータを「パケット」と言います。

パケットとは
データを細分化した単位で、
大きな荷物を分割して、小さな小包にして
郵送しているというイメージで考えてください。

そのパケットの宛先は
IPアドレスというコンピューター用の住所で指定されます。

インターネット上のアドレスなので、
IPアドレスです。(Pはプロトコル)

ただ、「東京都新宿・・・・」という感じではありません。

IPアドレスは「127.0.0.1」など、
数値の組み合わせで表現されています。

なので人間が見てパッとわかるものではありませんが、
コンピュータ側からはわかりやすい住所になっています。

ルーターの役割は
パケット(小包)を指定されたIPアドレス(宛先)の
コンピューターに届けることです。

以上。

要するに、
ルータは「パケット(小包)用の郵便局」だと考えてください。

送信経路を管理するルーティングテーブルとは

郵便局が日本全国にあるように、
ルーターもたくさん存在しています。

家庭に1台あるくらいですから、
郵便局よりもはるかにたくさんあります。

パケットのやり取りは
複数のルーターを経由して行われます。

ここで問題が発生します。

ルーターはIPアドレスがわかったとしても、
「どのルーターに送れば良いのか」というのがわからないのです。

そのため、ルーターには
「ルーティングテーブル」と言う
このIPアドレスの時には、あのルーターに送るといった
送信情報を管理しています。

郵便で言えば
新宿から難波(大阪)に小包を送る場合...

新宿で集荷した小包を
東京中央郵便局に一旦集荷し、
大阪中央郵便局に配送して最寄の難波郵便局に届け
自宅に配送する...というイメージに近いですね。

ルーティングテーブルの例を挙げてみましょう。

routing

ルーターAからEまで
5台のルーターが図の様に接続されており、
192.168.1.10宛のパケットがルーターAに届きました。

ルーターAのルーティングテーブルを参照すると
このIPアドレスの送り先はルーターCと設定されているので
ルーターCにパケットを送信します。

次に、ルーターCのルーティングテーブルを見ると
このIPアドレスの送り先はルーターDと設定されているので
ルーターDにパケットを送信します。

そしてルーターDに接続されている
IPアドレスが192.168.1.10のパソコンに
データが送信されるのです。

(きっと読み飛ばすと思いますが、
 イメージで掴んでもらえれば十分です)

ネットワークは現代のライフライン

今回はルーターにスポットを当てて
ざっくりとお伝えして来ました。

実際には、ルータには、
ネットワーク障害を起こさないため、
ネットワークセキュリティを守るため、
他にもさまざまな特徴や技術が使用されています。

それらについては
今後ブログでお話ししてゆきますが...

ネットワークは現代のライフラインです。

通信障害が発生した場合、
ネットワークというライフラインが絶たれてしまい、
社会全体に大きな影響を与えてしまいます。

もちろんセキュリティも重要。
昨今メディアを騒がせているサイバー攻撃や
ハッカー、クラッカーから情報を守らなければなりません。

現在のIT業界でも
ネットワークエンジニアは人がいなくて、
募集も多い職種。

ネットワークエンジニアには、
単にネットワークを構築して管理するというだけでなく、
社会のライフラインを守るという、大切な役目があるのです。

リスキルテクノロジー
松田

PS

ネットワーク資格で有名なのはCCNAですね。

これを持っているだけでも
エンジニアとしての道が開けます。

CCNAのスクールはこちら

ITエンジニアは専門性だけではダメ?

From: リスキルテクノロジー 松田航
@新宿オフィス

「プログラマーを目指す以上、専門性を
身に付けることは必須ですよね?」

「やはりエンジニアを目指すなら、
高度な専門技術が必要ですか?」

エンジニアやプログラマーを目指すあなたが
感じている通り、

スペシャリストである以上、専門的な技術を
身に付けることは必要条件です。

しかし注意があります

専門的な技術を身に付けたからといって、
引く手あまたのエンジニアやプログラマー
になれるか?

というと、必ずしもそうではありません。

事実、未経験からエンジニアを目指した方々が、
転職後に活躍しているということは、
まったく珍しいことでありません。

(最低限のスキルと知識は当然必要ですが)

つまり、専門的な技術だけではない、
ということなのですが・・・

それでは、エンジニアやプログラマーとして
活躍するには、一体何が必要なのか?

これについてお話したいと思います。

【ヒューマンスキルを磨く必要がある】

エンジニアやプログラマーを目指す方にとって、
専門性を身に付ける必要があるというのは、
ごく当たり前のことと考えられているようです。

少し考えてみると、

料理人になるなら料理が作れないとなりませんし、
美容師になるならカットなどの技術が必要ですから、

仕事を遂行するにあたって専門的な技術を
身に付けることは、スペシャリストに不可欠です。

しかし専門性だけでお客さんと仕事をすることが
できるかというと、そうではありません。

たとえばプログラムの開発とサーバの構築の両方を
お客さんから受注した場合、

プログラマーやエンジニア、営業担当などを集め、
プロジェクトチームを作る必要があります。

担当ごとに求められる専門性は異なりますから、
多くの会社では分業化や専門化が進んでいます。

分業化や専門化が進めば進むほど、
一つのプロジェクトを完了するにあたり、
協力してもらうスペシャリストの人数が増えますから、

あなたの担当する仕事を終えるためには、
他のスペシャリストと協調して仕事をしていくスキルや

正しく依頼や相談をするためのコミュニケーション力が
必要になるわけです。

つまり、プロジェクトの完遂には技術的なスキルに加え、
ヒューマンスキルを磨く必要がある、ということです。

目的のためには協力が必要

仕事というのは、
お客さんの課題を解決することですから、

課題を理解するといったコミュニケーション力を
はじめとする、ヒューマンスキルが必要不可欠です。

エンジニアやプログラマーとして活躍し、
評価されるには専門性だけでは十分ではなく、
ヒューマンスキルが求められるということ。

専門性を身に付けなければならない、
という意識はきっとあなたも持っていると思いますから、

むしろヒューマンスキルこそ、
意識してスキルアップしないと
いけない部分かもしれません。

ひとりで学ぶのではなく協力しながら

だからこそエンジニアになるためのトレーニングは
ひとりでやるよりも、複数人でやった方が良いのです。

少なくとも、
複数人で実際に開発することを
一度は体験すべきです。

それだけでエンジニアとしての意識が
大きく変わります。

<ヒューマンスキル>

なかなか意識できないところだと思いますので、
ぜひ意識する様にしてください。

リスキルテクノロジー
松田航

PS

エンジニアを目指す仲間を見つけるならこのスクールです。

IT技術者が最も恐れるもの

From: リスキルテクノロジー 松田航
新宿本校にて、、、

IT技術者が最も恐れ、
出来ればその姿さえ見たくないもの...

それは、、、

「バグ」です

バグとは
主にプログラムの不具合によって
システムが正常に動作しない問題を言います。

バグが生まれる原因には様々です。

設計不足、
検討不足、
動作環境の問題など...

そして昔から
多くのバグの原因となっているのは、
思い込みによるバグや、
不注意によるケアレスミスなのです。

iOSでもあったケアレスミス

iPhoneやiPadの普及により、
ユーザー数が急増したApple社のiOS。

今年の2月21日、
iOS7.0.6のアップデートが発表されたときに
その問題は発覚しました。

iOS7.0.6での修正内容は
「SSLの接続に関する問題を修正」とされています。

SSLとは、
個人情報やクレジットカード番号など、
大切な情報を入力する時に
通信を暗号化して送受信する通信技術のこと。

この技術によって、
インターネット上の通信の安全性は保たれていますが
iOS7.0.6以前のバージョンでは
SSL通信が正常に行えていませんでした。

SSL通信技術は
既にメジャーとなっている技術です。
何故今さらになって、そんな不具合が起こったのでしょうか。

Apple社は
iOSがSSL通信する箇所の
プログラムソースを公開しました。

[ソースコードURL]
http://opensource.apple.com/source/Security/Security-55471/libsecurity_ssl/lib/sslKeyExchange.c

[ソースコード(一部抜粋)]

applesource

プログラムでは
SSL通信時にエラーが発生したら
エラー処理を行う命令にジャンプする様になっていますが...

たとえエラーが発生していなくても
エラー処理を行う命令にジャンプする様に書かれています。
※goto fail; エラー処理へのジャンプ命令が余分に書かれている

つまり、必ずSSL通信がエラーになるのです。

知らずに悪意のあるサイトに接続した場合、
クレジットカード番号やパスワード等が
解析可能な状態で通信が行われていたのです。
※現在は修正されています。

しかも、その原因となるコードはたった1行。

おそらくプログラマーが、
プログラムを作る際にコピペして作ったのでしょう。

たった1行の
ケアレスミスを犯したが為に、
「Apple史上最大のセキュリティバグ」
とまで言われるバグを生み出してしまったのです。

バグをなくす為のテストって、してないの?

もちろん、全てのシステムは
様々なテストをパスしてリリースされます。

今回のiOSの場合は、
SSL関連のテストケースが不十分、
または漏れていた可能性があります。

あるいは...

SSLならば
これまでのバージョンで
ちゃんと接続されてきた実績もあるし
大丈夫だろうさ!

...という思い込み。

こういった思い込みも
バグを生み出す大きな要因の1つです。

システム開発のテストは、
大きく分けると3つの段階を経て
システムに問題がないかをチェックします。

1.単体テスト

最初に行われるのは「単体テスト」です。

設計書を元にして、
プログラムが動作する際に
確認する必要がある項目を洗い出します。

これをテスト仕様書と言い、
プログラムが完成したら、
テスト仕様書を元にテストを行うのです。

2.結合テスト

そして次の「結合テスト」では、
別々に作成された画面や機能を組み合わせ、
システムとして連携できるかどうかを確認します。

例えば
販売管理システムの場合なら、
実際の販売管理において
想定されているシステムの流れ=シナリオを組み
そのシナリオに則ってテストを行うのです。

3.総合テスト

単体テストや結合テストが
開発者が作った開発環境で行われるのに対し
「総合テスト」は原則的に
実際にユーザーが使用する環境で実施されます。

ユーザー環境が使用できない場合は
それと同等の環境を構築して実施するケースもあります。

総合テストは、システムテストとも呼ばれており...

・システムパフォーマンスの確認
・操作性や業務効率性に問題はないかの確認
・他のシステムとの連携確認

...等といった、
実環境におけるシステム動作・性能に関するテストが行われます。

1つのシステムが開発される際、
多くの人が集まり、多くの時間を費やしテストしますが
それでもバグが発生する可能性は大いにあるのです。

思い込みミスやケアレスミスを無くすには

思い込みが原因で発生するバグは、
「自分が作ったプログラムを、自分がテストする」
という時に発生しやすいです。

テスト仕様書を自分で作り、
そのプログラムを自分で作ると、
実際にテストする時になった際に…

ここはちゃんと
コーディングした時にチェックしたから
問題はないだろう!

そう思ってしまうんですよね。

大きなプロジェクトであれば
プログラマーとテスト担当が別なのですが、
小さなプロジェクトだと
プログラマーがテスト担当を兼ねるケースが多いです。

そして、
本来単体テストで発見されるハズのバグが
結合テストなどで発見されてしまうと、
ユーザーから不審な目で見られます。

本当にちゃんとテストしているのか?と。

思い込みをなくす為には
出来る限り別の技術者の観点も取り入れ
客観的な視点からテストするようにしましょう。

そして、ケアレスミス。

基本的な対策としては「見直し、確認する事」。
この行為に尽きます。

例えば
似ている箇所があるプログラムを
コピペして再利用する場合

ペースト先のプログラムで
正常に機能するのか、
期待した振る舞いを行うのかを、
きちんと確認する必要があります。

元のプログラムではバグが無かったとしても
別のプログラムではバグを生む可能性もあります。

プログラムを実行する際、
ステップ実行(1行ずつの処理確認)できる
開発環境で作成している場合は、
必ず1度はステップ実行することをお勧めします。

そして
これまで何度も使ったプログラムだからと言って
テストにも手を抜くことなく、動作確認を行うこと。

そうしていれば、
今回のApple社のiOSの様な不具合も
出る事はきっとなかったはずなのです。

信頼を損なわない為に
技術者ができる事

人間は完璧を求めますし、
システムは完璧を求められます。

しかし、人間は完璧ではありません。

バグが無いに越した事はありませんが、
様々な技術者のスキルを集め、
出来る限りバグのないシステムを作ること。

少なくとも
思い込みやケアレスミスは、
開発チームと本人の努力によって、防げるレベルのバグ対策です。

それは最低限のバグ対策だと言えます。

最低限のバグ対策を行った上で
更にバグを無くす為の対策を行ったとして、
それでもなお、後々になってバグが発覚した場合は...

・迅速に修正、復旧できるか
・被害を最小限に食い止められるか
・不具合の事象、原因、影響範囲を説明できるか
・再発防止策をどのように講じるか

...といったように、
誠意を持って、ユーザーの信頼を損なわない対応を行う事。

それが大切なのです。

バグはシステムだけでなく
ユーザーへの信頼までも貪るケースがある
その事を覚えておいてください。

リスキルテクノロジー
松田

PS

今回は主に
プログラム的なミスのお話しでしたが、
同じ事は設計者にも言えます。

設計者が仕様を勘違いしたり、
思い込んで設計したりすれば、
ミスを含んだ設計仕様でプログラムが作られる事になります。

また、このような
ミスを減らす為の取り組みは
IT業界に限った事ではありません。

1人1人が連携しつつ、
いかにミスを無くして
質の良い製品・サービスを提供できるか...

それはどの業界でも共通の課題なのです。

PPS

ミスが少なくするには、
ベテランエンジニアのコーディングを見る。
もっと言えば、直接教えてもらうのが、
最善です。

プロのエンジニアが教えるJavaのスクールはこちら

そもそもサーバーの役割とは?

From: リスキルテクノロジー 松田航
新宿本校にて、、、

サーバーの方が普通のパソコンよりも優れているという
漠然としたイメージを持っているのではないでしょうか?

ただ、どんなものか、
何をしているのか、すごく漠然としか理解していない、
そんな人も多いと思います。

今日は私たちの日常生活において、
必要不可欠な存在となっているサーバーについて、
その役割と特徴をご紹介します。

知らない間に実は使っている?
日常生活に密接な関わりを持つサーバーとは

例えばあなたが
スマホでメールを送ったり、
Webサイトの閲覧やYouTubeで動画を見たりするとします。

これらが実現している背景には
ネットワークとサーバーの存在があります。

他にもカードキーでのドアロック解除や、
銀行のATMでお金を入出金や振込みするなど、

私たちの日常生活においてサーバーは密接に関係しており、
あなたは知らない間に数々のサーバーを利用しているのです。

サーバーの役割は
さまざまなシステムを使用したサービスを提供することです。

サービスを提供する人(モノ)だから、
サーバーです。

ネットワークを経由して
サーバーのサービスを利用します。

サービスの提供はパソコン、スマホ、ATMなどの
クライアントと呼ばれるコンピューターからの要求をサーバーが受信し、
サーバーで処理を行った結果をクライアントに提供するという流れで進みます。

ATMの例で簡単に流れを説明すると...

(1) ATMから残高照会をサーバーに要求
(2)サーバーで口座残高を確認し、ATMに情報を返す
(3)ATMで表示された残高を確認し、10,000円を出金
(4)10,000円出金した事をサーバーに通信し、口座残高を減らす

...というような流れでサーバーとクライアントの通信が行われるのです。

普通のパソコンでも
サーバーとして利用することはできます。

が、
基本的に故障やシステムダウンさせないため、
膨大な数のクライアントからの要求を高速に処理するために、
通常のパソコンよりも遥かに高性能な処理能力を持ちます。

上等なPCを使っていると思ってください。

サーバーで提供するサービスは
使用するユーザーの数や予想される要求数に応じて
処理性能を考慮し、処理するサーバーの数も検討する必要があります。

サーバーの役割はインストールする
アプリケーションによりさまざま

サーバーを構築する際、
提供したいサービスに適した
アプリケーションをインストールします。

サーバーの役割は
インストールするアプリケーションにより
決定されるのです。

大規模なシステムにおいては
1サーバーにつき1つの役割となる事が多いですが、
1サーバーにつき複数の役割を持つケースもあります。

我が社で使っているシステムなんかはそうですね。

優秀なエンジニアが頑張ってくれているので、
同じサーバーでたくさんの役割が入っています。

(褒められたものじゃないって?
 ええ、知っています。 苦笑)

たくさん入っていると、
サーバーの費用が抑えられます。

反対に、そのサーバーが壊れると
とても大変です。

なんとなくイメージがついたでしょうか?

以下に代表的なサーバーの役割と、
アプリケーションを紹介しましょう。

1.Webサーバー

インターネットの必須サーバー。

クライアントからの要求に応じた
Webページをクライアントのブラウザに表示します。

代表的なアプリは「apache」。

2.Mailサーバー

メールの送受信を管理するサーバーで、
受信サーバーを「POP(Post Office Protocol)サーバー」、
送信サーバーを「SMTP(Simple Mail Transfer Protocol )サーバー」と言います。

簡単に言えば
郵便ボストがSMTPサーバーで、郵便受けがPOPサーバーです。

代表的なアプリは「sendmail」「postfix」。

3.SSHサーバー

通信する内容を暗号化して
コンピューターとリモート通信する為のサーバー。

パスワード等の重要な情報を
暗号化しないままの通信を行うと
パスワード盗聴などの恐れがあり、
セキュリティ的に問題があります。

このため、暗号や認証などの
セキュリティを施した上で通信を
行う必要があるのです。

SSHは各サーバーをリモート操作する為、
ほとんどのサーバーに同時に設定されます。

代表的なアプリは「OpenSSH」。

4.DNS(Domain Name System)サーバー

通常、インターネット上のサーバーは
IPアドレスと呼ばれるもの(8.8.8.8など)によって
識別されます。

サーバーの住所みたいなものです。

しかし、いかんせん、
わかりにくい。

そこで、
人間にわかりやすいドメイン(www.linuxacademy.ne.jp)で
アクセスできるようにしています。

これを変換しているのが、
DNSサーバーです。

代表的なアプリは「bind」。

5.FTP(File Transfer Protocol)サーバー

FTPを利用して
サーバーとのファイル送受信を可能とするサービス。

誰でも接続できる様な設定も可能ですが、
FTP接続のための専用ユーザーを作成して、
権限を持ったユーザーのみ送受信する事も可能。

代表的なアプリは「vsftpd」。

この他にも、
データベースを管理するDBサーバーや、
ストリーム配信を行うストリームサーバー、
サーバーサイドJavaプログラムを実行可能とするAPサーバーなど、
サーバーには提供するサービスによってさまざまな種類があります。

まぁ、わからなくても気にしないでください。

とにかくたくさんアプリケーションがあって、
それをサーバーに入れることによって、
動くようになるということです。

これらをいかに使うか?
どうやって利用して行くか?

などが、Linuxの世界共通試験 LPICの
内容のメイン部分になります。

サーバーの過酷な稼働環境で
トラブルを回避するには

サーバーはメンテナンス等を除き、
基本的に24時間365日稼働することが
前提とされています。

通常のパソコンの様に、
1日使い終わったら電源を切るという
サーバーはまずありません。

しかし機械にはトラブルは付き物。

24時間365日稼働させる為に、
故障やシステムダウンといったトラブルを避けるために
さまざまな技術が採用されています。

1.RAID

ハードディスクを複数用意し、
データを分散して記録することにより
障害発生時の負荷分散と処理の高速化を行う技術。

RAID1(ミラーリング)と言う手法で、
2代のハードディスクに同時に同じデータを記録したり...

RAID0(ストライピング)と言う手法で、
複数のハードディスクに分散してデータを記録することにより
データを記録する速度を高速化する技術などもあります。

RAIDには0~6までの7種類の手法が存在し、
各手法を組み合わせて運用されるケースもあります。

2.UPS(Uninterruptible Power Supply)

日本語では「無停電電源装置」という意味で、
万一停電が発生した場合でも、サーバーに電源を供給して
サーバーダウンを回避する装置です。

大量のサーバーを管理する
データセンターには必ず備え付けられており、
データ保護のため普通のパソコンに使用している企業もあります。

3.ホットスワップ

サーバーの電源をONにしたまま
ハードディスクやケーブル、パーツを交換できる技術。

サーバーの一部に障害が発生した場合でも、
サービスを停止させることなく故障した部品の交換が可能です。

4.クラスタリング

複数のサーバーを1台のサーバーの様に見せかける技術。

例えば2台のWebサーバーとした場合...

1台を運用、1台を休止状態にして待機させ、
トラブル発生時に切り替えを行う
フェイルオーバーというクラスタリング手法や...

2台とも同時に運用させておき
一方のサーバーに問題が発生してもサービスが継続できる
負荷分散型クラスタリングといった手法があります。

5.ディザスタリカバリ

データのバックアップを行う際、
サーバーと同じ場所ではなく遠隔地のサーバーにバックアップする手法。

事業継続性を考慮する上で有効な方法で、
災害などによるトラブルが発生してサーバーが故障しても、
バックアップデータは遠隔地に保存しているので、
バックアップデータをリカバリして短期間で事業再開できるのが特徴です。

いかにしてダウンタイムを抑えるか
それがサーバーエンジニアの究極の目標

このようにサーバーは
日常生活や企業業務と密接な関わりがあり、
24時間365日稼働させないといけない過酷な状況下で
高い処理能力を発揮させる必要があります。

サーバーダウンを回避する技術には
上で紹介した以外にもさまざまあるのですが、
いずれの技術においても...

「いかにしてシステム稼働停止時間(ダウンタイム)を短くするか」

...というのが究極の目標であると言えます。

ダウンタイムが長くなればなる程、
ユーザーはそのサービスを使用することができず、
ユーザーからの信頼を失墜させることにもなりかねません。

ダウンタイムが続けば続くほど、
ユーザーは利益を得る機会を失ってしまうのです。

普段私たちが使用している
パソコンも十分に大切な存在ですが、
サーバーはそのサービスを利用する
多くの人にとって大切な存在です。

一件、プログラマーよりも地味な職業ですが、
必要性は同等以上あり、やりがいのある職業です。

ITに興味があり、
業界に入っていきたいなら、
インフラ技術・サーバー技術をスキルとして体得することが、
近道になります。

ぜひ、学習を進めてみてください。

リスキルテクノロジー
松田

PS

現在のIT業界における
サーバーエンジニアの需要は高く、
データセンターや企業のIT部門など、幅広く活躍できるステージがあります。

未経験でもスキルさえ習得すれば、
就職や転職できるチャンスは非常に高いと言えます。

サーバーエンジニアには
ネットワークの知識も必要不可欠ですが...

当校ではサーバー構築からネットワーク、セキュリティまで、
インフラ系のスキルやノウハウを総合的に身に着けることができます。

現場で使えるインフラ系スキルを身に着けたい...

そんなあなたはまず、リスキルテクノロジーの資料をみて見てください。
↓↓↓
サーバーエンジニアになるならこちら

システムリリースを成し遂げるには?

From: リスキルテクノロジー 松田航
新宿本校にて、、、

前回は「データ移行」についてお話ししました。

しかし、
システムリリース時に注意すべき事項は
データ移行だけではありません。

ユーザーに安心して新システムを使用していただく為、
考慮する事項はまだまだあります。

前回はデータの移行方法を説明しましたが、
今回は「システム移行」についてお話ししましょう。

システム移行は「引越し」に似たり

システム移行は
身近な話で言うと「引越し」に似ています。

旧システムという家では
家族も増えて手狭になって来たので...

最新式設備のある
新しく広いデザイナーズ設計の家に引越しするイメージです。

既に新しい家は建築済で、
これまで使用していたソファや冷蔵庫など、
新しい家で住むのに必要な資産は業者に運んでもらいました。

これが前回お話しした「データ移行」にあたります。

そして実際に人が移り住み、
生活を営む事が「システム移行」にあたるのですが...

システム移行方法には3種類あります。

(1)新旧の家で実際に住み比べる方法

今までの家で住み方と、
新しい家での住み方を比較し
今まで住んでいた家での利便性や快適性が確認できてから引越しします。

(2)部分的に順次引越しする方法

ひと部屋ずつ順番に引越しして住み心地を確認し、
住み心地に問題が無ければ別の部屋の引越しを始めます。

(3)一斉に引越しする方法

とりあえず一家全員
引越しして新しい家での生活を開始します。

移行方法にはそれぞれ特徴がありますが
具体的にはどのように異なっているのかを見て行きましょう。

3種類のシステム移行方法の特徴

上で述べた移行方法は、それぞれ...

(1)並行稼働 (新旧の家で実際に住み比べる方法)

(2)部分移行 (部分的に順次引越しする方法)

(3)一斉移行 (一斉に引越しする方法)

...と呼ばれています。

(1)並行稼働

これは最も安全性の高い移行方法ですが
移行期間や人的リソースが多くかかる方法です。

具体的には、
旧システムと新システムで
ユーザーに同じデータを入力してもらいます。

例えば入金伝票を登録する際、
旧システムにも入金伝票を入力し、
新システムにも同じ入金伝票を入力するのです。

並行稼働中は
新旧両システムの入出力内容を比較して同じであれば問題はなく、
これまでのシステムと同じ動作確認が取れているという意味を持ちます。

そして全体の動作確認が取れた上で、
新しいシステムに完全に切り替えてしまう方法です。

ただし、
平行稼働中はユーザーの手間も2倍かかり、
またある程度の稼働期間を確保した上で行う必要があるため、
移行期間と人的リソースを大幅に確保しないといけません。

(2)部分移行

支店単位、業務単位、機能単位といった、
カテゴリ別に新システムを導入してゆく方法です。

新システムを導入して問題が発生した場合、
旧システムに戻してリカバリーを行う事により
トラブルの拡大を最小限に抑えられるという効果があります。

ただし、部分移行期間中は
旧システムと新システムの連携が必要となるため、
開発時に新旧システム連動が正しく行われる事をテストする必要があります。

実際に部分移行という方法は、
都市銀行の統合などで使用される手法として有名。

支店単位で移行する事により、
システムトラブルが発生した場合の影響を
支店という限定された範囲に抑え込むことができるのです。

全店でシステムトラブルとなるよりは、安全な移行策であると言えます。

(3)一斉移行

これは文字通り、
あるタイミングを持って新システムに一斉切り替えを行う方法。

ゴールデンウィークといった大型連休など、
一定の間、ユーザーがシステムを使用しない期間に行われる事が多いです。

休み明けにユーザーが出社したら
新しいシステムに切り替わっているという流れですね。

短期間でシステム移行を行う必要があり
予め立てておいたシステム移行の計画に則り移行が行われます。

移行コストという面では
他の移行方法に比べて抑えられますが、
システム移行後にトラブルが発生した場合に
どのように対処するかという事を想定した上で行う必要があります。

問題が大きい場合は
旧システムに戻すという手段も想定されますが…

その問題が一斉移行後に発覚した場合、
ユーザーの業務が停止してしまうため、リスクは大きいと言えます。

リハーサルによる事前確認で
リスク検知・安全性確認

システムの移行方法は
業種や案件の種類によって異なりますが、
多くの場合は一斉移行の方法が採用されています。

ただし、
その前にある程度の期間を設けて
ユーザーテスト的に並行稼働期間を設けるケースもあります。

例えばテスト的に約1カ月間、
経理担当に新旧両システムにデータを入力してもらいます。

そして請求書データの突合などを行い...

新旧システムで数値が一致した!

...という機能的な保障を取った上で、一斉移行を実行するのです。

会計データなどを扱うシステムの場合は
新旧システムで入力・出力したデータの整合性は特に注意されます。

また、システム移行において、
移行時のトラブルを極力避ける為、
システム移行実施前にリハーサルを行うケースがほとんどです。

本番環境と同様のテスト環境を構築し
データ移行とシステム移行を行い、
移行時に発生するリスクを前もって把握しておくのです。

リハーサルであまりにも大きな問題が発覚した場合
システムリリースが延期される場合もあります。

リリースが延期されるのは
何もシステムに重大なバグがある場合ばかりではありません。

ハードウェアやネットワークに問題があり
期待した以上の処理速度が出ずに、本番稼働に耐えられないといった
環境的な設計に問題がある場合にもリリースが延期されるケースがあります。

システムリリースには
ユーザーが協力しあうサポート体制が必要

システムリリースではサポート体制が重要です。

何度もリハーサルを行い、
何度もシステム設定を確認し、
移行はもう大丈夫!と判断しても、
移行本番時には何が発生するかわかりません。

これは何もITの現場にだけ言える事ではありません。

どのようなスポーツでも、
どのような業種職業でも、
どれだけ研鑚やトレーニングを積んだとしても、
試合本番や実際の現場では、何が起こるかわかりません。

本番という事で緊張する事もありますし
何らかの理由により、少し予定が変わってしまうだけで
冷静な判断ができなくなる場合もあります。

どのようなトラブルにも対応できるように
リリース時のサポート体制は特に重要なのです。

リリース時のサポート体制には、
システム開発側だけでなく、ユーザーにも協力者が必要です。

リスクを検知した際、
ユーザーの協力が必要な場合であれば、
速やかにユーザーに相談した上で解決策を講じる必要があります。

ユーザーとの連携力を高める為にも、
普段からユーザーとの関係を良好にして…

「一緒に新システムを作りましょう!」

...という姿勢でシステム開発を進めて行く必要があるのです。

システム移行やデータ移行など
新システムのリリースをするということは、
システム開発ベンダー側だけが頑張ればできるというものではありません。

システム開発ベンダーとユーザーが協力し
リスクを極力回避できるサポート体制をもって臨む事により
新しいシステムをリリースすることができるのです。

システムはひとりだけでは作れないし、
リリースもできない。

関係各所の協力があって初めて、
成し遂げることができるのです。

リスキルテクノロジー
松田

PS

あなたが新しい家を買ったとして
欠陥住宅だとわかったらどう思いますか?

誰も欠陥住宅には住みたいと思わないですよね。

新システムを使うことによって
より快適で、より便利な生活が始まることが期待されています。

あなたが作るシステムは
ユーザーの生活の一部になるのです。

決して欠陥品を提供する訳にはいかないのです。

PPS

システムエンジニアになるスクールならこちら

ユーザーの資産を守るということ

From: リスキルテクノロジー 松田航
新宿本校にて、、、

「システムリリースの際に注意しないと
 いけないことは何でしょうか」

この質問に対しては正直に言って、
ひとことでは答える事ができません。

システムリリースにおいては
ユーザーにできる限り負担がかからない様、
気を付けないといけない事は数多くあります。

今回はその中でも重要事項のひとつ、
「データ移行」についてお話ししましょう。

システムだけを作ってしまえば
それで終わりではない

携帯電話やスマートフォンの
機種変更をされた経験がある方は多いでしょう。

新しい機種に変えてから、まず何を行いますか?

そう、電話帳データの移行です。

多くの携帯電話ショップでは
電話帳データの移行サービスを行っていますが...

「完全に移行できるとは限りませんのでご了承ください」

...と言われる事が多いのが現状。

事実、私も何度か機種変更した時
携帯電話ショップでの移行を依頼したことがありますが、
正しく移行できたという経験はあまりないです。

同じキャリアだと移行しやすいそうですが、
別キャリアに機種変更する場合は、失敗する確率が高いようです。

電話帳が移行できないと
1件1件手入力で電話帳データを入力しなおすか、
電話帳移行ツール等を新しく購入して試してみるなど、
利用者に作業負担がかかってしまいます。

数十件程度ならそれほど苦になりませんが、
何百件、何千件も電話帳データがある場合は大変です。

これは、システムでも同じことが言えます。

既存のシステムを廃止して
新しいシステムを開発して導入する場合、
既存のシステムで使用していたデータを移行する必要があります。

システム開発とは、
システムだけを作ってしまえば終わりではありません。

既存システムのデータを移行した上で、
新システムを使用してもらう必要があるのです。

データはユーザーの大切な資産

既存システムにおいて
日々の業務で入力されてきたデータ。

これらはユーザーの大切な資産です。

新システムにおいて
その資産を有効に活用できないという事は、
ユーザーにとって新システムに移行するメリットがないという事を意味します。

ツール系アプリケーションの場合
定期的にシステム改良を伴ったバージョンアップが行われますが...

旧バージョンのデータが使用できない場合、
ユーザーからクレームが来ることは必至です。

アプリケーションの改良により
機能が増えました!処理が早くなりました!
だけど旧バージョンのデータは使えません!

それでは、ユーザーは納得しません。

業務系システムの場合も同様。

これまでの業務によって培った
会計データや、顧客データ、営業履歴、案件データなど...

それらの資産が使用できないと
新しいシステムに変わったところで意味がないのです。

また、業務内容やデータの種類にもよりますが
データには法律で保存期間が設けられている場合もあります。

例えば会計帳簿データであれば
会計法では10年、法人税法では7年と定められています。

あまりにも古いデータの場合
とりあえずCSV形式に変換して
磁気テープ等に保存するという企業がほとんどです。

ですが営業売上を管理するシステムなどで...

「過去3年間の月間利益率と当年の月間利益率の対比を見たい」

...といった要望がクライアントから出た場合、
最低でも過去3年間の売り上げに関するデータは移行する必要があります。

データはユーザーにとって資産であり
今後の営業戦略を決定する上での判断材料ともなるのです。

どうやってデータ移行は行われるのか?

では、実際にどのようにデータ移行が行われるのでしょうか?

データの移行方法については
上流工程フェーズにおいて検討される必要があります。

既存システムと新システムのデータベース項目を比較し、
移行できる項目や、移行するのに加工が必要な項目などを検討。

基本的には
既存システムで使用中の全項目が
移行できるのが理想的ですが...

既存システムがオリジナルシステムで
新システムがパッケージシステムの場合など、

パッケージシステム側のデータベースに
既存システムで使用していた項目がない
といったケースもあり得ます。

その項目をどうしても移行しないといけない場合は、
追加費用を支払い、パッケージをカスタマイズした上で
移行しなければなりません。

移行するのに加工が必要な項目とは、
これまで使用していたコード体系を
新システム導入と同時にコード体系を変更して運用する項目などが挙げられます。

例えばこれまでの商品コードが10ケタであり
上位3ケタが商品分類、下位7桁が商品コードとしていたが
新システムでは商品分類と商品コードの2つの項目に分けたい場合...

既存システム「商品コード」
ABC0000001

新システム「商品分類」
ABC

新システム「商品コード」
0000001

...と分割した上で、新システムに登録しなければいけません。

データ移行では
主に移行用のプログラムを作成しての移行や
SQLを使用してデータ移行するのが一般的です。

データ加工が必要な項目の場合は、
移行用プログラムに加工条件をプログラムし、
新システム側のデータベースに加工データを自動登録します。

しかし中には、
ユーザーが判断しながら登録しないと
いけないデータもあります。

こういったデータ項目がある場合は
ユーザーに手入力で入力してもらうか、
あらかじめCSVデータをユーザーから入手して
CSVデータを新データベースに反映する方法が採られます。

データ移行はこのような流れで行われ、
新システムの動作確認を行った上で稼働準備が整うのです。

覚えておいてください
資産を守るという重要性

データ移行を疎かにしてはいけません。

データ移行が疎かにされ、
訴訟にまで発展したケースも実際にあるのです。

薬局の業務システム開発において
データ移行が適切に行われなかった為、通常業務に支障が発生。

裁判所から開発費用の返金命令が下った判例があります。
(東京地判平22・11・18)

先ほども言いましたが、
データはユーザーにとっての大切な資産です。

その資産を守る為に
データ移行については様々なケースを想定した上、
システムの上流工程から早めに検討しておく必要があります。

そしてシステムによっては...

・随時処理(随時データ更新されるもの)
・日次処理(1日に1回処理されるもの)
・月次処理(ひと月に1回処理されるもの)
・年次処理(1年に1回処理されるもの)

...など、処理されるタイミングがさまざまな場合も。

どのタイミングでデータ移行するのか
そういった事も含めて、移行計画を立案する必要があります。

もちろん、データ移行にはユーザーの協力も必要です。

場合によっては、
ユーザー企業の全社員にシステムの使用を中止してもらい
限られた時間内でデータ移行をしなければならないケースもあります。

ユーザーとの円滑なコミュニケーションなしには
データ移行どころかシステムリリースさえもうまく進みません。

ユーザーが新しいシステムに望んでいるもの。

それは効率性や利便性、
操作性や事業拡張性など、ユーザーによってさまざまです。

ただ共通している点は、
今現在使用しているシステムに限界を感じており、
新たな期待を込めて、新システムを導入しようとしている点。

IT技術者には、
ユーザーのさまざまな期待に応える必要がありますが
データ移行もそのうちのひとつです。

「ユーザーの資産を守る」ということ。

その重要性を、どうか覚えておいてください。

リスキルテクノロジー
松田

PS

ユーザの資産を守ることは
あなたとユーザーの信頼関係の良化に繋がります。

良好な信頼関係を育む事は
あなたにとって「最高の資産」となるのです。

PPS

Javaプログラミングとデータベースを学ぶなら、こちらのスクールで

「自分はエンジニアだ」という思い込みと行動

From: リスキルテクノロジー 松田航
@新宿オフィス

先日、面白いなと思う質問を受けました。
その質問とは・・・

「どうすればエンジニアになれますか?」

という質問です。

この質問のどこが面白いと思ったのか?
それを今日はあなたにお話したいと思います。

あなたがエンジニアと名乗った瞬間から
エンジニアになれる!

この質問は、

「エンジニアとして知識やスキルさえ
身につければ初心者でもなれますし、
就職も引く手あまたです!」

という答えを期待しているのかもしれませんが、
ちょっと見方を変えて回答を考えてみました。

エンジニアの業界を見渡すと、
「人が余っていて就職難・・・」
という話はまず聞きませんし、

むしろ人材が足りず、

企業はエンジニアの募集を熱心に
やっている、という状態です。

今の社会でコレほど歓迎される職業って、
なかなかないですよね。珍しいと思います。

そしてエンジニアは他の仕事と比べると、
比較的独立してやって行くことが容易な専門職です。

なぜなら、エンジニアが足りていないということは
それだけ大きな市場があるということですから、

エンジニアとして独立しても、
仕事を自分で取りやすい、ということですね。

ですから実は、あなた自身も「エンジニアです」と
名乗った瞬間から、

広告を出したり企業に営業したりして、
エンジニアとして仕事をすることもやろうと思えば
できるわけです。

専門スキルもないのに現実的ではないかもしれません、
しかし

こういう話をすると、
「いや、専門スキルもないのに無理ですよ」
という話が聞こえてきそうですが、

私自身そんな乱暴な話を
したいわけではありません。

ただこれは、

あなた自身が「エンジニアです」と
名乗った瞬間から、あなたに変化が
訪れることを期待しての回答でもあります。

たとえば、

□読む本が変わる
(エンジニアとして最新の知識を得ようとする)

□時間の使い方が変わる
(いつお客さんから質問されてもいいように勉強する)

□付き合う相手が変わる
(同じエンジニアを目指している人と交流したほうが刺激になるし、
役に立つ知識も情報も得られる)

・・・こんな変化が訪れます。

自分がなりたい姿を明確に思い描き、
周囲に宣言すると、行動が変わります。

あなたがプロなら、
お客さんに対して「初心者なんで・・・」とは
言いませんよね?

お客さんの課題を解決するために、
一生懸命に勉強して仕事するはずです。

あなたがエンジニアになりたいなら、
行動するだけです

「エンジニアになれますか?」と質問しているということは、
エンジニアになりたいということですよね。

であれば、行動を起こしましょう。

行動を起こすことで、次に何をすべきかが
より明確になりますから、

エンジニアとしてステップアップするには
次に何をすればいいのかも

きっとわかるようになるでしょう。

エンジニアになりたいと思って
行動しはじめた瞬間から、
エンジニアと名乗って構わない。

むしろそうした方が自分に
プレッシャーをかけられます。

ぜひ、自分がエンジニアだと意識・自覚して
行動をはじめてください。

リスキルテクノロジー
松田

PS
エンジニアになる手順など、
ご質問はご遠慮なくどうぞ!

PPS
もうご覧になっているかと思いますが、
オープンソースエンジニア教育No.1リスキルテクノロジーはこちら

JavaとPHPのどちらを学ぶか?

From: リスキルテクノロジー 松田航
新宿本校にて、、、

未経験者が最初に覚える
いわゆる「スタートアップ言語」。

当校では、JavaとPHPの講座を開講しており、
個別カウンセリングの際、こういった相談を度々受けます。

「最初に学ぶプログラム言語を、JavaにするかPHPにするか迷っています」

スタートアップ言語として最適な言語
JavaとPHP

IT業界には、実に様々な言語があります。

Java、.NET、PHP、Ruby...

そして新しい言語は年々増え続けています。

つい先日もApple社が
新しい言語「Swift」を発表しました。

これはiPhone、iPad、Macなど
Apple製品向けアプリを作るのに使用される言語です。

Apple社だけでなく、
FacebookやGoogleなど
大手企業は独自の言語を開発しようとする傾向があります。

目的は様々ですが
多くは自社サービスに特化した
高速かつ安全な言語を開発することにより、
サービスの向上や技術者の囲い込みを計るといったものです。

このように、
この世には何百という言語が存在している為、
未経験者の方は、どんな言語を学ぶか悩むこともあるでしょう。

そんな数ある言語の中から
当校ではJavaとPHPの講座を開講しています。

何故JavaとPHPの2種類なのか?

信頼性。
拡張性。
汎用性。
技術者としてのニーズ。

それらを総合的に考慮した上で...

JavaとPHPのいずれもが
スタートアップ言語として最適な言語であると判断したからです。

信頼性が高く
就転職に有利とされるJava

まず、
Javaがスタートアップ言語として
最適である理由をご説明しましょう。

Javaは1985年に誕生し
現在でも多くのシステムに採用され
不動の人気を誇る言語です。

アメリカのIT系求人サイト
Dice.com(http://www.dice.com/)では、
「プログラミング関連の仕事に就く為に有利な言語」のひとつとして、
Javaを挙げています。

技術者求人としての人気だけでなく
オープンソース言語としての人気においても
他の言語を差し置いて、常にトップに君臨している言語です。

Javaは様々なシステムの言語として採用されています。

身近なところでは
スマートフォンOSであるAndroidアプリの開発、

大きなところでは
銀行のATMシステムなど、
信頼性が求められる金融系システムの開発言語として、

モバイルユースでも企業ユースでも
利用される幅が広く、信頼性の高い言語として使用されています。

2000万人が使用する
情報管理アプリであるEvernoteや、
2億4千万のユーザー数を誇るTwitterなど、
多くの有名アプリでJavaが採用されているのです。

Javaを学ぶメリットは様々です。

・Web系、組み込み系、デスクトップアプリなど、
 様々な形態でのシステム開発が可能

・言語としての信頼性や拡張性が高い

・大小様々なシステムで採用されている実績がある

・Java開発案件数は衰えを見せず、常に技術者のニーズがある

・OSに依存せず、ライブラリが豊富であるため、開発の幅が広い

他の言語に比べると若干難易度は高めです。

ですが、Javaを知っておくことにより、
IT技術者としての対応範囲が広がる事は間違いありません。

また、ストレートに言って、
2020年までJavaエンジニアの需要は増え続けると予想でき、
職に困ることがないのが最大の魅力でもあります。

Webアプリケーションで
根強い人気を誇るPHP

そして次にPHP。
PHPがスタートアップ言語として優れている点です。

PHPは1995年に誕生し、
多くのWebサービスで使用されている
サーバーサイドスクリプト言語(*)です。
*Webサーバー上で実行される言語

動的なWebページを作る上で
最適なスクリプト言語であるPHPは、
FacebookやGREE、Yahooなどでも使用されており、
世界中で24億のWebサイト、210万のウェブサーバーで使用されています。

ソフトウェア開発で有名な
アメリカのシリコンバレーにおいても、
スタートアップ言語として最も人気のある言語です。

もちろんアメリカだけでなく
日本のWebサイトの多くでもPHPが使用されており
規模の大小を問わず、多くのWebページで採用されている言語です。

最近ではCMS(Content Management System)を使った
ウェブコンテンツの生成が主流となっていますが、
CMSで最も人気のあるWordpressはPHPで開発されています。

Webコンテンツ制作業界では
Wordpressのカスタマイズ案件も増えてきており、
それらに対応する為にも、PHPは必須の言語であると言えるのです。

PHPを学ぶメリットは多数あります。

・多くの開発実績があり、信頼性が高い

・使用ユーザーが多く、情報や拡張機能が豊富

・Webプログラマーとして活躍できる場が多い

・Wordpress以外の主要CMS(*)でも採用されているため
 カスタマイズニーズ等に対応できる
 *Xoops、Drupal、Joomla!など

言語としても比較的習得しやすく、
スタートアップ言語としては最適であり、
PHPを用いたWebアプリ開発案件は豊富ですので
初心者からWebプログラマーとしてデビューするには最適な言語です。

ニーズの高さと信頼性がポイント
どちらを選ぶかはキャリアパス次第

当校がJavaとPHPの講座を
提供している理由は様々ですが、

最も大きな理由としては…

「Java技術者・PHP技術者に対するニーズが高い」

…という事が挙げられます。

JavaやPHPを習得していれば
未経験の方でもIT技術者として活躍できるチャンスが高く、
スタートアップ言語として習得するには最適の言語だからです。

そしてもうひとつは…

「言語としての信頼性の高さ」

…が挙げられます。

オープンソースであるため、
世界中の技術者が改良に携わり、
言語としての質の向上が長年行われています。

いずれも歴史ある言語であるにも関わらず、
十数年にわたって多くのシステムで採用されており、

一時的にニーズが高い言語なのではなく、
今後も継続的に主力言語として使用される理由がここにあるのです。

それでは、JavaとPHPのどちらからスタートするか?

これはあなたの目指すキャリアパスによります。

Webアプリの開発も含め、
Androidアプリといったモバイルアプリ開発、
組み込みやデスクトップアプリ開発も視野に入れたいのであれば...

Javaをお勧めします。

Webアプリに特化した開発や
リッチなWebコンテンツの開発、
WebデザイナーやWebディレクターも視野に入れたいのであれば...

PHPをお勧めします。

ただ、ひとつだけ注意してほしい事があります。

確かにPHPは
人気言語でニーズも高いですが、
RubyやPythonなどといったPHPの代替言語が多く
2011年以降、人気が少しずつ下火になっているのも事実です。

実際にPHPをメイン言語としていた企業が
自社アプリを別の言語に変更したという事例もあります。

PHPをスタートアップ言語とする場合、
将来的に代替言語での開発を迫られる場合もある...

それを念頭に置いた上で、学習した方が良いです。

このような流れを考慮すると、
未経験者のスタートアップ言語としては、
Web系システムから組み込み系システムまで
幅広いジャンルで活躍できるJavaを選択する方が良いです。

言語的にも確立されており、
多くの開発案件で採用され続けるJavaを習得する...

それは、あなたが長年にわたり、
技術者として活躍できるフィールドを広めてくれるのです。

どちらからスタートするかはあなた次第です。

そして、
どちらからのスタートでも
あなたが活躍できる場がある事を覚えておいてください。

リスキルテクノロジー
松田

PS

当校では、
Java認定資格の取得からJava+DB連携のノウハウ、
Androidアプリ開発についても学べるコースを用意しています。

PHPもプログラミングだけでなく、
Webデザインからプロデュースまで総合的に学べるコースもあります。

机上の技術ではなく
実践で通用する技術を習得する事が大切です。

javaのスクールリスキルテクノロジーはこちらから

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する