heroku

2016年4月15日 (金)

永和システムマネジメント様と合同勉強会を開催しました

@ucsmkyです。

突然ですが、先日永和システムマネジメント(以下ESM)様と合同勉強会を開催しました。

事のきっかけ

突然なんだという話ですが、事のきっかけは昨年12月のRubyKaigiのDrinkupでのことです。
ESMの伊藤さん(@koic)と話してた時、「最近永和さんいろんな会社さんと合同勉強会を開催されてますよねー」という話になってから、勢い余って私が「じゃあ今度一緒にやりましょうよ」と言った所伊藤さんも「よしやりましょう」、と。

因みに1月はDRECOM様との予定があるので、その次に、ということで取り敢えず予定だけ頂きました。
(因みにDRECOM様との開催はこちら

で、テーマについてですが、打ち合わせた結果、以下の内容で決まりました。

ワールドパブ「クラウド×Agile」

ワールドパブとは

ワールドパブというのはワールドカフェのアルコールあり形式のスタイルでファシリテーション手法の一種です。
ワールドパブとは

過去事例で言いますとクラスメソッド様とESM様の合同勉強会がその形式でした。
クラスメソッド様とESM様の合同勉強会

各々のテーブルごとにテーマを決めて意見交換を行うというスタイルです。
各テーブルごとにテーブルオーナーを決めておく必要があります。

テーマは最終的に以下の内容で決まりました。

テーマ

FLECT側

  • クラウド(AWS、Heroku)
  • フロントエンド

ESM様

  • 強いチーム
  • リモートワーク

各テーブルごとのディスカッション内容とまとめはESM様のサイトを参照していただければと思います

http://agile.esm.co.jp/news/2016-03-30-flect-esm-world-pub.html

参加してからの気付き

私はテーブルオーナーとして参加したので、他のテールブルの話題については実際に参加された方の意見を以下に抜粋します。

参加された方の意見

お酒と食べ物でリラックスしながらお話するのは、たのしいですね。 初対面の方とも和やか雰囲気でお話できて、大変、楽しかったです。

一方で、ほんとうの課題についてなかなか深掘りできない、という面もあったかもしれません。 ですが、ひとりで悩んだり、考えこんだりしているよりは、みんなに話して意見をもらう、というのは改めて課題の整理ができて、非常に良い経験でした。

たとえば、

  • リモートワークは今後より広がってゆくことが望ましいけど、業務量の制限やミーティングの調整などチームメンバーの文化が整えてゆくことが重要だなぁ
  • 強いチームになるには、メンバーがお互いに変な恐怖を抱かず意見がいえる環境が必要だなぁ
  • チームの状況と目的がまずはじめにあってそれからAWSやHerokuなどツールを選択することが重要だなぁ

など、当たり前のことながら、課題をクリアするための本質的な点を再確認できたことが良かったです。

これらの共通の課題は、「ロールにかかわらずメンバー同士が、互いをよく知っているか」という当たり前のことをチームがどれだけできているか、時間を割けているか、ということかなと思います。

メンバーのスキルセットをはじめとして、ときには「お子さんがまだ小さいくて送り迎えが必要」とか「今日は花粉症がひどくてだるい」など、スキルセット以外にも、仕事をするにあたり影響を及ぼす要素はたくさんあります。 また、こうした個人的な事情、というのはお互いに開示するまでそれなりに時間と信頼関係が必要なものなので、明示的な場や時間を取ることが必要だろうな、と感じました。

この方法の1つとして、アンゲームというのを最近、メンバーから教えてもらい、利用したのでご紹介します。 非常に簡単なルールと準備で、お互いの胸の内を話してゆく仕組みになっているゲームです。 プロジェクトの開始時や定期的なふりかえりで活用なさってはいかがでしょうか。

(by おっぴー、男:30代)

まとめ

私のテーブルのまとめをざっくりと上げますと以下の内容です。

Keep

クラウドを利用するにあたって、AWSとHerokuを活用するパターンをある程度提示できたかと思います。

  • エンジニア主体で進む(Heroku)か、DevOpsで進む(AWS)か
  • インフラエンジニア(サーバ側の事情に詳しいという大前提)の枠をチームに設ける(AWS)か、チームは全員開発に専念し、アドオンで解決する(Heroku)か

また、ESM様とFLECTの開発事例がどうなっているのかも情報交換が出来たかと思います。

  • 開発の基盤は、案件の引き合いの違いによるところが大きいという点
  • FLECT側はForce.comとのインテグレーションが多いのでHerokuを利用する事が多い
    • その代わりFLECTの開発は割りとバリエーションがある(開発言語は雑多)
    • ESM様はほぼRuby(0.5%ほどNode.js)

Problem

課題点として以下の点が挙げられました。

  • 議論の中心が定められなかった。(テーブルオーナーである@ucmskyの力不足です。。)
  • IaasとPaasの使い分けに関してコストの観点での境界がどのあたりになるのかの掘り下げが足りなかった。(@ucmskyの個人的な見解)
  • @koic様の「SIとインフラがどう絡むか?」の質問には上手く掘り下げることが出来なかったこと。

Try

個人的にやってみたかったこととして、オンプレのトラブル事例に対して、クラウドでどのような解決が可能かというディスカッションをやってみたかったです。 (某ショッピングサイトのトラブルの事例を後になって思い出したので時既に遅しでしたが。。) 逆にもしオンプレでなければならない事例があればその掘り下げも。

最後に

永和システムマネジメントの方々、ありがとうございました。是非また一緒に勉強会を開催させていただきたく思います。

続きを読む "永和システムマネジメント様と合同勉強会を開催しました" »

2016年2月12日 (金)

Crystal勉強会でFrostネタで登壇し、Herokuにデプロイするまでを纏める

ドーモ、読者=サン、ペンギン@ucmskyです。

結構ご無沙汰してますが、先日1月22日にクックパッドさんで、第3回Crystal勉強会が開催され、ありがたいことに15分のセッションの枠をいただくことになりました。

実際は20分以上喋り尽くしました。

そして先日、codeiq magazineさんに記事にしていただきました!
いえーい。ピースピース。
実践的なテーマの発表も増えた「東京Crystal勉強会」第3回の様子をレポート!

私のセッション資料は、こちらです。
CrystalでもRailsを使いたいですか?

「バグを見つけたら、”俺が直す”くらいのつもりで触れ」と僕はキメ顔でそう言った。

後、「Kemalはいいぞ」

Crystalの簡単な紹介

ここでざっとCrystalについて完結に説明させていただきます。
平たく言うと、Rubyライクな言語なのですが、以下の特徴を持っています。

  • ビルドしてLLVMバイナリを出力する
  • 静的型付け
  • マクロによるコードジェネレート

文法に関してはとりあえず以下の解説に目を通していただけると感覚は掴めると思います。

Crystal 入門

ご覧のとおりのRubyライクです。
ただしRubyとの大きい相違点として、メタプログラミングで使用するeval系のメソッドなどが使えなくなっています。(ですのでメタプログラミングRubyで記載されている内容になるともう全く、RubyとCrystalは別物と言って過言ではないです)
ただ、とりあえず動かしてみるような場合に関しては、Rubyの知識でも概ね問題はないと思います。(実際に僅かな読み替えで対応可能でした)

尚、去年のRubyKaigi2015でもCrystalを扱ったセッションもありました。

Introducing the Crystal Programming Language

Heroku社の中の人の@leinweberさんによるCrystal概論の発表です。

ぶっちゃけ私がRubyKaigi2015のLTのCFPに送った内容とほぼ全部被りました。

その他細かい点の解説、対応しているプラットフォームの情報、更新履歴などは公式サイトや、日本コミュニティのサイト(ドキュメントなどは日本語に翻訳しています)に記載されています。
URLはこちら。

なお、Latestバージョンは2016年2月4日時点で0.11.1となっています。

Crystalを取り巻くツール

ツールの開発も活発に行われています。Webで公開されているもので有志の人が纏めた一覧がこちらです。

awesome-crystal

DBアクセス用のツール、特にpostgresqlへのアクセスツールは前述のRubyKaigiで登壇された、@leinweberさんが作られました。

Web系のツールの開発も活発に行われていて、Rubyでよく使われるSinatra系のツールや、WebではおなじみのRuby on Railsライクなツールも出始めています。

Sinatraライクなツール Kemal

シンプルな構成になっているフレームワークですが、現時点でも高い品質となっています。 実際に公開されているアプリ開発にも使用されており、第3回Crystal勉強会でもWebアプリ開発事例としてKemalを使用したアプリが紹介されていました。

Crystal で実際のウェブサービスは作れるのか?

Frost as Crystal on Rails

そしてもう一つ関心を抱かれるのが、CrystalがRubyライクというなら、Railsのようなツールは無いのか? だと思うのですが、幾つか候補はあります。

一つがAmethyst、もう一つが今回取り上げるFrostです。
どちらもまだバージョンは0.2を超えるかどうかという始まったばかりのプロジェクトです。
Frostを取り上げた理由については

  • 全体的な枠組みが出来つつある
  • ActiveRecordライクなツールがある程度使える

という感じです。

サイトはこちら Frost

チュートリアルは同じリポジトリの
guides
に同梱されています。

Latestバージョンは2016年2月4日時点で0.2.1となっていますが、Crystal本体の破壊的変更(コアライブラリのファイル名やファイルパスがよく変わるので)の影響で動作しなくなっています。
(時間を見つけて私も調査してみます)

動作確認については、Crystal 0.10.2で確認している以下のリポジトリをcloneすると取り敢えず動きます。

frost_sample

チュートリアルでまだ書かれていない部分で、私が確認した点は以下のとおりです。

どんな感じのツールか

取り合えずRailsでいうところのrails new では以下のディレクトリなどが生成されます。

パッと見た感覚では、大枠の構想は固まっているように見えます。どこに何を配置するかは、そのままRailsの仕様に沿うようです。

Routing

公式サンプルでは以下のRoutingの設定が記載されています。


# config/routes.cr
Frost::Routing.draw do
  resources :posts, only: %i(show index) 
  (中略)
end

showとindexを使用していますが、onlyの設定を外すとエラーになります。(まだ幾つかのメソッドが実装されていないのが原因)
幾つか試した結果、newとcreateを追加することは出来ました。
(editとdeleteメソッドは無理の様子)


# config/routes.cr
Frost::Routing.draw do
  resources :posts, only: %i(show index new create)
  (中略)
end

ActiveRecord

ある意味一番気になる箇所となる、ActiveRecord的なO/Rマッパーの実装ですが、試した結果、検索系の幾つかと作成処理は使用可能でした。
FrostのDB処理を行っているコードを見る限りでは、削除系も定義はされていました。
(編集処理も同Frostのコードを見る限りでは普通にオブジェクトを扱うように行えるように見えました)

検索系

  • #{ModelName}.find(id)
  • #{ModelName}.find_by({column1: hoge , culumn2: huga })
  • #{ModelName}.all.pluck( column1 ) #未確認

レコード追加処理

  • hoge = Hoge.new
  • hoge.column1 = aa
  • hoge.column2 = bb
  • hoge.save

削除処理

全体的に未確認です。コードを見る感じでは以下の使い方は出来そうですが。。

  • #{ModelName}.delete_all
  • hoge = Hoge.find(id)
  • hoge.delete

Herokuで動かしてみる

勉強会までに間に合わなかったのですが、Herokuで動かすことも出来ます。というかFrostやKemalでも使えるように拡張build-packを作りました。(まだまだ動作が不安定ですが)

heroku-buildpack-crystal

作成にあたり、Elixirのビルドパックを多大に参考にさせていただきました。

ぶっちゃけElixirのbuildpackの8割コピペですが

heroku-buildpack-elixir

作り始める時点では実はビルドパックの構造を殆ど知らなくて、公式のビルドパックに少しずつ設定を足しながらの作業でした。 (compileファイル起動時に渡されるパラメータも知らなかったし、DATABASE_URLなどDBアクセスに必要な設定の渡し方も知らなかったほど)

Heroku Buildpackの作り方

使い方等は上記リポジトリのREADMEに記載していますが、ここでビルドパックにはどういう設定を記載すればいいのか簡単に説明します。

作り方の記載の全てはHeroku公式ドキュメントに記載されています。

Buildpack API

本ブログでも過去にビルドパックの作り方について解説している記事があります。(かれこれ2年以上前の記事ですが)

Herokuにバイナリを組み込むbuildpackを作成する

使用言語はbashであれば問題無いです。別にbashでなくてもよく、極端な話、herokuのDyno上で実行可能な言語であれば何でも構いません。実際に公式のRubyのビルドパックではRubyが使用されていたり、Groongaのビルドパックも同様にRubyで記載されています。

ビルドパックに必須となるファイルは以下の3つです。

  • detect
  • compile
  • release

上記3つのファイルをのカレントのbinディレクトリ以下に設置します。

detect

このビルドパックを適用する対象のプロジェクトかどうかを判断します。
Rubyの公式ビルドパックを参考にしますと、こんな感じになっています。


#!/bin/sh

if [ -f "$1/Gemfile" ]; then
  echo "Ruby"
  exit 0
else
  echo "no"
  exit 1
fi

Rubyのプロジェクトであるなら、ビルドパスのカレントにGemfileがあるはず、という判定をしています。
(ここでGemfileのパスに指定している$1がビルドパスを表しています(後述))
Crystalだとこれをshard.yml(ライブラリ管理ツールshardsが読み取る設定ファイル)に置き換えます。(v0.8以降のデファクト)

compile

多分一番処理が多くなる箇所であり、ビルドパックの中心となるファイルです。
ファイル名の通りプロジェクトのビルドを行うファイルですが、ビルドに必要となるコンパイラ、インタプリタ本体のダウンロード、ビルド、ビルド後の処理などは全てこのファイルで設定します。
実行時に3つの引数が渡されます。

  • 第1引数 ビルドパス
  • 第2引数 キャッシュディレクトリパス
  • 第3引数 環境変数の情報一覧を格納したディレクトリのパス

ビルドパスとはまさにアップロードするアプリが格納されるパスです。つまりビルド対象となるパスとなります。
キャッシュパスはビルドするツールを格納するパスです。CrystalならCrystal本体をダウンロードしてここに格納します。
Elixirの場合だとElixir本体とErlang本体、mixによってダウンロードされるパッケージなどもここに格納しています。
最後に環境変数一覧が格納された環境変数のパスが渡されます。
ここで言う環境変数とはHeroku側ですでに設定されている環境変数のことで、環境変数名の名前のファイルに環境変数の値が記載されたものが格納されたディレクトリとして渡されるようです。
FrostやKemalを動かそうとする場合、大体のケースでDBアクセスが必要になりますので、Heroku側で標準で用意されているPostgreSQLを利用する場合などにこのタイミングでアクセス先のDBの情報を読み取ります。
(Frostの場合、ActiveRecord的にDBのカラム名からメソッド名を解決している箇所があるので、ビルド時にDBにアクセスしに行けないとエラーになります)

Crystalのビルドパックではだいたい以下の流れで処理を行っています。

  • ユーザ指定のカスタムコンフィグを読み取る
  • Herokuの環境変数を読み取る
  • Crystal本体のダウンロードとインストール
  • shardsによる関連ライブラリのインストール
  • アプリのビルド
  • ビルド後に実行するコマンドがあれば実行(未実装)

公式のCrystalのビルドパックでは使用するCrystalのバージョンがハードコーディングされていたので、異なるバージョンのCrystalを使う場合都度ビルドパックを書き直す必要がありました。
それをユーザ指定できるようにしたかったので、これはこれで手間ですが、ビルドパスにHeroku用のビルドコンフィグファイルを用意してもらって(ちなみになければなくてデフォルトの設定が走ります)、それを読み取るようにしています。
大体設定しないといけないのがCrystalのバージョンと、ビルドコマンドです。 なんのファイルをビルドするのかも公式のビルドパックではハードコーディングしていました。app.crという名前だった気がしますが、その名前でファイルを作っていないとビルドできませんでした。
この状態だとFrostと激烈に相性が悪いので(Frostだとビルド対象のファイル名はそのままプロジェクト名となる)それも変えたかったので。
後は大体Elixirの流れをそのまま持ってきています。(Elixir固有の設定までベタ打ちしてたのは修正予定です)

release

一番最後に実行されるファイルです。 環境変数の設定とアドオン追加は初回のgit push時にのみ実行されるので、ビルドパスに.profile.dディレクトリを作ってその中にbashスクリプトを設置しておいたほうが柔軟に運用できると思います。 その他、Procfileがない場合の動作を設定できますが、Procfileで制御したほうがまず問題ないかと思います。
複数のビルドパックを指定した場合は、一番最後に実行されたビルドパックのreleaseが実行されます。 極端な話、このファイルに関しては設定があれば少し便利という具合です。

謝辞

最後に、登壇のお声掛けいただいた @pine613さんに感謝を。
RubyKaigi2015のLTのCFP提出するなど年末の行動力以外取り柄がなかった私ですが、初のLT以外のセッションで色々と緊張しっぱなしでした。
次回も何かやりますのでよろしくお願いいたします。

会場提供いただきましたクックパッド様、ありがとうございました。
セッションが始まったらやたら表示が途切れてしまった中対応してくださった、@mirakuiさんと@rosylillyさんには感謝です!
……元々いろいろケチってHDMIケーブルでつないでいたのをVGAアダプタに通してたのでマシンパワーが足りなさすぎでした。。
VGAケーブル用意しておきます。。

ビルドパック作成時にわたわたしてた時にいつもいい感じに援護射撃くださる @zundanさん、ありがとうございました。
またPRくださった、@5t111111さんと@HKDnetさん、まともなテストもできてないポンコツアプリをいい感じにしていただいて感謝です!
最後に、いっつもしょうもない質問に対応していただいているCrystal-JPコミュニティの皆様方、ありがとうございました。

続きを読む "Crystal勉強会でFrostネタで登壇し、Herokuにデプロイするまでを纏める" »

2016年1月29日 (金)

Herokuが東京にやってきた!(正式に)

 

Herokupart2_01

ついに、「Heroku?東京リージョンで使えるよ!」と大手を振って言える時が来ましたね!

 

 

Herokupart2_02

ふむふむ。

過去にもこの話題を紹介していましたねー。

 

 

Herokupart2_03

そうそう。

Heroku EnterpriseのPrivate SpacesがGAになりました!

ようするに、Heroku Enterpriseを利用されているすべての方は、東京リージョンを選択した運用が可能になるのです。

 

 

Herokupart2_04

まー、まー。

いいじゃないですか。

 

 

Herokupart2_05

Enterpriseといっても一般のユーザーも契約できるんですよ!!

 

 

Herokupart2_06

使いたい人は、salesforceの導入前のお問い合わせから質問するとよいかも。

 

 

Herokupart2_07

海外のサーバーですと、自社のセキュリティポリシーが適合しているか、などより多く悩んだりしますよね。

確認作業はゼロにはなりませんが、東京リージョンであれば検討もすこしは簡単になりますよ。

 

 

Herokupart2_08

やはりレスポンスが遅い、というのが気になったりしますよねー。

それも解決。

 

 

Herokupart2_09

Don’t worry! Heroku is in Tokyo!

 

 

Herokupart2_10

 実際にどれだけ費用がかかるのかなー、など調べて使ってみましょう。


作:おっぴー

絵:なかやま

 

関連)

Salesforce Developers Japan Blog・・

Heroku Private Spaces 正式リリース&関連リソース

Publickey・・

Herokuを東京リージョンで動かせる「Heroku Private Spaces」が正式稼働

マイナビニュース・・

セールスフォース、セキュリティ強化などHeroku Enterpriseを拡張

2015年12月28日 (月)

Heroku2015年アップデートふりかえり

こんにちは、浅野です。

2015年もあと僅かということで、今回は2015年のHerokuアップデートで私自身が「これは」と思ったベスト3を紹介します。

第3位 GitHubインテグレーションのサポート

2015年の早い段階でパブリックベータになった機能。

提供する機能は、以下の3つ

  • リポジトリ内の任意のブランチをHerokuへ手動デプロイする
  • 予め指定したブランチに更新があると、自動的にHerokuへデプロイする
  • リポジトリに対するプルリクエストが作られると、そのプルリクエストのコードで新たなHerokuアプリケーションを立ち上げる(Review Apps)

プロジェクト内でデプロイおじさん的なロールをすることが多く、この機能は「あれ、まだパブリックベータだったのか…」と思うくらい重宝しておる機能です。

開発用ブランチにプルリクエストがマージされたらHeroku開発環境へ自動デプロイは、外部CIサービスとの連携で実現していた方が多くいらっしゃると思うのですが、Herokuが標準でサポートしてより楽に仕組みが作れるようになりました。

第2位 新料金プランへの切り替えとそれに伴う無料利用枠の制限変更

どちらかというとネガティブな印象で広まったHerokuの料金プラン変更の話。 元々は1ヶ月で750DynoHourの無料枠が設けられていたものが、2015年6月から無料で利用可能な範囲は1日18時間まで(6時間は必ず停止する)の仕組みに変わりました。

FlectブログでもHerokuの新料金はお得なのかで取り上げたり、日々の開発がどう変わる?を注視しておりました。 フタを開けてみると、開発にはあまり影響がなくFreeDynoの利用枠はよく考えられたものだな、と思いました。 ただ、こんな風に感じるのはエンタープライズ向けにHerokuを使用している(課金して利用している)からで、 個人利用されていた方への影響は結構大きいような気がしており、Herokuがエンタープライズ分野に舵取りを始めたタイミングはここかな、と感じた次第です。

第1位 PrivateSpacesの登場

「ついにTOKYOリージョンにHerokuキター!」とお祭り騒ぎしたアレです。 簡単に説明すると、「DynoとHeroku純正アドオン系のデータ(Postgres/Redis)を、AWSの任意リージョンのVPC内に構築する」という感じです。

TokyoリージョンのVPC上に構築することのメリットは

  • よく言われるレイテンシ問題(太平洋を横断する北米か、ユーラシア大陸を横断するヨーロッパか)が解決する
  • データストアがパブリッククラウドからVPC内にひっこむことによる安全性の向上

あたりでしょうか。特に後者は、お客様にHeroku利用を提案した際に「パブリッククラウドにデータ置くって大丈夫なの?」とよくご質問を受ける点だったりするので、 より安心してHerokuをお使いいただけるようになるのではないかと思っております。

特に2016年のエンタープライズでのHeroku利用シーンを考えると、 Herokuの中の方が

ともおっしゃっておりPrivateSpacesの利用が標準になると思われる、それくらい大きな出来事と理解しています。

まとめ

ということで、トップ3(私見)は以下のとおりでした。

  1. PrivateSpacesの登場
  2. 新料金プランへの切り替えとそれに伴う無料利用枠の制限変更
  3. GitHubインテグレーションのサポート

この他にも、パイプライン・Dockerサポート・Go言語のサポート・Heroku純正アドオンの追加(Redis、HerokuConnectデモ版)など色々な機能が追加されました。

ざっとChangelogを振り返ってみて「これも2015年からの機能か」と思うくらい1年前のHerokuよりも便利に使えるようになっています。 2016年もきっとより便利に使える仕組みが提供されると期待できます。 (個人的にはHerokuRouterの挙動が柔軟に制御できるようになると嬉しい)

それでは、みなさま良いお年を。

2015年12月21日 (月)

HerokuPrivateSpacesの使い方は紹介しないとまずいよね

はい、どうも。 最近、薄めの内容でブログを更新しております、おっぴーです。

カレンダーを見るともう12月なので、わたくしの更新は今年は最後ですね。

ということで、個人的には今年一番おおきなHerokuのアップデートであったとおもわれるPrivateSpacesのご紹介をしたいと思います。

今日は簡単に利用方法についてのご紹介です。 ということで、大事なことは3行で。

  • HerokuSpacesはToolbeltでもDashBoardでも簡単に作成できる
  • もともとSpaceの外側で作成していたアプリはforkを利用してもRegionを移動できない
  • Space内に作成したアプリはforkを利用してもSpaceの外のRegionに移動できない

使い方はのチュートリアルは、このページで紹介されています。

HerokuToolbletでも、HerokuDashBoradでも簡単にPrivate Spacesの機能が利用できることがわかります。 今回はDashBoardからのPrivateSpaceをつくってみましょう。

まずは、画面上部のSpaceを押してSpaceを作成します。

Private_space1

今回は「herok-test-space」という名前で、TokyoRegionのPrivateSpaceを作成します。

Private_space2

作成には7、8分程度かかります。画面に表示されるアドバイスのとおり、コーヒーでも飲みに行きましょう。

Private_space3

作成が完了すると、Spaceの一覧表示に、「herok-test-space」という名前のSpaceが表示されます。

Private_space4

さて、表示されたSpaceを押してみましょう。

Private_space5_2

そうすると、Space内にアプリケーションを作成する画面が表示されます。 アプリケーションを作成するSpaceを選択し、アプリケーションを入力して「Create App」を押下します。

Private_space6

以上で作成した「heroku-test-space」というSpaceの中に、「heroku-blog-test」というアプリケーションを作成できました。

さて、この次は、アプリケーションを作成して、deployをします。

今回、rails4系のアプリをHerokuのdevcenterで紹介されている手順でdeployしようとしたところ、

Push rejected, Region amazon-web-services::ap-northeast-1 is not supported on this plan

というエラーが発生し、デプロイができませんでした。 (原因調査まではしておりません。。。)

ということで、上記でご紹介したチュートリアルのビデオで紹介している、 Node.jsのアプリをデプロイしてみました。


## まずはgit cloneし、アプリケーションのディレクトリへ移動
git clone https://github.com/heroku/quick-fix.git
cd quick-fix
## 上記で作成したアプリのリポジトリをリモート情報に追加
heroku git:remote -a heroku-blog-test
## herokuにdeploy
git push heroku master

以上で、PrivateSpaceに作成したアプリケーションへのデプロイが完了しました。

ちなみに、Space内のアプリケーションは、HerokuToolbeltから作成可能です。


## アプリケーションの作成(--spaceで作成対象のSpaceを指定)
heroku create アプリケーション名 --space スペース名

ただし、チュートリアルのページで紹介されているSpaceの作成コマンドは、現時点(2015/12/20現在)で入力してもエラーになりました。 Heroku Toolbeltのバージョンが3.42.25で、おそらく最新のはずですなのですが、まだ利用できないようです。

また、作成したアプリケーションのRegion移動は簡単ではありません。 Herokuでは、通常、アプリケーションはforkというコマンド実行すると、環境すべてコピーすることできます。

しかしながら、Space外のアプリケーションを新たに作成したSpace内にforkすること、その逆にSpace内に作成したアプリを別のRegionにforkすること、の両方ができませんでした。 たとえば、アプリケーションをSpace外に作成し、regionにtokyoを指定してforkしようとすると


heroku fork --from Space外のアプリケーション --to 移動先でのアプリケーション名  --region tokyo
## 下記のエラーが出力
Apps outside spaces are not supported in this region.

上記のエラーが出力されます。 ようするに、TokyoRegionはSpace外にアプリケーションを作成できませんよ、というエラーになります。 それでは、forkコマンドでspaceを指定できるか、と試してみました。


heroku fork --from Space外のアプリケーション --to 移動先でのアプリケーション名  --space heroku-blog-test
## 下記のエラーが出力
Unexpected flag: --space

ようするに、forkコマンドはspaceなどというオプションには対応していないよ、というエラーになります。

さて、今度はSpace内にあるアプリケーションを元からあるUS Regionに指定してみましょう。


heroku fork --from Space内のアプリケーション --to 移動先でのアプリケーション名  --region us
## 下記のエラーが出力
Slug not compatible with space

ということで、Slugのspace間移動ができないようになっているようです。

以上にように、Space間の移動は単純にできないため、既存のアプリケーションをSpace内に移動する、ということを考えた場合は、forkコマンドが利用できず、アプリケーションを作成してpushするという流れが必要になるようです。

ちなみに、Rails4がdeployできなかった原因調査について、「いやいや、うごいたよ」という方がいらっしゃったら教えて下さい。

ではでは、少々、早いですがみなさま、良いお年を。

続きを読む "HerokuPrivateSpacesの使い方は紹介しないとまずいよね" »

2015年11月27日 (金)

HerokuのRouting機能はErlangでできている。

どうも。 最近、ブログを書こうにも動作検証の時間が取れずに困っていた、おっぴーです。

ということで、なにか良いネタはないかなぁ、と思っていろいろ探していたところ、Herokuのプラットフォームからフリーソフトウェアが生まれたことを発見、というか気付きました。

動作確認などはできていないのですが、PaaSの裏側をつくる仕組みとして興味がそそられる方もいるんじゃないか、と思いましたので、ここで紹介いたします。 (少しは動かせよ、という話ですが。。。)

フリーソフトウェアの名前は、Vegur(ベーグル、に近い発音のようです)といい、アイスランド語で道という意味らしいです(たぶん。 CowboyというErlangで書かれた軽量のWebサーバーをベースに開発されており、VegurもErlangで実装されています。

長年、HerokuのRouting機能をになってきたと同時に、最近、新しく発表されたHeroku PrivateSpacesにも利用されている技術であるとのことです。 たしかに、弊社のブログを遡っていると、もともとHerokuにアクセスしたときのレスポンス時のHeaderにもVegurという文字列が含まれておりました

HTTP/2(SPDY)やQUICなど新しいプロトコルには対応していないようですが、これからHerokuのサービスが向上してゆくごとに進化していってくれると思われます。 このほかできることのすべては、HerokuのDevCenterに記載されている、と説明されており、 ちゃんとDevCenterでドキュメント化をすすめているHerokuさんの面目躍如、と言った感じでしょうか。

Herokuはこうした基盤まわりではErlangのヘビーユーザーでもあるらしく、Erlangの勉強をされたい方もプロダクトとして目を通しておくのも良いのではないかと思います。

今回は、時間がないのでこの辺で。

  • 参考情報
  • https://engineering.heroku.com/blogs/2015-10-21-vegur-free-software/

2015年11月26日 (木)

Herokuサポートのご紹介

こんにちは、最近米俵2俵のお米の重みを体感した浅野です。

Herokuサポート、なかなか利用する機会がなくてどんなものか情報が少ないですよね。 (私自身も今回のプロジェクトで初めて使いました) ということで、簡単にどんなことができるかを紹介していきます。

エンタープライズ契約で使っているアカウントなので、個人でHerokuを使っている方と表示されているものが違うかもしれません。

サポート依頼はどこから出せるの?

  1. Herokuのトップページのメニューから「Support」を選択し、Supportページを開きます。
  2. 次に、「Get help now」を選択し、 Helpページを表示します。

Supportindex_2


これで、サポートのトップ画面が表示されます。このページの「Open a ticket」からサポートチケットを起票できます。 とはいえ、HerokuはDevCenterの情報が充実しているので、まずDevCenterの情報を確認してください。(DevCenterに書いている情報をよく読めば解決できた、は結構あります。)

サポートチケットの起票

サポートチケットの記入はこんな感じです。

Supportticket0


まずは、「What can we help you with?」で問い合わせ対象を選択します。 現時点では、下記の6つが選択できます。

  • Application Issue
  • Heroku Postgres or Redis Issue
  • Add-on Issue
  • Billing, Payments or Account Issue
  • Product Feedback
  • Security Vulnerability Reports or Legal Issue

あとは、この選択した種類に応じてHerokuアプリケーション、対象となるDB・アドオン、問い合わせの優先度等を入力していきます。

「May Heroku staff access your applications's production environment?」はHerokuの担当者が問題解決の為に対象環境(ソースコード、アドオン)に対してのアクセスを許可するかのチェックです。問題の種別によっては、許可すると、問題解決までの時間が短縮されるかと思いますので状況に応じて選択してください。

詳細の記述は、Github Flavored Markdownが使えるので、楽ちんですね。Web上に上がっている画像であれば通常通り貼り付けられます。

サポート依頼をウォッチする

サポート依頼を送ると、チケットがクローズされるまでサポートトップ画面の「Your Support Requests」にそのチケットが表示されます。ここからチケットの質問内容・Herokuサポートからの応答等が確認できます。

Supportticket1_2


ここで、Herokuサポートと直接やり取りを行えます。 直接問い合わせを行っていた方の印象では、応答速度は中に人が入っている割には速いとのことでした。

サポート依頼をシェアする

このチケット画面の右上に「Share Ticket」というボタンがあります。このボタンから、このチケットを同じ組織の別ユーザと共有することができます。 この操作で、他のメンバーもこのチケットへアクセスすることができます。 こんな感じで共有したいユーザをチェックします。

Supportticketshare


(シェアしないと、「例のみんなが困ってたのHerokuサポートに依頼だしました、URLここです」とURLを送られてもアクセス権がなくて見られないのです)

シェア機能は、便利だなーと思いつつも、組織アカウントに紐づく問い合わせなら、ダッシュボードの組織アカウントの中に導線が作られて自動的に見られるようになれば…と感じております。

過去の問い合わせを参照する

過去の問い合わせの参照は、サポートトップ画面の「Ticket history」を選択します。 これを選択するといわゆる一覧画面に遷移します。

Supporthistory_2


以下の4つのチケットの状態でフィルタをかけることができます。

  • All
  • In Progress
  • Awaiting my response
  • Closed

と、こんな感じがHerokuサポートでできる事の一覧でした。

実際の案件でのやり取りだったので、お見せできずボカした箇所が多々ありましたがどんな感じか雰囲気だけでも掴んでいただければ幸いです。

もっとこんな事できるよ!などあれば是非コメントをお願いいたします。

2015年10月20日 (火)

DynoTypeが2ヶ月前に増えていたのご存知ですか?

はい、どうも。 最近、料理をサボりがちのおっぴーです。

じーちゃんも目を見開いて喜んだPrivateSpacesの登場がフレクトの社内でも話題になっております。 現在はPrivateβ版ということでGAになるのが楽しみですね。

こうしたHerokuのサービスについて、公式で最新情報を知る一番の方法は、Herokuの公式ブログをみることですね。 普段からこのブログの内容に目を通したい人は、ここからフィードの購読登録しておくのがお薦めです。

また、サービスの変更履歴はつどtwitterにも流れているので、こちらをフォローするもよい方法ですね。

個人的には「最近、Herokuは積極的にサービスをアップデートしているな!」と感じており、そのすべてをこのブログでご紹介したいと思いつつ、紹介しきれていない、というのが実情です。

今回は、ご紹介できなかったことの1つとして新たなDynoTypeが増えました!というお話です。 約2ヶ月も前のお話ですが、お付き合いくださいませ。

以前、PeformanceDynoのスケールアップについて速報としてお伝えしたあと、ほとんど間をおかずに発表された内容です。 しかもその際に、

「とくに2XDynoとPXDynoの間を埋める性能の新Dynoの登場があるとうれしい」

と書いていたのですが、それを実現するようなアップデートで発表された時はびっくりしたものです。 このアップデートにより、performance-mというDynoが登場し、いままでperformance Dynoと呼ばれていたDynoはperformance-l(える?と読むのかな)という名前になりました。

dyno type memory compute price
standard-1x 512MB 1-4X $25/mo
standard-2x 1GB 2-8X $50/mo
performance-m 2.5GB 12X $250/mo
performance-l 14GB 50X $500/mo

フレクトではBtoB向けのシステム構築の際でも、Herokuをよく利用しています。 こうした時にシステム構築で、重要なのは、選択肢の多さです。 選択肢が多いほど、良い選択をするのは大変なのですが、一方で、提案内容の幅が広がり顧客が達成したいことにあわせたご提案がしやくすなります。

今回のDynoTypeが増えたという件については、HerokuはAWS上に構築されるPaaSなので、おそらく技術的な課題はあまり多くなかったのではないか、と勝手に推測しています。 というのも、AWSには多数のインスタンスタイプがあり、ハードウェアまわりのパフォーマンスのスケールアップはお手の物、対応するインスタンスタイプをHerokuが増やしただけと考えられるからです。

こうしたことからDynoTypeへの対応は、技術的な興味がそそられるものではないかもしれませんが、上記のとおりHerokuの用途を広げ提案の幅を広げてくるという点からビジネス的には大きな価値を感じています。

わたしとしても、個人の開発者としては無料でできることが広がった方がうれしい気持ちはあるのですが、実際のビジネスにおいては提案の幅が広がり、安定したパフォーマンスを実現できるDynoが増やしてほしいというニーズのほうが大きいからです。

そして、アップデート内容を見ていると、Herokuが私たちのビジネスに寄り添った考え方をして、サービスをアップデートしてくれている、という安心感がもっています。 また、今後もサービスを拡張していってくれる期待感ももっています。

実際にHerokuを利用して、エンタープライズ系のシステムづくり取り組んでいるフレクトとしては、Herokuのこうしたアップデート内容が今後も続くように期待しております。

ということで今回は新しいDynoTypeが増えました、というお知らせでした。

「こんなことを調べて書いてほしい!」などありましたら、コメントをいただけるとうれしいです。 可能限り調査して回答編をブログとしてアップしたいと思います。

2015年10月 9日 (金)

【Herokuお絵かき】じーちゃん!東京リージョンできたよ!

こんにちは、中山です。

今日はHerokuが東京リージョンにやってきたのお話になります。

Tokyo_01

 

9月のことでした。

インターネット中のたろうはHerokuに関するニュースを見つけたようです。

Tokyo_02

 

なんと、Herokuが東京リージョンにやってくるようです!

Introducing Heroku Private Spaces: Private PaaS, delivered as-a-Service

Tokyo_03

 

たろうは、じーちゃんが東京リージョンに来てほしいって言ってたことを思い出しました。

Tokyo_04

 

じーちゃん!このニュースをみて!

東京リージョンでHerokuが使えるんだって!!

Tokyo_05

 

でもおかしいな。

アプリを作るときに東京リージョンの指定ができなかったことを思い出しました。

Tokyo_06

 

うーん。

じーちゃんからはニュースを読んでみるのじゃと言われる。

Tokyo_07

 

 Private Spacesでつかえるとのこと。

Tokyopdf_08

 

どうやったらPrivate Spacesに参加できるのかな?

Tokyo_09

 

記事を読むとHeroku Enterpriseの一つとして使えるようです。

Tokyo_10

 

Heroku Enterpriseってなんだろう?

Tokyo_11

 

Heroku Enterpriseの契約をすると、こんなことができるようです。

・Herokuの困ったことを日本語で問い合わせ可能

・アプリを作る上でのアカウントの細かい権限管理

・複数のアプリの一括請求

などなど。

Tokyo_12

 

hobby環境で開発しているたろうには、遠い存在のようです。

Tokyo_13

 

じーちゃん曰く

BtoC向けのWebサービスをHeroku使って日本で展開したいなら

どんぴしゃじゃー!!!

とのことでした。

Tokyopdf_14

 


大事なことなので2回言いました

Tokyo_14

 

 

今日のお絵かきはこんな感じで、おしまい。

Tokyo_15

 

 

おしらせ。

2015/12/3〜4にSalesforceの大きなイベントがありますよ。

エンジニア向けなのは、12/4の虎ノ門ヒルズフォーラムですね!

http://eventjp.salesforce.com/

忘れないように参加登録しておきましょう!

2015年9月10日 (木)

HerokuConnect一問一答。HerokuConnectは時間の扱いに要注意。料理は火加減、要注意

はい、どうも。 最近、HerokuConnectをつうじてSalesforceにも興味を持ち始めたおっぴーです。

ある特定のプラットフォームに縛られた技術を利用することを、「ベンダーロックイン」と称して遠ざかりたくなるものなのですが、ロックインされると結構、便利で快適というのもまた事実。

本日は、SalesforceとHerokuにどっぷり使って楽をしたい!HerokuConnectを使ってみたい!とお考えの方が、「でも、これってどうなるのかな?」という点について、動作確認をした結果を踏まえてご紹介いたします。

最初に結論

  • datetimeの扱いはUTC固定なので要注意
  • ファイルや画像は連携できないので別途仕組みが必要
  • 価格が謎
  • 以上を考慮したうえでも簡単なので利用する価値は十分

日本語はうまく扱えますか?

大丈夫です! HerokuPostgresとSalessforceはともにUTF-8で文字列のデータを管理しています。 文字コードそのものは扱いの難しい要素でありますが、双方がおなじ文字コードを採用していれば複雑な考慮は不要ですね。

レコードの削除や 項目の値の削除は連携できる?

できます!

たとえば、HerokuPostgresでレコードを消したけど、Salesforce上ではレコードが残ってしまわないか? その逆は? その心配は不要です! レコードをそのものを削除した場合も連携中の項目の値を削除した場合も、それぞれその情報が連携されます。 ただし、双方のデータの更新が反映されるのはRead/WriteModeのみですので、連携設定はちゃんと行いましょう。

バッチ処理のような連携は可能?

たとえば、毎週土曜日の深夜1時から一括でデータをHerokuからSalesforceに連携したい(もしくは、その逆も)。

残念ながらできません!

HerokuConnectは一定の間隔で、SalesforceとHerokuPostgresのデータ連携を行うためのサービスです。 間隔は2分から60分までの間で設定できますが、スケジュール管理機能はありません。

このため、毎月1日、毎週土曜日に、や毎晩午前2時になどの定期的な連携を行うことはできません。

日付(Date)もしくは日付・時間(DateTime)はちゃんと連携できる?

日付は大丈夫ですが、日付・時間は残念がら。。。

HerokuConnectとSalesforceでは、datetimeをUTC固定で扱います。

このため、日付・時間をHerokuで更新する場合は、datetimeをUTCで扱うよう注意しましょう。 たとえば、HerokuPostgresのデータを利用するアプリでは、datetimeをJSTに変換して表示し、登録・更新時はUTCで扱うよう注意が必要です。

データ連携でエラーが発生したらどうなるの?

連携しているHerokuアプリに追加されているmemberとcollaboratorにエラーメールが送信されます。

メールアドレスは、Herokuアカウントのメールアドスレスになります。 できれば

  • アラート送信先のメールアドレスが設定できるようになる
  • 送信したくないアカウントを選べる

ようになると嬉しいですね。

SalesforceのAPI利用制限は本当に関係ないの?

ありません!

現状の画面では、連携時にAPIをどれだけ消費しているか、をみることができます。 が、これはAPI利用制限がHerokuConnectにも適用されていた時の遺産のようなものでしょう。

既存のテーブルとオブジェクトを連携したいんだけど?

非常に残念ですができません。

たとえば、HerokuPostgresに既存のusersというテーブルがあるとします。 このusersというテーブルにたいして、Salesforceのカスタムオブジェクトのサービス利用者(仮にServiceUserとしましょう)のユーザー名を連携させたい、というケースはあるでしょう。

しかしながら、これはできません。

データ連携を行う際には、連携対象のSalesforceのオブジェクト専用テーブルがHerokuPostgres上に作成されます。 上記の場合は、serviceuser__cというテーブルが新たに作成され、データ連携を行うためには、このテーブルを介する必要があります。

このため、Herokuでusersのユーザー名を変更した場合には、serviceuser__cのユーザー名も変更しなければならない、という動きになります。 うーむ。。。おしい。。。

SalesforceのSandbox環境やProduction環境にはつなげるの?

できます!

HerokuConnectの設定時に、Production、Sandbox、CustomDomainの3つから選択可能です。 Herokuの環境も、本番、ステージングをわけておけば、それぞれの環境でHerokuConnectを利用したアプリケーションを動作させることができます。 こうすることで、リリース前のテストもしっかり出来そうですね。

メモ&添付ファイルは連携できる?

残念ながらできません。 HerokuConnectのドキュメントでも、画像やファイルの連携はHerokuConnectの機能の対象外であると明記されています。 また、AccountなどのオブジェクトのMappingの設定をする画面でも、選択対象の項目としても表示されません。

コメントをいただいたとおり、Attachmentオブジェクトの選択が可能であることを確認しました。

Heroku_connect

確認不足で誤記載をしており、失礼いたしました!

主従関係のレコードをHerokuでインサートできるの?

可能です。

詳しいやり方はドキュメントに記載されています。

機会がありましたら、このブログで方法についてご紹介いたしますが、外部IDを主オブジェクトに定義することで、連携が可能になります。

連携時にデータの変換はできる?

これはできません。

たとえば、こんなことがやりたいですよね。

顧客の購入金額にあわせて、ユーザーランクを決定している場合に、 Salesforceでは金額をもっていて、HerokuPostgresでは金額は扱いたくないのでランクコードとしてA、B、Cの文字列として渡したい、という場合。

こうした変換を行う場合は、あらかじめにSalesforceのオブジェクトに変換結果をもっておき、これを連携するという方法になりそうですね。

でも、お高いんでしょう?

無料で利用できるdemoでは、10000行までの相互のデータ連携が可能です。

それ以上の利用の場合は、有償版の利用が必要になりますが、営業さんへのお問い合わせとなるようです。 このため、正確な価格は謎、です。

現状、無料で利用できるdemoは、あくまでも事前検証や開発に利用するものと考えられますが、10000行も連携できれば、十分かも知れませんね。

ということで

HerokuConnectにまつわる疑問について一問一答でした。 これはどうよ?というご質問があるかは、ぜひご連絡ください。分かる範囲でお答えします!

あと2015/09/10に第1回FlectMeetupを開催します!

普段、フレクト社内で行われている勉強会の雰囲気で、外部の方と一緒にお勉強してお酒を飲みたい!という思いで企画したものです。

予定があう方は是非、ご参加ください!

https://flect.doorkeeper.jp/events/29804

採用情報

株式会社フレクトでは、事業拡大のため、
Salesforce/Force.comのアプリケーション
開発
HerokuやAWSなどのクラウドプラッ
トフォーム上でのWebアプリケーション開発

エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみた
い方、是非ご応募下さい。

フレクト採用ページへ

会社紹介

株式会社フレクトは、
認定コンサルタント
認定上級デベロッパー
認定デベロッパー
が在籍している、
セールスフォースパートナーです。
heroku partnersにも登録されています。
herokuパートナー
株式会社フレクトのSalesforce/Force.com
導入支援サービス
弊社の認定プロフェッショナルが支援致します。
・Visualforce/Apexによるアプリ開発
・Salesforceと連携するWebアプリ開発
も承っております。
セールスフォースご検討の際は、
お気軽にお問合せください。
Powered by Six Apart