インフラエンジニア向けプログラミング


イントロダクション

長年自分はインフラを中心としたITに携わってきました。おかげでServerやActive Directoryなんて英単語はキーボードを見ないでもタイピング出来るほどです。ただ、出会いが単純に無かったという事もあるかもしれませんが、自分の周りのインフラエンジニアには驚くほどプログラムが書けない人が多くいます。自分も大きな分類で言えば、職業プログラマーとして仕事をしてきたわけではないので書けない分類に入ります。

困った事に、これらのエンジニアはマウスやキーボードをまるで手足のように駆使し、高速でマウスクリックを行ったり、タブキーで文字を補完しつつ、高速にコマンドを実行していくわけです。さらに困った事に、エクセルが大好きな人の比率も高いのです。

コンピュータやサーバーサービスの仕組みには物凄く詳しいのに、実はアプリケーションがどうやって作成されているか知らない人も結構います。

インフラエンジニアの殆どはプログラムが書けないのですが、これは才能が無いわけではなくて、単純に必要にかられるタイミングが少ないのと、出会いが無いだけなのだと自分は思っています。

いよいよクラウド化が進めば、受け身なインフラエンジニアはどんどん仕事が無くなってしまう可能性は高いです。クラウド化がどんどん進んでいく現状をピンチと思わずに、運用負荷を減らせるチャンスと思って、よりインフラエンジニアとしての本質を深められるようになればいいと自分は思っています。

書いてる自分も数年前はVB Scriptをメモ帳にせっせと記載する程度のプログラミングスキルでした。今はそれに少し毛が生えたくらいのプログラムが書けます!

この文書は会社の同じチームメンバーに対してプログラミングを初歩から学んでもらうために書く文書です。・・・が、自宅で書いているのでついでに公開します。

現代のプログラミング言語は複雑で覚えられない。なんて思ってるかもしれませんが、大丈夫です。昔のプログラミング言語よりも便利になっているからみんな使っているだけですから。

自分がWindows系のインフラエンジニアだった名残で、教材としてはC#を利用します。今から覚えれるなら、きっと3年後くらいには.net coreもある程度こなれてきて、マルチOSでの開発も今よりも活発になっている・・・と思いますので、きっと無駄にはならないはずです。

前置きとして一応記載しておきますが、自分は根っからのプログラマではありません。なので、正直いけてない書き方がたくさんあるかもしれません。ただ、現在進行形でコーディングを楽しんで、また使ってくれる人が喜んでくれたら嬉しいなと思い日夜ギターを弾く時間を割いてブラウジングに励んでいます。

それでも自分がこの文書を記載しているのは、一人でも多くのインフラエンジニアがインフラのみではなく、アプリケーション側の実装も理解し、また自分の業務効率を上げられる手段を自分で確立出来るようになる手助けになれればと思っているのと、まったく理解出来なかった時期がそう遠くないので、まったくプログラムが分からない人に対してもある程度分かりやすく教える事が出来るのではないかと思ったからです。

教材について

無償のVisual Studio Communityを使って学習してみましょう。Visual Studio Professionalと同等の機能が利用条件に合えば無料で利用出来ます。自宅での学習ならほぼ間違いなく利用可能です。以下のページからダウンロード出来るので、ダウンロードしてインストールは完了させてください。

https://www.microsoft.com/ja-jp/dev/products/community.aspx

長年インフラエンジニアとして仕事をしてきたあなたなら、インストールは難しくないはずです。

Visual Studioの実行

では、さっそくVisual Studioを実行してみます。
※初回起動時には既定で利用する言語を何にするかと尋ねられると思いますのでC#を選択しておいてください。

Clipboard02

ファイルから新規作成→プロジェクトを選択します。

Clipboard03

「コンソールアプリケーション」を選択してOKを押下します。コンソールアプリケーションとは、GUIを持たないいわゆるインフラエンジニアが良く使う黒い画面のアプリケーションです。

Clipboard05

画面が開いたらいきなりですが、「開始」ボタンを押してみてください。コンパイルが開始され、一瞬黒い画面が表示され、消えます。

Clipboard07

あなたがアプリケーションを本当に一度も作ったことが無ければ、これが始めてのプログラムになります。何もしないプログラムです。

Clipboard08

ここで生成されたアプリケーションは画面右側に表示されているプロジェクトを右クリックして「エクスプローラーでフォルダーを開く」で開き、bin→Debugとフォルダを辿る事で参照する事が出来ます。何も実行されませんが、何度でも実行する事は出来ます。

作ってみると理解できると思いますが、どうやって開発者達はexeファイルを作成しているのだろう?きっと魔法でも使っているに違いない。とか思っていたかもしれませんが、exeファイルはVisual Studioが自動的に生成してくれるわけです。

我々はVisual Studioを利用する事で、何も考えることなく誰でもクリックひとつでexeファイルを作成する事が出来ます。

プログラマが記載するコードは実際は必要最低限で済みます。

コードの書き方

では、その必要最低限を記載してみます。記載する前に記載内容の意味をある程度理解してみましょう。

以下はコンソールアプリケーションを既定で作成した際にテンプレート的に記載されるコードです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

まず始めに覚えて欲しいのはコメントアウトの書き方です。コメントアウトした列はコードとして認識されないのでメモ書きが出来ます。
コメントアウトは//と2回半角スラッシュを入力します。上記と同じ内容のコードを解説も兼ねてコメントアウトで記載します。

//デフォルトの参照にはこのオブジェクトの参照をしていますよ。と
//記載がされていると思っていればOKです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
 class Program
 {
 //今回のメインプログラムはこれです。コンソールアプリケーションの場合
 //Mainというメソッドを作っておかないとエラーになります。
 static void Main(string[] args)
 {
 //ここに自作コードを挿入して実行します。
 }
 }
}

画面にtestと表示してみる

では、実際にコードを記載してみましょう。「Console.ReadKey()」の下の部分に以下のコードを記載して実行してみてください。最後にセミコロンを入力するのを忘れずに。

Console.WriteLine("test");

これは、コンソール画面上に()で囲った文字列を表示するコマンドです。文字列はコマンドではないので””で囲ってあげる必要があります。

どうでしょうか。一瞬画面が表示され、直ぐに消えてしまい何が表示されていたか分からなかったかもしれません。この場合には、上記コードを以下のように書き換えてみましょう。

 Console.WriteLine("test");
 Console.ReadKey();

今度はどうでしょうか。画面が表示されたまま停止していると思います。Console.ReadKey()と入力すると、コンソール画面に何かキー入力をキーボードでしないと次に進まなくなるので、結果として実行後アプリケーションが終了せずに待機してくれるようになります。

testを変数に入れて表示してみる

ここからはMainメソッドの中身のみを記載していきます。今度はtestという文字列を変数に入れてそれをConsole.WriteLineで表示させてみます。
実行結果は、先ほどの結果と変わりません。

        static void Main(string[] args)
        {
            //ここに自作コードを挿入して実行します。
            string message = "test";

            Console.WriteLine(message);
            Console.ReadKey();
        }

C#の文法は型 変数名 = “文字列”となります。
以下のように記載する事で、文字列(string)として用意した変数(message)にtestという文字列を格納する。という意味になります。
Console.WriteLineがmessageに格納されたtestという文字列を読み取って表示してくれたので、先ほど直接”test”と記載した場合と実行結果が同じになったわけです。

string message = "test";

続く!