"インフラエンジニアの教科書"を読んで

"インフラエンジニアの教科書" を読み終えての感想です。

インフラエンジニアの教科書

インフラエンジニアの教科書

一言で言うとインフラエンジニアに求められるスキル全体を俯瞰的に網羅した本で、「インフラエンジニアはこういうものか」と思わせてくれる本でした。

サーバからOS、ネットワーク機器やストレージなどのわりと技術的な話から、ライセンスや機器の購入、データセンターの選定などの業務的(?)な話までひと通り網羅されています。普段私はサーバやOS、ネットワークの設定などのソフトウェアを中心とする業務を行っており、購買などの技術に直接的には関わらない、でもインフラエンジニアとして必要(?)な知識やスキルを持っていないので、そういう話が面白かったです。

最近は chef や docker、vagrant、openstack などのインフラを構築するため技術に自身の関心が集まっていたので、そこから改めて自分の視点を一歩引いてみる良いきっかけになったと思います。

Linux」や「ネットワーク」「ストレージ」などのそれぞれの技術にフォーカスした本はたくさんあると思いますが、それらを"インフラエンジニアの教科書"として俯瞰的に見ていて、かつ余り深くまで技術的な話はしないというところがとても稀有でかつ面白い本でした。内容もとてもわかり易かったので、まさに"インフラエンジニアの教科書"でした。

YAPC::Asia Tokyo 2013 に参加してきました

YAPC::Asia Tokyo 2013 に参加してきたので、気持ちが冷めないうちに感想を書きたいと思います。

Perl

私の Perl 歴は「たまーに Perl で短い便利スクリプトを書く」というレベルでほぼ初心者です。業務はインフラエンジニアでちょいちょい (Perlではなく) Ruby を使ったり、プライベートでもプログラミングをするので プログラミング初心者というわけではないですが、Perl に関しては今までノータッチという状態でした。

参加した感想

Talks では色々なテーマで発表がありましたが、スライドなどは後日、続々と公開されると思いますので内容はそちらに譲るとして、ここでは以下の3つの内容で素直な感想を書きたいと思います。(「気持ち」を書いておくと後で振り返った時に面白いと思いますので。。)

  • 雰囲気
  • 面白かったTalks
  • 参加してよかったと思うこと

雰囲気

会場は慶応大学さんの日吉キャンパスの一部の建物を借りた形で、全体的にそこまで大きくないのかな、という印象でした。 でも、カンファレンスはみなそうだと思いますが、とてもワクワクした雰囲気に会場が包まれていて、参加者の皆さんも同様に楽しんでいるんだな、という感じでした。そんな雰囲気を受けてか、私もとても「次はどんな Talk なんだろう」と、常に高揚感に似た気持ちを持って参加していました。

面白かった Talks

色々な Talk を聞いて、みんな面白かったのですが中でも @yusukebe さんのMojoliciousでつくる!Webアプリ入門と @naoya_ito さんが司会を努められた特別座談会 「Rubyの良いところ語ってください 〜そんなPerlで大丈夫か?〜」 が自分の中では印象的でした。

@yusukebe さんのお話は Perl の WAF (Web Application Framework) である Mojolicious についてのもので、Perl で Web アプリの作り方を初心者にもとても分かりやすい形で発表して頂きました。私は RubyRailsSinatra などを使って、Web アプリを書いたことがあったので、その分すっと入ってきたというのもありますが、それを差し引いてもとても話の流れがよく、「自分でも動かしてみたい!」と思うような内容でした。 Perl で Web アプリを書いてみたい、という方は後日公開されるであろう(?)スライドを見るといいと思います。

Rubyの良いところ語ってください」の方は、(超)著名な方々がパネラーとなり、RubyPerl の比較という観点からディスカッションを行うとても豪華なものでした。壇上のパネラーの方々皆さんが凄腕ハッカーでしたが、そこまで言語自体の具体的な比較などはなく、言語を取り巻くコミュニティの違いやそれぞれの言語の考え方の違いなどを話されていて、Perl 初心者の私にもわかり易い内容でした。Rubyのことしかよくわからない私でもPerlの文化などをわかった気になれた(?)セッションでした。司会をされていた @naoya_ito さんのファシリテートが素晴らしかったというのもあると思います。

参加してよかったと思うこと

1つ目には Perl の現状、文化、スタイル、ライブラリ、開発スタイルなどなど「本当の今」を知れたことが良かったです。Perl Monger の方々に怒られそうですが Perl と聞くと「なんとなく古い言語」のようなイメージがあり、いまは RubyPython の時代という考えが少なからずありました。私の周りでも 「Perl を使ってるぜ!」という人は他のLLと比べて少ないような状況です。しかしながら YAPC に参加してみると、会場で発表されている方々の話や会場の雰囲気には勢いのようなものがあり、少なくとも廃れていっている言語のようには全く感じませんでした。開発する上で利用するライブラリも CPAN モジュールとして充実しているようでしたので、普通に開発で使える言語という感じを受けました。「xxxのSDKPerlの選択肢がない」という話も少なからず聞くので、多少なりとも冷遇(?)されているのは事実のようですが、まだまだ発展していくのかな、という印象です。

2つ目はたくさんの著名な方の話を生で直接聞けたことがとても刺激的で良かったです。rebuild.fmPerl Hacker として有名な @miyagawa さんのお話を聞いたり、@naoya_ito さんや @dankogai さんなどなど、その他たくさんの有名人の方目の前にいらっしゃって、少し興奮してました(^_^;) これだけでも YAPC に参加する価値はあると思いますw (@miyagawaさんや@naoya_itoさんがrebuild.fmで話されている感じよりも早口で、それも印象的でした。発表時間の制約もあると思いますが、エンジニアの方はやっぱり早口なのかなと思ったり)

最期に

結果として YAPC::Asia Tokyo 2013 に参加してとても良かったと思っています。来年も機会があれば是非参加したいと思います。 また、発表者の方々ならびに運営の方々、そして参加者の皆さん、ありがとうございました。特に運営の方々は裏方として支えて頂いて、裏方なりの苦労もたくさんあったと思いますが、皆様のお陰でとても貴重な体験が出来ました。重ねて御礼申し上げます。

GitHub Octokit を使ってみた

GitHub が公開している Octokit を使ってみたので、その際のメモをまとめたいと思います。

Octokitとは

GitHub API を使用する際の client ライブラリのようです。Introducing Octokitにてイントロダクションが公開されています。5/31 時点では RubyObjective-Cバインディングが公開されています。ここではRubyのものを触ってみたいと思います。

準備

まずは octokit の gem をインストールします。ちなみに、私の環境は以下のようなものです。

$ gem install octkit

なお、実際に動かしてみた際に下記のようなエラーが出たので、Mountain Lion+rubyでopensslエラーを参考に証明書のダウンロードを行いました。ありがとうございます!

Faraday::Error::ConnectionFailed: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

絵文字を取得してみる

試しに GitHub で使用出来る絵文字を 10 個取得してみます

#!/usr/bin/env ruby
# octokit.rb

require 'open-uri'
require 'octokit'

emojis = Octokit.emojis.to_a[0...10]

emojis.each do |name, url|
  fname = File.basename(url).sub(/\?.*$/, '')
  File.open(fname, 'wb') do |file|
    open(url) do |content|
      file.write(content.read)
    end
  end
end

下記を実行するとカレントディレクトリにファイルが 10 個ダウンロードされました

$ ./octokit.rb

まとめ

Octokit を使うと GitHub API を簡単に叩けるようになるので、色々なことが簡単にできそうです。ただ「これがやりたい!」という明確なものがなければ、あまり使い道が無いかもしれません(^_^;)

"コーディングを支える技術" を読んで

"コーディングを支える技術" を読みを終えたので、感想を記してみたいと思います。

きっかけ

本書を読むきっかけとなったのは小飼弾さんのブログ記事、言語を支えるコンセプト - 書評 - コーディングを支える技術を読んだことでした。

今までいろいろなプログラミング言語をつまみ食いして、プログラミングの世界によく出てくるキーワード 「継承、型、Mix-in」などなどをわかった気 (?) になっていましたが、「一度振り返りの意味も込めて読んでみよう」と思い、本屋さんで手に取りました。

感想

本書は色々なプログラミングに取り入れられている仕様、仕組み、概念が『なぜこうなっているのか』を学ぶための本だと思います。if 文や for 文などの基本的な制御構文から始まり、コンテナやクラスなどのよく使う機能を「他の言語との比較」や「歴史からの経緯」の二つの観点から解説されています。私としてはこの二つの観点から言語の仕組みを解説されているのが、「とても論理的でかつ面白い!」と思いました。

本書の中では色々なキーワードについて、比較と歴史から解説されていますが私が特に勉強になったことを以下に上げてみます。

当たり前の仕組みの「なぜ」を学ぶ

プログラミングをしていると当たり前のように if 文や for 文、クラスや型を使い、それがあるのが当たり前のように思っていましたが、本書ではそれがどういった経緯で作られたのかが解説されており、とても新鮮で面白かったです。ほとんどのものは何かを楽にするために作られた、というのが主な目的でしたが、それがなかった時との比較がきちんとされていて理解し易かったです。

言語によっての解決方法の違い

プログラミング言語によっての解決方法の違いが、きちんとコードを使って解説されていてとてもわかり易かったです。例えばある機能を再利用したい場合、Java では継承や委譲を使い、Ruby では Mix-in を使う、などそれがコード付きで解説されていたのが良かったです。(すいません、例が微妙かもしれません...)

クラスが持つ複数の役割

3 つ目はクラスがもつ役割の複数の役割についてです。ある言語では主に「振る舞いの仕様」としてクラスを使っていたり、また、ある言語では「コードの再利用の単位」としてクラスを使っていたりと、一言にクラスと言っても複数の役割があるということを意識させられました。また、クラスという概念が複数の役割をもつ事によって、どのような問題があるのか、またそれを解決するためのアプローチが書かれており、面白かったです。

まとめ

あまり長々と書いても疲れるだけなので、上ではなるべく短く書きましたが、言語の色々な仕組みについて書かれていてとても面白く、かつ抽象的な説明と具体的な説明のバランスが良く分かりやすい本だと思います。本書でプログラミングに関することを再勉強、再確認ができたと思います。

何より良かったのはプログラミング言語の概念の「なぜ」を考える意識が、少なからずですが自身のなかにできたことだと思います。是非ご一読されることをおすすめします!

Play framework の設定ファイルで環境変数を読み込む

最近 Play framework で Web アプリケーションを作成していますが、その中で設定ファイル (conf/application.conf など) の中で環境変数を読み込みたい場面がありました。例えば、OAuth 認証を使って twitter などのアプリケーションとの連携をする場合に、設定ファイルに直接 consumer key を記述するのははばかれるので、『環境変数に設定しておきそれを読み込む』といった感じです。

やり方

play framework のドキュメント にやり方が書いてありました :-)

具体的には application.conf の中で以下のように環境変数${? } で囲ってあげると良いようです。 (ENV_VARIABLE環境変数です。)

hoge=${?ENV_VARIABLE}

あとは、下記のように環境変数を設定しておくと読み込むことが出来ました。

$ export ENV_VARIABLE=jojo

ちなみに application.conf 内で include したファイル内でも正しく環境変数を読み込むことができました。

こうすることによって、git などでバージョン管理下にあるファイルでもコミットしたくない情報を隠すことが出来ます。

Heroku にデプロイする場合

以下のように Heroku での環境変数を設定してあげると、ちゃんと動きました。

$ heroku config:add ENV_VARIABLE=jojo

ちなみに application.conf 内で ${ENV_VARIABLE} のように ? を抜かしてもローカル環境では動きましたが、Heroku では上手く動きませんでした。 (詳しい方、教えていただけると幸いです)

gcc コンパイルで規格を指定するとき

久々に C を書いていて、以下のような for 文を書くとコンパイルの際に怒られたので、調べてみました。 忘れないようにメモ。(ファイル名は適当です)

  // hoge.c
  for (int i = 0; i < N; ++i) {
    // do something
  }

以下のようなエラーが。。。

$ gcc hoge.c -o hoge 
hoge.c:8: error: ‘for’ loop initial declaration used outside C99 mode
解法

gcc の -std オプションを指定するといいみたいです。

$ gcc hoge.c -o hoge -std=c99
// エラー無し

"Emacs 実践入門" を読んで Emacs の良さを再認識する

普段プログラミングをする際に Emacs を使っているのですが,最近は『あまり使いこなせてないなぁ』と思うことが多々ありました.
そんなとき,下記の『Emacs 実践入門』という本と出会いました.ここではこの本の感想と,本を読んで改めて思った Emacs の良さを書きたいと思います.

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

Emacs

前もって私の Emacs 歴を記しておくと,初めて Emacs に触れたのは大学1年生の Unix に関する講義の中で,今は社会人 1 年目なので Emacs 歴は 7 年という事になります.ですが,(途中 3 年くらい触れていなかった時期があるとはいえ)とてもとても 7 年目と言えるレベルではなく,キーバインドはある程度覚えている程度で Emacs Lisp は全くと言っていいくらい読めないレベルです...(ちなみに作者の id:tomoya さんは Emacs 歴は 4 年だそうです.4 年でこの本を書くとはすごい...)

感想

率直に感想を述べると『この本すげぇ!!』の一言に尽きます.何がすごいかというと,この本には Emacs をほとんど使いこなせていない私でもわかるわかりやすさ と『そんな機能あったんだ!』という驚きが詰まっています.そして何より,この本のいいところは本に書いてある設定を真似するだけで『便利な機能を簡単に導入できる』というところだと思います.そこで,以下ではこの本といいところを書こうと思いました.,Web を見るともう既に書評を書いている方が多く見受けられたので,ここでは私が思う Emacs で躓くところ,Emacs 良いところを書きたいと思います.

Emacs でよく躓くところ

私が日常で Emacs を使う中で躓いたところ & 躓いているところは以下の 2 点だと思います

  1. キーバインド
  2. 設定ファイル

キーバインドでつまずく

まず何より Emacs を初めて使うにあたり最初にぶつかった壁は Emacs 特有のキーバインドでした.

大学で初めて Emacs に触れたと書きましたが,その当時は何より『キーバインド』の意味すらわかりませんでした.私は情報系の学科に所属していましたが,入学した動機は『なんとなく』というお粗末なもので,Unix など触ったことなどあるわけもなく,Windows も『インターネットは使える』レベルでした.そして知っているキーバインドは「Ctrl-s」で「保存」,「Ctrl-c」で「コピー」,「Ctrl-v」で「ペースト」,「Ctrl-z」で「アンドゥ」ぐらいでした...(今考えるとなかなかだ^^;)

そんな「パソコンちょっと触ったことあるよ人間」にとって Emacsキーバインドはカオスそのもので「どうやってこれセーブするんだ!」「わけわかんない画面出てきた!」「Ctrl-z で元に戻せねぇー!!」というのは日常茶飯事で,最終的には泣く泣くマウスでメニューバーからコマンドを選んでいました.

そんな自分が Emacsキーバインドに慣れるきっかけになったのは,やはりプログラミングだと思います.プログラミングをよくやる方なら分かると思いますが,カーソルの移動の際にいちいちホームポジションを崩して,キーボードの右下にあるカーソルキー (もしくはマウス) を触るのはちょっと億劫だと思います.情報科に所属していたこともあり,ちょくちょくプログラミングをする機会があった私も,徐々にホームポジションを崩すのが煩わしく感じ,頑張って Emacsキーバインドを体に叩きこみました.今ではプログラミング以外で文書を書くときも Emacs キーバインドでないと困るぐらい慣れました.

設定ファイルでつまづく

Emacs に慣れてきた頃の方は次の段階では .emacs 或いは init.el などの設定ファイルを弄り始めると思います.私も『こんな機能ないかな』と Google にキーワードを打ち込みよく設定を探しています.しかしながらここでもよく躓くことがあります.

まず検索で引っかかった設定をコピペで .emacs に書きこんでも,記事が古い場合やバージョンの違い,環境の違いなどでうまく動作しないことがしょっちゅうです.また,自分が想像していた挙動と違うことも多々あり,結局,諦めることが多くあります.Emacs の設定は Emacs Lisp で書いてあることが多く,これが読めない自分にとってはデバッグのしようがないというか,そもそも読もうとすらしていないのが原因かもしれませんが..

ただ最近は Emacs 実践入門を読んだこともあり (?) ,また,Emacs Lisp も結局はプログラミング言語の一種 (?) だと気がついたこともあり,設定がうまく動作しないときにはなんとなくではありますが デバッグができるようになりました.よくよく考えれば当たり前のことで,設定に書いてあることがすべてでそれ以上でも以下でもないんですね ^^;

やっと本当の Emacs 生活が始まったような気がします.

Emacs のいいところ

今度は Emacs のいいところをつらつら書こうと思いましたが,正直,上に書いたことがそっくりそのまま Emacs のいいところだと思います.

つまり,Emacsキーバインド自在な設定が可能 というところに尽きると思います.

キーバインドは他のエディタでも普通に存在するものなので Emacs だけのメリットではないかもしれませんが,後者の自在な設定は Emacs が一番得意とするところだと思います.Emacs を使い始めたばかりの方はいきなり設定ファイルをいじり倒すというところまでは行かないかもしれませんが,やはり効率のよい作業を目指す場合には自分に合った設定を探すのが一番だと思います.

まとめ

とりとめない文書になってしまいましたが,Emacs はプログラミングをするにも,文書を書くにもとても適したエディタだと思います.Emacs に触れたばかりの頃は全くといっていいほど Emacs の良さがわかりませんでしたが,数年使ってみることでその良さが少しずつ分かってきたような気がします.

そして何より Emacs に触れたばかりの人や Emacs をもっと勉強しようという人には『Emacs 実践入門』はとてもお勧めです.