2014年12月20日土曜日

インフラ担当業務について

1.本記事の目的について

社員の皆様お疲れ様です。バルテックの飯田(はんだ)です。

研修生の大半の方がJavaなどの開発言語を学ばれて現場へ出て行く中
私はバルテックでは数少ないインフラ系のSEをやっております。

今回は以下の2点を目的としています。
①研修生の方々や開発系の方々へ「インフラ系とはどんな業務なのか」を
 できる限り分かりやすく簡潔に紹介すること、
②今後インフラに進まれる方へのある程度の指標値としてもらえること

特にネットワークの勉強をして、これからインフラの現場に入る方。
まずはインフラ担当業務及び、キャリアアップの未知に対するイメージを持っていただいて、
さらにサーバ側にも興味を持っていただきたく思っています。
運よくネットワークの案件に入れる方もいらっしゃるでしょうが
案件としてはネットワークよりもサーバのほうが多いですし、
サーバの案件では何をしているかについては興味を持ってもらった方が
今後の道が広がると思います。

私もバルテックに入る前にCCNAを取得しております。
ですが、インフラのエンジニアをやる上で
ネットワーク機器の構築、保守を行わない限り、
ネットワークについてはMAC、IP、NATやSTP、VLANなどのネットワークの基本概念が理解できていればいいのではないかと今は考えています。

なお、できるだけ簡潔にするため、一部詳細を追えば違うところがあったりしますが
今回はイメージを持ってもらうことが目的ですので、
そこは現場に入って勉強するなりで各々修正してください。





2.インフラってそもそもなに?

まずインフラって何だろうと、そこから入ってみます。
インフラとは
Infrastructure(インフラストラクチャー 意味はgoogole先生に聞いてください。)
の略です。

皆さんからすると社会インフラ、つまり電気・ガス・水道、
もしくは電車や電話、病院などを思い浮かべるのではないでしょうか。

電気、ガス、水道はお風呂に入ったり、テレビを見たりするのに使います。
電車や電話なども含め現代人が生活をする上でほぼ必要不可欠となっています。


ITにおけるインフラも考え方としては同じです。
システムを動かす上で、なくてはならないものとなります。


3.ITにおけるインフラって??

ここまでの説明で「だから何?漠然としていてよく分からないんですけど・・・」
と思うはずです。
思わない人はこの記事自体を読む必要がないほどよく分かってらっしゃいます。
一言で言えば変態です。


・・・さて、ITにおけるインフラといっても色々ありますので、順番に説明します。



システムが動作している環境は、
サーバの筐体やストレージ装置、
ルータ、スイッチなど
ネットワークの機械(ハードウェア)があります。

各機器はそれぞれの用途に応じて連携しています。

各機器について役割を書いていくと

サーバ:アプリケーションを動作(WEB/AP/DB)
ストレージ:データを保存
(主にサーバの大量データを保存)
ルータ:論理的なネットワークを接続(IPアドレス)
スイッチ:物理的なネットワークを接続
(MACアドレス)

といった形になっています。






次は各々の立場で見えている構成について説明します。




エンドユーザ側が考えている構成、普通にWEBページを使う上でシステムを何も知らない人が考えている構成はこんな感じと思います。





で、業務アプリを作る側、つまり開発側が意識する構成はこんな感じと思います。

場合によってはルータも意識しないかもしれません。










しかし、物理的な接続はこのように複雑です。

私が11月までいた現場はさほど大きなシステムではありませんでしたが
これよりも遥かに複雑でした。

後の項目で説明しますが、
左図は冗長化や負荷分散の観点で
システムとして可用性が不十分です。

何が不十分なのかを今の時点で考えてみてください。
回答は後の項目で行います。


まずはこの項目の結論を挙げておきます。

ITにおけるインフラとは
エンドユーザ及び、開発側が意識しない部分の作成、運用、保守
が役割です。
ネットワーク担当、サーバ担当、ハードウェア担当
それぞれにおいてこの点は変わりません。


4.サーバの中身について


さて、項番3では大まかに各機器の役割を挙げましたが、
今回はサーバについてもう少し細部まで挙げてみます。
ネットワーク機器やストレージ装置にはプラグインを組み込むことはありますが
基本的にはファームウェアの機能のみで動作しているので今回は省略します。


サーバの機械の中にはOSがあり、OSの上にベンダーアプリが乗って
ベンダーアプリの中には皆さんが開発したアプリケーションを乗せていきます。

インフラ業務とは左図の開発担当と書いた部分以外全てとなります。


開発担当の方も現場によっては
TomcatやApache、OracleDBの設定を行うことがあるかもしれません。
それは立派なインフラ業務です。











5.システムが出来上がるまでの大まかな流れ


4.サーバの中身で述べた通り、業務アプリケーション以外は全てインフラ業務となります。
サーバ以外のネットワーク機器やストレージについてもインフラとなります。

今回はシステムが構築し、運用され、そして更改されるまでの流れについて
本来はもっと多くの工程がありますが、非常にざっくり説明します。

5.1 要件定義(設計担当)

まずはエンドユーザとSIer企業にて
「○○っといった機能がほしい。」
「××といったサービスを今後顧客に提供したいので、そのシステムを作ってほしい」
といった大まかな機能について話し合い、システムの方針を決めます。
それに合わせて
・実装可能か否か
・実装する場合はどのハードウェアが、OSが、ベンダーアプリが適切か
・コストや開発期間はどのくらいか
などを決定します。
これを前現場では基本設計と呼んでいました。
他の現場でも大きく変わらないと思われます。


5.2 方式設計(設計担当)

要件定義で決めた実装方式について詳細にどのようにして行うのかを決めます。
・APとDBの連携方式
・バックアップを○○の製品で取得し、××に保存する方式
・災害発生時にどういった運用へ変更する方式
などを実現した際の影響などを含め、詳細に設計します。


5.3 環境設計(設計担当)

5.2の方式設計を実際のサーバにどういった設定を入れれば設計どおりになるかを
設定ファイルの記載内容やサービス設定レベルで決定します。


5.4 システム構築(構築担当)

5.3 環境設計の内容を実際にサーバやネットワーク機器に設定します。


5.5 テスト(構築担当)

・ 構築したサーバのみの動作確認を行う単体テスト
・ 複数サーバや複数アプリケーションでの動作確認を業務アプリを絡めて行う結合テスト
・ システム全体としての動作や性能面、更にはシステム間での確認を行ったり、
 実際に障害が出た際にどういった対処を取るかを運用設計で行い
 運用時に想定どおりの動作が可能か否かを確認する運用テスト

など、順に構築したシステムで
要件定義で決定した内容が実際に動作できているか否かを確認します。

5.6 運用・保守(運用、保守担当)

実際にサービスを開始し、構築時に拾い切れなかった不具合や
ハード故障発生時などにシステムが正常になるようにします。
主に以下の流れとなります。
障害発生>エラー検知>暫定対処>ログ・ダンプ採取>原因調査>本格対処

5.7 システム更改(設計担当)

ハードウェアやソフトウェアのサポート期限切れ
システム増改築などが必要となった場合に再び要件定義から順に行います。



6.インフラ担当の業務内容及びキャリアプランについて

5.システムが出来上がるまでの流れで述べた各フェーズでインフラ担当者の業務がありますが
大きく分けて「設計・構築・運用/保守」の3つです。

実際にやってみないとよく分からないと思いますので、各担当の内容については現時点で理解する必要はありません。
なんとなく分かってもらえれば結構です。


まずはキャリアプランの概略図です。図のように、運用オペレータから始まり、保守>構築>設計と流れるのが一般的です。難易度も大体図の通りに上がっていきます。





では各担当における業務内容を説明しますが、量が多いです。
インフラ以外の方は斜め読みしていただいてもかまいません。

(1)運用オペレータ

大体の場合で、インフラ担当者の一番初めに従事する業務は運用オペレータになります。
場合によってはほかから入ることもありますが、残念ながらインフラ設計などに強い会社の新人を教育を含めて行う場合などとなりますので、バルテックのインフラはまだその段階ではありません。

メインとなる業務内容は以下の3つです。
①定められた手順での障害発生時の一次切り分け及び、保守部署へのエスカレーション
②一次切り分けの結果定められた手順で復旧可能な場合の復旧対応
③定められた手順での定常的なシステムの状態確認

私も運用オペレータを2年弱行いましたが、上記以外にも以下のような業務がありました。
・顧客PCのヘルプデスク
・MTA(メールの振り分け)装置のサポート受付
・ハード故障時のCE手配及び時間調整、顧客折衝

主に24時間365日対応することとなる部署が多く、夜勤及び土日出勤、
更に祝日がある月も稼動が変わりません。

しかし、うまく回っているような部署では残業が0どころか、突き当たり平均稼動が140時間前後と
障害が発生しておらず、更に定常業務時間外であれば、仕事自体がないため自分の時間が非常に取りづらく、空いた時間を使って資格の勉強などに当てやすい業務ではあります。
私が従事した現場ではNGでしたが、部署によってはPSPなどで遊べたりもするそうです。

また、メイン業務のそれぞれにわざわざ「定められた手順」と書いたことにも理由があり
定められたこと以外の対応は禁止です。

個人的にははじめの段階で楽を覚えてしまうと、将来的に心配なので
空き時間に何かしらの分野の勉強を行って、早めに卒業することをお勧めします。


(2)保守SE

運用オペレータなどからエスカレーションされた障害に対し
影響確認>暫定対処>ログ収集>原因調査>本格対処>設計書修正
といった流れとなります。(障害の二次受け)
主に「設計通りに動作しなかった原因を究明、修正」をすることがメインの対応です。

その他顧客のQ/Aや、機能追加時の影響調査なども行うことがあります。

担当システムの動作について理解しておかなければ対処ができない上に
自分で構築したシステムではないにもかかわらず、システムについて熟知する必要があるため、
運用オペレータに比べ難易度は遥かに上がります。


(3)保守CE

ハードウェアの修理及び障害対応などを担当します。
機器の状態、ログの採取方法などがマニュアルに記載されており、手順に従って対応します。
主に製品開発時に手順が確定してありますので、手順作成などは行いません。


(4)構築SE

設計された内容を設計書通りにサーバやネットワーク機器に適用し、問題なく動作するかを試験します。部署によりますが、設計書を手順書に起こす対応もあり、ある程度システムへの理解がされていないと対応時に困ります。


(5)製品サポート

システムで使用している製品に特化したスペシャリスト部隊です。
製品開発部署の手前に配置され、顧客や各SE、CEの質問受付、回答などを行います。
難解なマニュアルもあり、製品について熟知している必要があります。


(6)設計SE

顧客の要望した機能を実際にシステムに搭載するためのHW、OS、PPそれぞれにおいて決定し、設計書を記載します。
顧客の要望が実現可能か否か、行う際にどういった仕組みを提供しなければならないか
構築にかかる工数などなど、インフラについて熟知する必要があり、特に新規システムについては設計・構築経験が必須です。
OS設計、各種PP設計、ストレージ設計、ネットワーク設計、運用設計などなど
各設計部署に分かれます。



(7)まとめ

現場によっては設計・構築・保守まで全てひとつの部署で行っているようなところもあったり
サポート部署や、構築オペレータなどがあったりする部署もあります。

補足までに、私の経歴は以下の通りです。

保守CE:2ヶ月
運用オペレータ:1年9ヶ月
保守SE:1年7ヶ月

運用オペレータはバルテックに入社する前に従事してました。
12月からは構築SEをやります。

7.インフラ技術例


インフラ業務の各担当については
「いろいろあるんだなー」程度には分かってもらえたかと思います。



「3.ITにおけるインフラって??」でも表示した物理構成についてですが、問題を1問出しておりましたね。「この構成では可用性面で問題がある」と。
回答の前にいくつかインフラにおける冗長性確保の技術について説明します。


7.1 ロードバランス(負荷分散)について

WEBサーバが3台ありますが、今回の場合それぞれが同じ役割を果たしています。
アクセスが集中すると、1台のサーバでは処理しきれないような大量のデータを受け取ることがあります。
大量のデータを取得した場合、場合によってはタイムアウトして処理が止まってしまいます。

そこでロードバランシングといった技術で、負荷分散を行います。
簡単に言うと、1つ目の接続はWEBサーバ1、2つ目の接続はWEBサーバ2、3つ目の接続はWEBサーバ3、4つ目はまたWEBサーバ1に接続させるように設定することにより、1台辺りの受け取りデータ量を1/3にできるわけです。

また冗長性も保っており、たとえばWEBサーバ2が壊れてしまって起動しない場合も、残り2つのサーバで業務が継続できます。この業務が継続できる仕組みのことをBCP(Business Continuely Project=事業継続性)といいます。IBMとかがCMでたまにやってますので、聞いたことがあるのではないでしょうか。
また、議題になった可用性についてはシステムが動作している時間の割合のことです。
基本情報処理などでは「可用性を99.99%にするためには年間辺り何時間停止することができるか」などと挙げられています。
興味がある方は勉強してみてください。
SEをやる上で、基本情報の知識はかなり役に立ちます。
取っておいて損はない資格です。

7.2 スイッチの冗長性について

CCNAを勉強している人はご存知でしょうが、スイッチを2台配置していることには訳があります。
物理構成図とはいえ少し簡略して書いています。
スイッチ1、スイッチ2と各サーバは共に1本のLANケーブルで接続されています。



APDBサーバとスイッチの部分を詳細に書くと
こんな感じです。

























ここでスイッチ2が故障したとします。



























すると、当然スイッチ2から出ている経路(スイッチ2に接続されている経路)は使えなくなります。


ですが、APDBサーバ1、2共にスイッチ1からも接続されているので、APDBサーバへの接続が途絶えることはありません。




















7.3 クラスタリングについて

クラスタ環境といった言葉を聞いたことがある人もいるかもしれません。
APDBサーバ1とAPDBサーバ2は現用機、待機機として動作させています。
普段は現用機だけで動かしておき、APDBサーバ1が故障やハングアップした際に、APDBサーバ2で業務を行うといった運用方式を取ります。これをクラスタリングと呼びます。

ロードバランス方式との違いは、データベースは同じ領域に書き込みを行います。
複数のサーバで運用すると、同じ部分に対して同時に書き込みを行い、
ファイルシステムが壊れてしまいます。
なぜ壊れるかを説明すると長くなるので省きますが、データの書き込みを行う際にロードバランスで負荷分散はできないと思ってください。


7.4 構成の問題点について

さて、何点かの冗長化について説明してきました。
問題として出していたものは「この構成では可用性に問題がある」でしたが
分かってもらえたでしょうか。

そう、ルータが1台しかなく、ルータ周りが故障してしまうとシステムに全く接続できなくなります。

こういった構成にならないように設計する必要があるわけですね。




8. まとめ

インフラ担当者の業務内容について非常にざくっと説明しましたが
なんとなく分かってもらえたでしょうか。

皆さんが開発したアプリケーションはサーバに搭載され、ネットワークを通じて結果を返します。
インフラはシステムを動かす上で必須なんです。
インフラが整っていないと、せっかく作成したアプリケーションも動作しなかったりします。

この記事を通して開発担当の方も、今後インフラ業務へ入る方も
少しでもインフラ業務に対して理解が深まると幸いです。





2014年12月4日木曜日

LEVEL7.現場で役立つExcelの小技(手順書フォーマット作成)

ようやくです・・・・ようやく本題に入れました・・・・!
公開日である12/4まであと2時間切ってます!!!

実はExcel初心者の方にはまだ細かい説明は残ってはいますが
時間がないので本題に無理やり入ったとも言います。


僕、11月に現場を抜けて次が決まっていないので有給をとっているのですが
営業の野田さんが非常にがんばってくれてまして、
12/1~12/3まで毎度面談のアポイントをとっていただいて、
そちら側でばたばたしてたら気づいたら時間がなくなってました!

野田さん、ありがとうございます!


ここではある程度Excelの使用経験があることを前提に説明します。
申し訳ないですが、LEVEL1から順に読んでこられた方は、
わからない単語などはGoogleで調べてください。


1.よく使うショートカットや操作


1.1 各セルの区切り線を最適幅にする。


LEVEL5でも説明しましたが、各セルを区切るA、B、Cや
1、2、3などの間をダブルクリックすると
セルの内容が見やすい幅に自動変更してくれます。













応用で、上の画像のC4のちょっと下にあるAと1の間の▲マークをクリックすると
ブック全体が選択できるのですが、その状態でAとBの間をダブルクリックすると
ブックの列幅をすべて最適化、1と2の間でダブルクリックすると縦全体の最適化ができます。
画像は間に合ったらアップロードします。


1.2 本日日付、現在時間のショートカットキー

結構知らない人が多いと思ったのが「Ctrl+;(セミコロン)」と「Ctrl+:(コロン)」の
各ショートカットキーです。

本日日付、現在時刻がそれぞれ入力できるので
ドキュメント作成などでよく使います。


1.3 使用している最終セルのショートカットキー

Ctrl+Endを押せば、ブックで使用している最終セルを選択できます。

ブックに書かれている内容のみを全量コピーするといった操作を行うことがあります。
その際に最終セルがZX列、65253行目といった膨大なデータである場合もあります。

そんなときにA1を選択後、Shift+Ctrl+Endを押せばブック内で入力されている
すべてのセルが入るようにExcelが全体を選んでくれます。
途中のセルからでも可能です。
ちなみにWindowsのAPIを呼び出してるだけなので、当然メモ帳やWEBページなんかでも使用できます。

応用として、Ctrlと方向キーを押せば、
連続して入力されているセルの一番最後が選択できます。
状況によって使い分けてください。



2.よく使う関数やセル参照の使い方(手順書フォーマット作成)

ドキュメント作成を観点に、手順書作成時に使われる関数や参照の仕方について
手順書フォーマット作成方法を通じて説明します。

手順書はさまざまなフォーマットがありますが
基本敵に縦A4もしくは横B4で、
項目には「項番、手順名、手順詳細、確認観点、備考」などとなっています。

手順によっては表紙があったり、修正履歴のページがあったりします。

今回は表紙、修正履歴がある
リモート先のWindows7にログインする手順を例として
フォーマットの作成について説明します。

雛形を作成したのでダウンロードしてください。


2.1 最終更新日自動記入設定

雛形ダウンロードをして開くと表紙シートが出てくると思います。
表紙シートの最終更新日の右のセルへ

=INDEX(修正履歴!B:B,COUNTA(修正履歴!B:B)+1,1)

と入力してください。

最終更新日が
「 40909 」となっていると思います。
G5セルを右クリックしてセルの書式設定を出して日付書式「yyyy/m/d」へ変えてください。
「40909」が「2012/1/1」と作成日と同じ日になります。



修正履歴のB4セルに適当な日付を入れて、再び表紙のシートを見ると
日付が入力した日付へと変更されているはずです。
B5セルに別の日付を入れると、最終更新日がB5セルの日付へ変更されます。

さっき入力した内容は

修正履歴シートの修正日の最下部のものを参照する設定

となっています。

では入力した内容の説明です。

INDEX関数

INDEX関数は以下の3つの引数を持ちます。

INDEX(参照範囲,行番号,列番号)

戻り値は参照範囲内の行番号、列番号に従ったセルの値となります。

ちなみにここでいう行は、Excel全体ではなく、参照している範囲となることに注意してください。

つまり、参照範囲が修正履歴シートのB列全体となっているわけです。
B列全体の列は1列しかないので、
3つ目の引数は1列しかないうちの1列目となるわけです。

続いて真ん中の行番号のところで
COUNTA関数を使用しています。

COUNTA関数はINDEX関数に比べ簡単です。

COUNTA(セル範囲)

戻り値はセル範囲のNULL以外の数となります。

B列ははじめに修正日と2012/1/1といった2つの文字が入っているため、
COUNTA(修正履歴!B:B)では2が返ります。
修正履歴シートのB列は一番上が空白行となっているため、
最終セルを調節するため「+1」しているわけですね。


で、先ほど日付を入力してもらいましたが日付を空白をいれずに入力することで
最終セルを参照し、自動で更新日を入力する設定が完成です。


■問題2.1.1
「表紙シート」の作成日入力セルであるG4セルに「修正履歴シート」のB3の日付を自動入力するように設定を変更してください。

■問題2.1.2
上記を参考に、AC25セルに最終更新者を自動入力する設定を入れてください。



2.2 数値のみで「作業時間:N分」と入力される設定

続いて、タイトルのすぐ下のC18セルに数字を入れると
自動的に「作業時間:N分」(Nは入力した数値)と表示させる設定について説明します。

C18セルを右クリックしてセルの書式設定を出し
[表示形式]タブの[ユーザ定義]を選び
種類(T):の下に以下の入力をしてください。

"作業時間:"0"分"




























その後、Excelに戻り、C18セルに「5」と数値を入れると以下の通り
「作業時間:5分」と表示されます。


















さて、書式設定の説明です。

書式設定内部でダブルクォーテーションで囲まれたものは文字列と認識されます。
数字の0は数値となります。

ためしに、C18セルに数値以外、たとえば「A」を入力してください。

「作業時間:A分」とはならず、単なる「A」が表示されるはずです。

入力したデータ型によって振り分けられます。
Aは文字列(String型)なので、書式設定が適用されなかったというわけです。


■問題2.2.1
「手順シート」のB3セルを表紙シートの手順書番号、タイトル、作業時間のそれぞれを参照して
「【手順書番号:WN7-001】Windows7リモートログイン手順(5分)」となるように
セルの内容を修正してください。



2.3 自動項番記入

さて、ダウンロードしてもらったフォーマットは単純に項番に数字が入っています。
で、この手順をレビューしてもらったところ、リモートデスクトップの画面で
「リモートデスクトップを起動する部分も別の項番を振って手順に入れてほしい」といわれました。

起動する設定を手順に追加して、項番を振りなおして再度レビューしたところ
IPの入力についても手順に書いてほしいとさらに言われたので
再び項番を振りなおして・・・・

っとまあ、手順作成に慣れてないと、上記のようなループに陥ることがあります。
自分で気づいて手順を修正するにしても、毎回項番を振りなおすのは面倒です。

今回は例として単純な手順を提示しましたが、もっとややこしい手順になることもあったり
手順内部で項番を読み出すこともあり、(項番XXで作成した、△△を使用して~など)
修正するたびに手順内部の項番も変更しなければなりません。
特に手順内部の項番は修正し忘れることが大いに考えられます。
修正し忘れ出お客さんに提示すると
「ちゃんとやってくんない????」っと言われたりしてとてもつまらないことで
お客さんの信用を失いかねません。


よって、
項番には関数を使用しましょう。

手順シートのB4セルを以下の記載に変更してください。

=ROW()-3

同じように「 1 」が入ります。
また、項番3の確認観点の「項番1で使用したIPアドレスが表示されること」を
セルの参照を利用して以下のように書き換えてください。

="項番" & B5 &  "で使用したIPアドレスが表示されること"

そしてB5からB9セルにB4セルを貼り付けると
順番に「1~6」が記入され、さらに
項番3(行を追加する前は項番3)の手順の中身も書き換わりましたね。














さて、説明に移ります。

とはいえ特に難しくないです。


ROW関数は引数にセルを指定します。

ROW(参照セル)

そして指定したセルの行番号を返します。
引数を省略した場合は、ROW関数が入力された行位置を返します。

今回は項番1の入力場所がB4となっていたので、+3してやったわけです。


手順作成時の凡ミスを減らすため、手順番号にはROW関数を使用してください。




さて、12/4になってしまったので、説明はここまでにします。

お疲れ様でした。
文中の問題文に対する回答はこのファイルを参考にしてください。

質問や、ご指摘をいただける場合はコメントなり
メールなりでご連絡ください。

コメントよりはメールのほうが反応が早いと思います。



LEVEL6.関数について

研修中にJavaやPHP、VBを勉強されている方はご存知だとは思われますが
プログラムたるもの、ユーザがわざわざ計算式を組まなくてもいいように
ユーザ側がよく使う計算や、OSが持っている変数を呼び出すため
アプリケーションが標準で装備している関数を持っています。

今回は関数について説明します。

LEVEL5で使用した利益表を使って説明します。

年間を通しての総売り上げを求めてみます。

当然どこかのセルに「=B2+B3+B4+・・・・B13」と書いてもいいのですが
面倒です。
Excelには各セルの値を足し合わせる「SUM」関数があります。
SUM関数を使用して、売り上げを求めてみましょう。

E1セルに「年間総売り上げ」と記入し、
F1セルの内部に「=SUM(B2:B13)」と書いてEnterを押します。
すると、F1内部が各月ごとの売り上げを合計したものが表示されます。














プログラムを知らない人に対して引数、返り値の概念を説明します。
関数はある値を元に関数に定義された動作を行います。
SUM関数は先ほど説明しましたが選ばれたセルを足し合わせて計算しますので
引数は「選ばれたセル」ということになります。
この例では「B2:B13」が引数です。

SUM関数に引数「B2:B13」を与えた結果、「6806000」といった値が返されました。
この返される値のことを返り値、もしくは戻り値といいます。


アプリ担当の方は問題ないでしょうが、インフラ担当の方も引数、返り値の概念はわかっておいてください。この業界を勤める上では基本となりますし、インフラであってもシェルスクリプトなどのプログラムを書くことは非常に多いです。
インフラだからプログラムわからなくていい、ではなく
製品の内部的にどういった動きがされるかといった面には想像をつけてください。

でなければ、一生運用オペレータをやるといったことになりかねます。
この業界に入った以上は、多少はプログラムの論理概念は勉強して下さいね。



続いてIF関数の説明をします。
IF関数の引数は以下の通りです。
=IF( 論理式 , "比較式が正の場合の戻り値" , "論理式が否の場合の戻り値" )

いきなり小難しくなりましたが、例を挙げて説明するとわかりやすいと思います。

売り上げが前月より増えた月について説明します。


Excelの画面右下のSheet1を右クリックして、
[移動またはコピー(M)]をクリックします。












その後、コピーを作成する(C)を選んでOKボタンを押してください。














シートが新しくコピーされますので、E1とF1をそれぞれ消してください。

E3セルに「=IF(B3>B2,"○","×")」と入力し、

E3セルをE4からE13に貼り付けます。

すると以下のような結果になると思います。




















「 B3>B2 」、つまり①2014年2月の売り上げが2014年1月の売り上げより多いかどうかを確認していて②多い場合は"○"、③少ない場合は"×"が出力されるようにしています。

さっきのIF関数の説明に当てはめるとこうですね

=IF( ①, ②, ③)


このIF関数ですが一番使う関数といっても過言でないくらいよく使います。
目で見て「多いかどうか」を確認するのは今回はまだ数が少ないからいいですが
1000行以上あるようなシートで行うのは至難の業です。
ぜひ覚えておいてください。


その他さまざまな関数がありますが、今回は省略します。
次のLEVEL7で特に使用する関数は追加で説明します。




LEVEL5.相対参照、絶対参照の使い方

さて、LEVEL3、LEVEL4でそれぞれ説明した相対参照絶対参照ですが
結論から言うと、
固定したくない、もしくはする必要がないときは
コピーペーストで相対参照
として問題ないです。

というのも、結局Excelをつかってて一番使うのは相対参照です。

表は、横方向、もしくは縦方向の計算を行うのが一般的です。

例を出して説明します。
まずは設定を元に戻します。
[ファイル]>[オプション]>[数式]の画面から
[R1C1参照形式を使用する(R)]のチェックをはずして下さい。






















その後、[ファイル]>[新規]>[空白のブック]を選んで、新しいブックを開いてください。



















開いたブックに対して
A1に売り上げ、B1に支出、
C1に利益、と記入してください。










A2セルに2014/1、
A3セルに2014/2と
記入してください。






ここで変な書式が出てくることがあります。





例として、
英語書式になっている場合を
挙げます。






こういう場合は選んだセル上で右クリックして、セルの書式設定を選んでください。






















日付の種類が
「14-Mar-12」になっています。




























ユーザ定義を選んで「yyyy/m」と入力後、OKボタンを押してください。




















無事に入力したとおりの書式に変わりました。 



さて、続いて小技を使います。
今入力した2つのセルを選択したら左下あたりの■にマウスを合わせると




マウスカーソルが
「+」に変わるので、
その「+」の部分をクリックしてマウスを下にドラッグします。




















すると以下の画像のように、1月ごとに年月が入力されます。















ちなみに隔月でもできますし、













日付じゃなく数字や時間でも可能です。
結構な頻度で使用することになるので、覚えておいてください。


さて、月は元の1~12月を1月ずつに書きなおしましょう。

売り上げ欄は以下の通り記載してください。

売り上げ
10000000
1500000
2000000
500000
6000000
2500000
12000000
15000000
3500000
8560000
1500000
5000000


支出欄には以下を記載してください。

500000
450000
300000
200000
150000
100000
1000000
14500000
500000
250000
1000000
1000000

コピー&ペーストでもいいですが
書式がそのまま貼り付けられるので

右クリックして「貼り付けもとの書式に合わせる」を選んでから貼り付けてください。
















さて、ようやく準備ができました。
LEVEL3でやったように
D2セルを選んで、「 F2 」を押してから
今度は引き算になるので「= B2-C2」となるように入力してください。

マウスを使っても、キーボードで直接入力しても結構です。















追加できたらD2セルをコピーして、D2~D13までをドラッグ選択して貼り付けます。

















すると、それぞれの月の利益が計算されて表示されます。

D2~D13の中身を見るとそれぞれの同じ行内のB列、C列の差が入っています。
















IT業界以外の人もExcelは使いますし、
売り上げ、利益の計算なんかはどこの企業もやります。
貼り付けたセルの中身に記載されている内容が違っても、
この方が使いやすいわけですね。

なのでわざわざ
Excelの内部で計算して違うものを表示しているんです。


さて、相対参照が使いやすいために使われていることは説明しましたが
逆に絶対参照ってどういうときに使うのかですが、
一部のアプリケーション、特にWeb関連のものは
サーバーの時刻と表示したい時刻が違う場合があります。

たとえば、サーバが北京にあるとすると、我々日本人とは時差があり、1時間早いわけです。
でも、日本向けに表示するページなんかもあるわけで、
そういったときのために、
グリニッジ時(GMT)、つまり英国の時間をアプリケーション内部でもっていて、
GMTに9時間をプラスするといったようなスクリプトの組み方をすることがあります。

11月まで富士通の現場にいたのですが、
性能管理ツールの一部のログがGMT出力形式になっていました。

CSV形式、つまりカンマ区切りのテキストファイルですが、日本時間に直すために
おのおのの時間に9時間を足してやるといった編集をしてました。

実際にやってみます。
ブログ書いてる時間がなくなってきたので
画像が減る上に手抜きになります。

ごめんなさい・・・


また新しいブックを開いて、
A1セルに「GMT」、
B1セルに「日本時間」と記入し
A2からA5までそれぞれ以下の時間を記入してください。

2014/12/4 20:00
2014/12/4 21:00
2014/12/4 22:00
2014/12/4 23:00

その後、C1セルに9:00:00と記入してください。

そのままだとA列内部が「###########」といった表示になりますので















A列の枠の線あたりを
ダブルクリックすると




表示されます。










さて、B2セルを選んで
「= A1+C1」と入力してください。




そのあと、
さっきやったように
B3~B5に対して
貼り付けてください。
B3~B5の内容は変わりませんでした。

相対参照で貼り付けされているので
B3はA3+C2、B4はA4+C3となってしまうので、当然の結果ですね。


一度B2~B5を消してもらって


今度はB2に
「= A1+$C$1」と入力して、
同じようにB3~B5へ
貼り付けてください。




今度はすべてのセルに+9時間されて表示されました。

絶対参照はこうやって同じセルを参照し続けたい場合に使用します。
絶対参照で入力されたセルは、
たとえ間に行が入ったり、
列が入ったりしても変わることなく参照できます。

ですので絶対参照も使えるようにしておいてください。

LEVEL4.絶対参照

LEVEL3のところをやってて気づいた人は気づいたと思います。
「なんて意味のないことをやったんだろう」・・・と。

そりゃそうですね、毎回書き直さないといけないとか
むしろ手書きのほうが早いです。

ただまあ、前回やろうとしたことを思い出してください。
「D1セルの内容をD2セルにコピーしたかった」んです。
今回は、

貼り付けても参照セル位置が変わらない書き方

について説明していきます。




一度D2セルを
DELETEキーなどで
クリアしてください。
Aの文字の少し上を見ると
「D2」となっています。






D1セルを再びD2へコピーし








LEVEL3でやったとおり[ファイル]>[オプション]>[数式]の画面を出して
[R1C1参照形式を使用する(R)]のチェックを入れてOKを押します。



左上の赤枠を見てみると「R2C4」とかかれています。

今は赤枠で囲った部分は現在選択されているセルのアドレスが入っていると思ってください。

D2は「縦が2つ目、横が4つ目」、言い換えると「2行4列目」です。
よって、R1C1参照形式ではD2セルは「R2C4」と表記されるわけですね。




続いて、「10」が
入力されたセルをクリックします。


「R1C1」と書いてますね。






さらに「15」が入力されたセルをクリックすると

「R1C2」になっています。









「R2C4」を選んで、「 F2 」を押すと、LEVEL3でもやりましたが「=RC[-3]*RC[-2]」 になってますね。







それではR3C4セルを選んで
「 F2 」を押してから
画像の通りに
セルに「=R1C1*R1C2」と
書いて「Enter」をおしてください。







すると、「150」が出てくるはずです。








それではR3C4のセルをコピーして好きなところへ貼り付けてください。


説明のため、
「R7C6」に貼り付けます。


ちゃんと150が出てきましたね。









ちなみに
今まで説明していませんでしたが画面の4列目の上に
入力した内容が
表示されているのは
気づいてましたでしょうか。



ここには実際にセルの内部に入力した値が入っていますが
そこにも「=R1C1*R1C2」と出ています。


次は[ファイル]>[オプション]>[数式]の画面を出して
[R1C1参照形式を使用する(R)]のチェックを外してOKボタンを押します。


おや?
「=A1*B1」ではなく
「=$A$1*$B$1」に
変わっちゃいましたね。






この」記号ですが、参照先を固定したいときにつける記号となっていて
A1を参照したい場合は
A列を固定するために「$A」、1行を固定するために「$1
それぞれを組み合わせて使っています。
詳しくは次のページで説明します。


最後に用語の説明です。
どこに貼り付けても同じ場所を参照するような参照方法を
絶対参照といいます。

相対参照、絶対参照それぞれの用途についてはLEVEL6以降で説明します。