ゼットコードログ

コード的な何かを書いていきます。

Herokuよく使うコマンドメモ

Herokuでよく使うコマンドの覚書的メモ。よく忘れるからね。

アプリケーションを作成し、デプロイする

heroku create
git push heroku master

アプリケーションの実行状態を確認

heroku ps

アプリケーションのスケールアップ(お財布と要相談)

heroku ps:scale web=2

アプリケーションのログを確認

--tailオプションでリアルタイムに確認可能

heroku logs 
heroku logs --tail

アプリケーションに対してコマンドを実行する

ただし、実行するサーバーはコマンド実行専用に立ち上がる仕様を把握しておこう。ファイルなどを直接更新しても永続化されない。

#bashでログイン
heroku run bash
#railsコンソールを起動
heroku run console
#migrationを実行
heroku run rake db:migrate
#psqlコマンドを実行する
heroku pg:psql --app {appName} {dbName}

アプリケーションのメンテナンス状態を管理

heroku maintenance:on
heroku maintenance
heroku maintenance:off

環境変数を確認、設定する

ホスト名などいった設定値は、ソースに直接書くのではなく、環境変数を使うと便利。

#変数の一覧を取得
heroku config
#変数を指定して取得
heroku config:get {keyName}
#変数を設定
heroku config:set {keyName}={value}
#変数を削除
heroku config:unset {keyName}

ソース内では次のようにENV変数で読み込める。

hostName = ENV['hostname']

アプリケーションを再起動

heroku restart

#Dynoを指定して起動する場合はweb.xxを設定
heroku restart web.1

アドオンを追加

heroku addons:add {addonName} {addodOption}

Railsテスト関連のメモ

RSpecのセットアップ

./bin/rails g rspec:install

テスト用ファイルの雛形作成

#モデルのテスト
./bin/rails g rspec:model {modelName}

#コントローラーのテスト
./bin/rails g rspec:controller {controllerName}

#ビューのテスト
./bin/rails g rspec:view {controllerName} {actionName}

テストの実行

./bin/bundle exec rspec {specFileName}

FactoryGirl用ファイルの準備

./bin/rails g factory_girl:model {modelName}

railsでDB関連の操作

データベースの作成(初回)

./bin/rake db:create

データベースの更新、マイグレーションファイルの適用

./bin/rake db:migrate

現在のマイグレーションファイルの適用状況を確認する

./bin/rake db:migrate:status

modelを作成する

./bin/rails g model User {columnName}:{Type} ...

modelにカラムを追加する

./bin/rails g migration Add{columnName}To{tableName} {columnName}:{Type}

sqliteを起動して対話形式でSQLを発行する

sqlite3 db/development.sqlite3

bundlerでrailsをインストールする

bundler以外はシステムに直接インストールせずに、railsをインストールする 以下、コマンドのメモ。よく忘れるからね。

$ mkdir myproject
$ cd myproject
$ bundle init

# Gemfileのrailsのコメントを外す
$ bundle install --path vendor/bundle

#上書きするか?と聞いてくるのでyを入力
$ bundle exec rails new .
# sqliteではないDBを利用する場合は-dオプションで指定する。
$ bundle exec rails new . -d postgresql

# Gemfileのtherubyracerのコメントを外す
$ bundle install --path vendor/bundle
$ ./bin/rails server

#hostやipを指定する場合は-bオプション
$ ./bin/rails server -b 192.168.33.10

scaffoldでアプリのひな形を作成

./bin/rails generate scaffold myapp content:text

SublimeText 私的メモ

忘れたら、また覚えればよいの精神でメモ。

SublimeText My cheet sheet

マルチカーソル

  • Command + u で選択を一個キャンセルする
  • Command + Shift + L で選択を行単位にする

ウィンドウ操作

  • Command + option + 数字 縦に分割する
  • Command + option + Shift + 数字 横に分割する
  • Ctrl + 番号 カーソルを所定のウィンドウへ移動させる
  • Ctrl + Shift + 番号 所定のウィンドウへファイルを移動

編集

  • Command + Shift + d カーソルがある行を複製する
  • Command + Ctrl + up カーソルがある行または選択行を上へ移動させる
  • Command + Ctrl + down カーソルがある行または選択行を下へ移動させる

コマンドパレット

  • Command + Shift + p コマンドパレットを開く
  • Command + p GoAnythingを開く
  • @ GoAnythingでシンボルを指定する
  • : GoAnythingで行を指定する

CTags

  • Ctrl + t,Ctrl + t 定義部分へジャンプ
  • Ctrl + t,Ctrl + b 呼び出し元へ戻る
  • Ctrl + t,Ctrl + y 定義しているファイルにフォーカスを当てる
  • Ctrl + t,Ctrl + r tagの再構成

OpenFL アプリの画面をPhotoshopとFlash Professionalで作る

Flashで作ったswfファイルを画面として取り込んで、表示することができます。

これだけだとAdobe AIRと変わらないですが、OpenFLはswfをインプットにしてコンパイルの段階で 各プラットフォーム用のプログラムを生成しているみたいです。これにより、AIRと比較した場合により高速に動作するし、ランタイムも必要ないのでプログラムのファイルサイズが小さくてすみます。

各パーツはSpriteやMovieClipとして取得してイベントや設定の変更を適宜実行することができます。

ということを試すためにサンプルでクイズアプリを作ってみました。デザインはご愛嬌。機能もペラペラです。

f:id:z-ohnami:20140523011504p:plain

工程はこんな感じで進めることができます。

  1. PhotoShopで画面をデザインし、PSDファイルを作る
  2. PSDファイルをFlash Professionalで取り込んで、各パーツをシンボル化し、リンケージとインスタンス名を設定
  3. Flash ProfessionalでパブリッシュしたSWFファイルをOpenFLのプロジェクトに取り込む
  4. Haxeでコードを書いて開発していく

とてもよいのはPhotoshopで画面デザインができるということ。PhotoShopの成果をほぼそのままダイレクトにアプリまでもっていけます。 1をデザイナーさんにやってもらって、それ以降の工程をプログラマとかエンジニアとかがやっていけばOK。

このデザイナーさんとの協業の部分がヘタすると従来のFlashベースの開発よりもとてもシームレスにできそうな予感。

あとは製品リリースレベルの複雑なデザインがきた場合に 果たしてこの工程がそのまま使えて、OpenFLが耐えられるかどうか。これは実際にやってみないとわからないですね。

プロジェクト的には swfとlayoutというライブラリを使います。 project.xmlに次のように設定しましょう。

<haxelib name="openfl" />
<haxelib name="actuate" />
<haxelib name="swf" />
<haxelib name="layout" />

あとは自分で作ったswfファイルもライブラリとして指定しておきます。

<library path="Assets/ui.swf" />

アプリのソース内ではswfのファイル名とリンケージを指定してswfファイルにアクセスします。 今回はLayoutというリンケージをflaファイル内で指定しています。その配下のインスタンスはgetChildName関数で名前を指定すれば取得できて、そこから先はプログラミングの世界です。

Assets.loadLibrary ("ui", function (_) {

    var layout = Assets.getMovieClip ("ui:Layout");
    addChild (layout);

    layoutManager = new LayoutManager (640, 960);

    layoutManager.addItem (new LayoutItem (layout.getChildByName ("Button1"), LayoutType.STRETCH, LayoutType.STRETCH, false, false));
    layoutManager.addItem (new LayoutItem (layout.getChildByName ("Button2"), LayoutType.STRETCH, LayoutType.STRETCH, false, false));
    layoutManager.addItem (new LayoutItem (layout.getChildByName ("Button3"), LayoutType.STRETCH, LayoutType.STRETCH, false, false));

    layoutManager.resize (stage.stageWidth, stage.stageHeight);
    stage.addEventListener (Event.RESIZE, stage_onResize);

    _button1 = cast(layout.getChildByName ("Button1"),Sprite);
    _button1.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):Void { checkAnswer(0); });

ソースコード全体はこちら。psdとflaファイルも付いてるよ。

z-ohnami/OpenFLQuizSample · GitHub

swfを更新した場合はlimeでビルドする際に-cleanオプションを使ったほうがいいみたい。 じゃないと、更新が反映されないことがあるようです。これでしばらくハマっていた・・・