よかろうもん!

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

HerokuでカスタムドメインのSSL endpointを利用する方法

カスタムドメインは設定済みの状態でSSLアドオンを追加してSSL証明書を設定するまでの方法をメモ。

 

Herokuのアプリケーション名を sample-app とする

 

SSLアドオンの追加

$ heroku addons:add ssl:endpoint --app sample-app

 

■中間証明書の取得

SSL証明書を取得したところが配布しているものを取得する

 例えばRapidSSL社が提供するものだと以下のコマンド実行で取得できる

$ curl https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem > chain_ca.pem

※formatがdosのため必要に応じて文字コードを変換する必要がある

 

秘密鍵ファイルの作成

SSL証明書を発行する上で準備した秘密鍵ファイルを用意する。

秘密鍵ファイルは先頭が下記で始まるもので、ここでは準備したファイル名を server.key とする

-----BEGIN RSA PRIVATE KEY-----

 

■ 証明書ファイルの作成

業者から送られてきた証明書ファイルを用意する。

証明書ファイルは先頭が下記で始まるもので、ここでは準備したファイル名を server.crt とする

-----BEGIN CERTIFICATE-----

 

■ 証明書に中間証明書を追加

$ cat chain_ca.pem >> server.crt

 

■ Herokuへ証明書ファイルと秘密鍵ファイルを送信

$ heroku certs:add server.crt server.key --app sample-app  

 

Adding SSL endpoint to sample-app... done

messageleaf now served by iwate-2222.herokussl.com

Certificate details:

 ・・・(略)・・・

 

■ CNAME情報のアップデート

CNAMEの設定を、カスタムドメイン設定時に指定されたものから、レスポンスのテキスト内に表示されているところに変更する

sample-app.herokuapp.com.   =>   iwate-2222.herokussl.com.

 

■ 確認

 

$ heroku certs --app sample-app  

 

Endpoint                  Common Name(s)                      Expires                  Trusted

------------------------  ----------------------------------  -----------------------  -------

iwate-2222.herokussl.com  www.sample-app.com, sample-app.com  2014-07-26 10:00:00 JST  True

 

あとはSSL証明書が設置されるまで数分程度だけ。

 

 

 

----追記

SSL証明書の更新をする場合は以下のコマンドを実施してください。 

$ heroku certs:update  server.crt server.key --app sample-app  

 

 

Microsoft Office 2007/2010のファイルから全文字列を抽出できるgemを公開しました!

Office 2007 以降、ワード/エクセル/パワーポイントのファイル保存形式がOffice Open XML形式となりました。

そのため、Office 2003 以前のファイルから文字列を抽出するために使っていた xlhtml や ppthtml 等では抽出することができなくなっています。

なので今回、officex2strというgemを作成し、 rubygems.org で公開しています。

現在対応できてるのは、docx/xlsx/pptx の3タイプです。

導入手順や使い方は下記を見て下さい。

https://github.com/interu/officex2str

コンソールからも簡単に試すことができますので、ぜひ一度試してみて下さい。

SonicGardenプログラマが大切にしている考え 〜キャラクタを明確にするということ〜

SonicGardenのスタイルや取り組み、さらにはエンジニアに求めるスキルについて、代表の倉貫がブログや雑誌など様々なところで語ってきました。

これらの記事中で語っているスキル以外に、SonicGardenのエンジニアが大切にしている価値観について書いてみます。

 

まず前提として知っておいてもらいたいことがあります。

ご存知のようにSonicGardenのメンバーは現在7名です。

 

この少人数でSKIPyouRoomkeep in touchなどの自社サービス以外に、納品のない受託開発も行なっています。

この7名で、マーケティングからシステム設計/開発、さらにはシステム運用まで全てを担っているため、個々人に求められるスキルも多岐に渡ります。

その中でプログラマとして活躍してもらうためには尖った技術力とユニークな考え方が必要となります。

 

これを踏まえ、今回はSonicGardenのエンジニアが求めてる大切な価値観を1つだけご紹介してみようと思います。

 

photo credit: kevin dooley via photo pin cc
 

キャラクタを明確にすること

新メンバーとしてSonicGardenにJoinすると、最初のうちは週に1度のペースで振り返りを一緒に実施します。今週1週間でやったことをインプットに、この1週間での課題点を洗い出し、課題が見つかると、その解決/対応策をメンバー全員で考えます。

 

※ 振り返りの詳細については、最近新メンバーとしてJoinした jit がブログで書いてくれると思うので、ここでは割愛します。

 

振り返りの最後によく新メンバーに聞く質問があります。

どんなキャラクタを目指していきましょうか?』という質問です。

 

なぜこのような質問をするかというと、"何かひとつ尖った特技/技術/考え方を身に付け、その分野ではメンバーに頼られるようなエンジニアにはやくなってほしい"と全メンバーが思っているからです。

 

では、現在のSonicGardenのエンジニアにはどのような特徴があるかを一言で紹介していこうと思います。 

 

■ mat_aki (Akihiro Matsumura)

  • 最もRails/Ruby/データモデリング能力が高く、Herokuのエキスパート
  • 技術知識が多く、最速の開発スピードを有している攻めのプログラマ

maedana (Naoki Maeda)

  • 外部サービスとの連携が得意で、細部まで目を配りコーディングでき、職人気質
  • バンクーバーやアイルランドなど海外で暮らしながら仕事をする、国境なきプログラマ

mah_lab (Masahiro Nishimi)

  • UI/UXなどのデザインを得意とし、RubyJavascriptなどの技術力も高い
  • 新技術などはすぐに試したい知識欲旺盛タイプで攻めのプログラマ

■ interu(私、、、自画自賛!?w)

  • AWSなどの仮想化技術やインフラ/ミドルウェア領域が得意
  • 安定性/信頼性を考えた、守りの姿勢でのコーディングが得意

 

このように、個々人のキャラクターや強みは少しづつ異なっています。

得意領域が各々違うことで、悩むことがあったらその分野に強いメンバーに相談することで互いに補完し合い、結果的にサービス品質の向上につながっています。

 

考え方の違いについても同様で、全員が攻めの姿勢のエンジニアがいるから新しい技術を積極的に採用することができ、反対に守りの姿勢のメンバーがいるから、サービスの信頼性を担保した設計を実現できていたりもします。 

 

photo credit: kevin dooley via photo pin cc

 

様々なキャラクタが集まり、多様な意見を言い合うことで、各人が観点を広げることができ、スピード感を持って安定したサービス/システムを創っていけていますが、新メンバーについても早くこのような状態になってほしいと思うが故に、前述したような質問を投げかけるのです。そうした方が本人も、早く貢献しなくては!という考えが生まれ、"おんぶに抱っこ"という状態を早く抜け出せることができるはずです。

 

他にも、SonicGardenプログラマが大切にしてる価値観はありますので、それらについてもブログで書いていこうと思います。

Mountain Lionの登場を待たずにできるMacの画面をAirPlayでテレビに出力する方法

iPhone 4SやiPad2, New iPadからならミラーリングでAppleTVに表示することができますが、現在のMacの最新OSであるLionではAirPlayでAppleTVに表示することができません。
※噂では今夏にリリース予定のMountain LionでAirPlayに対応するようです。

なので、今はMacの画面をAirPlayでAppleTVに出力することはできないのです。とあるアプリを使わない限りは。

そのアプリこそ、iPhone/iPadの画面をMacにAirPlayで表示可能にするアプリで有名な『Reflection』をリリースした Squirrels LLCが作った『AirParrot』です。

AppleTVとMacが下記の要件を満たしていれば簡単にAirPlayで表示できます!

AirParrot requires OS X 10.6.8+ and AppleTV 2 or 3.

AirParrotですが、良心的なことに無料で試すことができます。時間制限はありますが。
また、価格も良心的で 1ライセンスで $9.99。5ライセンス以上になるとバリュー価格で $29.99 となります。

実際にソニックガーデンのオフィスで活用しており、わざわざVGAケーブルの抜き差しをする必要がなく快適なオフィスライフをおくれています。
f:id:interu:20120606204344j:image:w640

日頃はMacBookAirと24インチの外部ディスプレイを利用して開発を行なっていますが、AirParrotをさらに使うとトリプルディスプレイも可能なようです。ただ、このアプリはCPUリソースを富豪的に使うようなので、少しだけ注意が必要です。
f:id:interu:20120606205243p:image:w360

最後に。
ミーティングなどでVGAケーブルを接続してテレビ出力しているような方々はぜひ一度試してみてください。

Facebookから社内ADまで、外部サービスと連携するときに知っておくと役に立つライブラリ

外部サービスと連携すると、連携するサービスの状況に依存していろいろなエラーが発生したりします。
例えば外部サービスが高負荷であるために、タイムアウトのエラーが発生したり、強制的にコネクションをリセットされるようなエラーなど様々です。
その状況が発生した際に、利用ユーザにエラー画面を表示したり、再操作を指示するメッセージを表示するのは、ユーザ視点で考えると微妙ですね。
ではどうすればよいでしょうか?
そんなときは、retryableというライブラリ(gem)を利用するとよいです。

このretryableというgemは、名称から推測できるとおり、失敗(エラー)したときにリトライしてれるものです。
例えば、SonicGardenが提供しているサービス『youRoom』では、Facebookアカウントでログインという機能があります。
その認証に稀ではありますが以下のようなエラーが発生することがあります。
「 Errno::ECONNRESET: Connection reset by peer 」
これはFacebook側の都合で、強制的にコネクションをリセットされたというエラーです。
このようなときは、retryableを使うことで、Facebookの認証処理のところで、「 Errno::ECONNRESET」というエラーが発生したら、指定した回数だけ再試行するというロジックを簡単に実現できます。

具体的な実装は下記のREADMEやソースコード自体を参照するとすぐに分かるかと思います。
https://github.com/nfedyashev/retryable

今回の例だと、下記のようなコードになります。

retryable( :tries => 3, :on => [ Errno::ECONNRESET, TimeoutError ] ) do
  # Facebook認証処理
end

このように、実現は簡単なので、利用者にエラーを意識させないような仕組みを導入することで、
利用者にとっても開発者にとってもメリットのある仕組みをどんどん導入していきましょう。

ちなみに、SKIPでも社内ADと認証連携をするときに同様の仕組みを導入しています。