よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

「Developer Migration 2013」で話をしてきたので資料を公開します

「DevOpsが引き金となるインフラエンジニアの進撃 どうする?デベロッパ」というタイトルで、Developer Migration 2013のイベントで登壇の機会をいただいて話をしてきました。

講演内容の概要です。

開発現場のスピードと生産品質を高めるプラクティスとして提唱されるDevOps。

現場にもたらすプラス効果については多く語られますが、「個々のキャリアにどんな変化をもたらすか」について考えてみたことはあるでしょうか?

今、DevOpsが「インフラを管理しアプリケーション開発もするスーパーエンジニア」を生み出そうとしています。

本セッションではDevOpsの概要や現場摘要例を紹介した上で、新しい生産体制がエンジニアのキャリアにどんな変化をもたらすのかを考察します。

 

発表した時の資料はこちらになります。

 

 

 

内容としては、インフラエンジニアだった私がなぜアプリケーションエンジニアとしての道を開拓したのかの経緯と、今後なぜプログラミングが必要となるのかを個人的意見を交えてお話させていただきました。

 

講演とは別のセッションで「2013年の開発現場で求められるエンジニアとは?」というテーマでパネルディスカッションをさせていただいたのですが、そのときに講演者の皆さんが、それぞれはっきりとした意見をお持ちで、個人的にはいろんな観点を学ぶ機会となりました。

 

イベントのことをブログでまとめてくださっている方々もいらっしゃいますので、ぜひ下記のブログもご参照ください。

 

本資料にてご意見、ご感想等ございましたら、右下に表示されているMessageLeafよりメッセージをいただけますとうれしいです。

※MessageLeafでのやり取りは公開されませんので。

debugger-linecache のbundle に失敗したら

以下のように debugger-linecache のbundle時に失敗したときの対応メモ。

Installing debugger-linecache (1.1.2) with native extensions 

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.


        /Users/interu/.rbenv/versions/1.9.3-p362/bin/ruby extconf.rb 

checking for vm_core.h... no

checking for vm_core.h... no

Makefile creation failed

**************************************************************************

No source for ruby-1.9.3-p362 provided with debugger-ruby_core_source gem.

**************************************************************************

*** extconf.rb failed ***

Could not create Makefile due to some reason, probably lack of

necessary libraries and/or headers.  Check the mkmf.log file for more

details.  You may need configuration options.


Provided configuration options:

--with-opt-dir

--without-opt-dir

--with-opt-include

--without-opt-include=${opt-dir}/include

--with-opt-lib

--without-opt-lib=${opt-dir}/lib

--with-make-prog

--without-make-prog

--srcdir=.

--curdir

--ruby=/Users/interu/.rbenv/versions/1.9.3-p362/bin/ruby

--with-ruby-dir

--without-ruby-dir

--with-ruby-include

--without-ruby-include=${ruby-dir}/include

--with-ruby-lib

--without-ruby-lib=${ruby-dir}/lib



Gem files will remain installed in /Users/interu/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/debugger-linecache-1.1.2 for inspection.

Results logged to /Users/interu/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/debugger-linecache-1.1.2/ext/trace_nums/gem_make.out

An error occurred while installing debugger-linecache (1.1.2), and Bundler cannot continue.

Make sure that `gem install debugger-linecache -v '1.1.2'` succeeds before bundling.

こんなエラーが出たら、debugger-ruby_core_source をインストールしておくと解決します。

$ gem install debugger-ruby_core_source -v1.1.6

いろんな人が関わっている!?ソニックガーデン開発の裏舞台 (SonicGardenアドベントカレンダー5日目)

SonicGardenアドベントカレンダー、5日目までまわってきちゃいました。

今日私が書いているので、残りは副社長と社長の2人ですね。トーク上手な二人なだけに、おもしろい記事が出てくること間違いなしだと思います。

今回は、あまり知られていないソニックガーデンのサービス開発の中で関わっている人たちについてご紹介します。

 数ある中でも今回は、Webサービスの「デザイン」と「テスト」の2つに絞って紹介します。

 

デザイナーとのかかわり

Webサービスの開発はSonicGardenが得意とする領域です。そのためプログラマのみでサービスを作り上げることはできるのですが、スタイリッシュなデザインサイトにしたいということであれば、デザイナーの方のチカラを借りたりします。

 

実際に自社サービスの「SKIP」や「youRoom」、さらには以下のようなフロントページのデザインを「怖話」で有名なフィヨルドの町田さん(@machida)や、「ズルいデザイン」で有名なフリーランスの赤塚さん(@ken_c_lo)にデザインしてもらったりしています。

http://ja.youroom.in/

http://emergency.youroom.in/

http://www.sonicgarden.jp/

http://ja.messageleaf.jp/

 

ただ、デザイナーさんの方にサイトデザインをお願いするというのは巷でもよく聞くパターンですよね。

では、何か特別かというと、machidaさんや赤塚さんは、インデントや簡略構文によって簡潔な記述を行えるhamlやsass、さらにはソースコードのバージョン管理を行うGitを使いこなしているプログラマスキルを兼ね備えたデザイナーなのです。

そのため、Gitで管理しているソースコードを直接変更してもらうということが可能なのです!

 

通常は、デザイナーがCSSを書いて、それをプログラマがサービスにせっせと適用するという非効率的な作業をしなければなりませんでしたが、デザイナーさんが直接ソースコードを変更してくれるので、無駄な作業を減らすことができます。

また、以前はデザイン変更中に開発をストップすることを求められることが多々有りましたが、hamlやsassを理解してくれているデザイナーの方はソースコードの変化にも柔軟に対応してくれるため、デザイン変更中であっても機能開発を続けることができるようになりました。

それもこれも、デザイナーの方々がプログラマに求めれられるスキルをオーバーラップしてくれたからですね。プログラマに歩み寄ってくださり、ありがとうございます!

あとはデザイナーの方々が安心してソースコードの変更ができるように、プログラマは、デザイナーさんが変更したソースコードを責任持って確認し、必要に応じてリファクタしてあげましょうね。

 

 

続いて、アプリケーションフレームワークのバージョンアップやミドルウェア/OSのリプレース時に行うテストについてです。

オンラインテスティング

アプリケーション単体のテストはCapybaraやRspecなどのようなツールを活用することで実現できますよね。ソニックガーデンでも積極的にテストコードを書いて品質担保をしようとしています。

ですが、テストツールは万能ではありませんので、テストすべてを網羅するのは困難です。

特にフレームワーク自体のバージョンアップでは、テストツールのバージョンアップを同時に求めらることもあり、場合によってはテストコードを改修しないと動かなかったりします。

また、テストツールではアプリケーションを動作させるミドルウェアやOSが変化した際のテストはできません。

そのため、人的なテストも時には必要となります。

そんな時、巷ではテストのアウトソースが利用されるようです。ただ、テストケースを洗い出したドキュメントの作成や入力に対する結果などをまとめたドキュメントを事前作成する必要があるみたいで、アウトソースするのも一苦労のようです。

そこでソニックガーデンでは、より効率的なテストのアウトソースを実現するためにフィヨルドのインターン生のチカラを借りています。

ここ半年以内に、社内SNS「SKIP」と「youRoom」のフレームワークの最新化およびOSディストリビューションの最新化を実施した際に、テスト環境でさまざまなテストの協力をしてもらいました。

このとき工夫した点は以下。

  • コミュニケーションは全てSkype
  • 不具合を見つけたらGoogleスプレッドシートで報告(再現方法も記述)
  • 不具合が登録されたらプログラマはすぐさま修正
  • 修正完了後、不具合発見者にすぐさま再確認依頼

完璧な網羅テストを依頼しようとすると、確かに厳密なドキュメントが必要となりますが、ソニックガーデンではこちらのエントリにあるように、

"SonicGardenのアプリケーション開発は、「どれだけ頑張ってもバグは発生する。0にするよりもどれだけ早く直せるかを考える」"という方針で考えています。

そのため、テストの目的でも、不具合0を目指すのではなく、多くのユーザが利用する機能を重点的にテストし、なるべく不具合を減らすようにしています

この背景もあり、フィヨルドの優れたインターン生協力のもと、テストのクラウドソーシングを実現してもらうことができました。

インターン生のみなさん、ホントご協力ありがとうございました! 

 

これまでに述べてきたように、SKIPやyouRoomなどのサービスは、さまざまな方々のチカラで成り立っています。これからも多くの方々に協力していただくことになるかもしれませんが、そんなときでもソニックガーデンらくし、既存のやり方のままではなく、何かしらひと工夫したアプローチを心がけていこうと思いますので、ご協力よろしくお願いします。

 

 

それでは、次はブログを書かないことで有名な副社長の@pastaonlyにバトンタッチです!エンジニアがこれまで繋いできたバトンをまさか放棄したりしないはず・・・。

 

最後にお知らせ。

ネット上で年賀状が送れる「Keep in touchグリーティングカード」を使って、例年とはちょっと違う新しいスタイルのウェブ年賀状を送ってみてください。

ビジネスでもネットで年賀状を送ろう!〜もっと手軽に、もっと心を込めて〜Keep in touchグリーティングカード - SonicGarden 株式会社ソニックガーデン

 

あわせて読みたい(Advent Calender編)

1日目:「お仕事忙しいですか?」と聞かれると返事に困る話

2日目:大は小を兼ねない〜丁度良いソフトウェア開発〜

3日目:SonicGardenの1プログラマから見た「納品のない受託開発」

4日目:ルールを作るな。習慣化せよ。

 

 

 

Route53にNaked Domainを設定する方法〜ELBを利用しない場合〜

AWS

以前のブログでは『Route53にNaked Domainを設定する方法〜ELBを利用する場合〜』について書きましたが、今回はELBを利用しない場合の設定方法を記しておきます。

Route 53ではAレコードの設定でNaked Domainを表現する "@" が利用できません。そのため、AレコードのAliasの機能を利用して実現します。

 

ここでは interu.jp というNaked Domainでアクセスできるようにしてます。

まずは www.interu.jp のAレコードを定義します。

f:id:interu:20121218002423p:plain

上記の設定は、一般的なDNSのAレコードの設定で以下の設定となります。

a    www   75.100.100.100
 

続いて interu.jp でアクセスした時に www.interu.jp へのエイリアス設定を行います。


f:id:interu:20121218002428p:plain

AliasでYesを選択し、Alias Targetに上記で定義した www.interu.jp を挿入します。

※ www.interu.jp を定義していない場合はエラーとなります

 

これで interu.jp でアクセスすると www.interu.jp で定義しているところにエイリアス設定が行われNaked Domainでアクセス可能となります。

 

当たり前だけどElastic IPにもURLは割り振られるよ

AWS

EC2を起動した時にはそのサーバにアクセスするためのURLが割り振られます。

Elastic IP(固定IP)については、ManagementConsole上での表記がURLではなくIPアドレスのみとなっていますよね。

で、普通に考えるとElastic IPにもURLは割り振られるだろうというのは予想できますが、念の為に確認してみたところ、想像通りでした。

 

ちなみに何故調べようと思ったかというと、先日、HerokuのShared Postgresが以下のようなエラーを返すようになり、サービスダウンしたようで、その時にHerokuのDB接続情報に関する表記を見たのがきっかけでした。

 

Sql could not translate host name "ec2-123-45-67-89.compute-1.amazonaws.com" to address: Name or service not known
 
※Herokuの SQL DaaS からDB接続情報を確認すると以下のようになっています。

 

f:id:interu:20121207153521p:plain

 

これをみて、「Elastic IPを使っていないのかっ!?」と一瞬思いました。

で、もしこのインスタンスがハングって別インスタンスを起動してリカバリしないといけない状況だとしたら、Heroku側のオペレーターが情報を書き換えてくれるまでどうしようもないのか!?という考えが脳裏をよぎり・・・。

Herokuのことなのでそんな仕組みにはしないだろうとは思いましたが、念の為に確認したところやはりElastic IPにもURLは割り振られていました。URLというかDNSの設定と言ったほうが正しいですかね。

なので、記載がURLであってもElastic IPを利用しているかもしれないということです。これで一安心ですね。

 

上記の障害については、障害発生してから20分後にはShared Postgresが復旧しました。Shared Postgresが別インスタンスでリカバリしたのか、同一インスタンスでShared Postgresがリカバリしたのかは確認するすべがなかったので定かではありませんが。。。

 

最後に1点だけ疑問点が残りました。

それは、「何故HerokuはわざわざURLを利用しているのか」というものです。

DNSの正引きをしない直IPの方が、耐障害性も上がるし、正引きの時間も無視できるのに。

まぁ、かなり細かいことでほとんど無視してもいいレベルのことですが、気になってしまいました。詳細を知っているという人がいましたら、教えてくださーい。