kumak1’s blog

kumak1のイラストや技術ログ

製作期間半年ちょいでブラウザゲーム「神こロし」をリリースした。

ひょんなことがきっかけで、「神こロし」というブラウザゲームを作っているし、更新している事への備忘録

きっかけ

日本ではイラストレーターで知られるD.Kさんが、なにやら個人でゲームを作っていることをTwitterで知る。 どうやらキャライラストを募集していて、寄稿するとゲーム内に登場できるみたい。

Pixiv Fantasia とかやってた私としては参加せざるを得ないので、もにょもにょとした気持ちをツイート。 したら、なぜかプログラムの話題になって、あれよあれよと制作側になる。

体制は?

D.K さんがコンセプチュアルデザイン、マップデザイン、アートワーク。 私は開発だとかゲームバランスとか最終意思決定。 実際はゲーム制作進行のイロハを丁寧に教わってます・・

どんな風に作ったの?

2人でワヤワヤ話して方向性を決めて、D.Kさんが以下の様なマップを作る

うまいこと実装していくというサイクル

つくっていて思うこととか

単純に作っていて楽しいし、 いろんな絵描きの人つながり増えたし、(今までニコ動関連しかつながり広がってなかった) ゲームをキッカケとして盛り上がったりお友達になっているのをみるとほっこりする。 「繋がり」っていいなと

技術者としてのメリット

そこそこな規模で、自分で好きなようにできるプロダクトを持つのは初めてなのですごい勉強になってる。 開発も、インフラも、デザイナも、ディレクションも、カスタマーサポートも全部自分。 「職場で身近な人はこうやってたよな・・」で手探りでやっているが、 他業種の人の気持ちになれて大変よい。 人に優しくなれる。

これからについて

地味なアップデートを繰り返している。 この世界観とかを引き継いだ3Dゲームを作る話にもなっているので、頑張っていくぞという気持ちがある。

capistranoでデプロイ先にユーザ指定してwheneverを適用させたい

この記事は Pepabo Advent Calendar 2015 - Qiita の19日目の記事です。

capistranoRuby で簡潔によしなにしてデプロイしてくれるので大変便利ですね。拡張ライブラリも豊富ですし Ruby の経験がほとんどなくてもそれとなく記述できて素晴らしいです。(ぺちぱーなもので・・) whenever も cron を Ruby で書けるっていいですね。バージョン管理できるし、レビューも受けやすいし、なにより crontab -r がもう怖くないw 基本的にすんなりと設定できるのですが、掲題の「capistranoでデプロイ先にユーザ指定してwheneverを適用」の時にちょっと詰まったので、備忘録がてらに記事にします。

なんでユーザ指定したいの

ユーザを分ける事自体に疑問を持つ方は、こちらの記事を読むと良さそう。 用は、デプロイする人はデプロイするだけ、バッチ実行する人はバッチ実行するだけと分けたいのです。 セキュリティ的にも、あとで調査等々する場合にも役に立ちます。 www.atmarkit.co.jp

前提

デプロイ先に以下が導入済みだとします。

  • rbenv 導入済み
  • .ruby-version ファイルで Ruby のバージョンを記録
  • バッチ実行用ユーザ(batch)がいる

やりたいこと

  1. capistrano でデプロイし、以下を実行
  2. デプロイ先で、bundle install
  3. デプロイ先で、whenever 実行

具体的には

whenever を素で実行する際の -u オプションを、capistrano でデプロイ時に適用したいわけです。

% bundle exec whenever --help
Usage: whenever [options]
    -i [identifier],                 Default: full path to schedule.rb file
        --update-crontab
    -w, --write-crontab [identifier] Default: full path to schedule.rb file
    -c, --clear-crontab [identifier]
    -s, --set [variables]            Example: --set 'environment=staging&path=/my/sweet/path'
    -f, --load-file [schedule file]  Default: config/schedule.rb
    -u, --user [user]                Default: current user
    -k, --cut [lines]                Cut lines from the top of the cronfile
    -r, --roles [role1,role2]        Comma-separated list of server roles to generate cron jobs for
    -v, --version

では capistrano の設定結果から。

Capfile.rb

# Include tasks from other gems included in your Gemfile
require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'whenever/capistrano'

rbenv, bundler, whenever の gem を追加

deploy.rb

# rbenv の設定
set :rbenv_ruby, File.read('.ruby-version').strip # rbenvが.ruby-versonのRubyを使うようになる
set :rbenv_path, '/usr/local/rbenv'               # デプロイ先のrbenvのpathを指定

# bundler の設定
set :bundle_path, -> { release_path.join('vendor/bundle') } # sharedよりもreleaseのパス指定の方が、切り戻しが必要な際に楽

# whenever の設定
set :whenever_update_flags, ->{ "--update-crontab #{fetch :whenever_identifier} --set #{fetch :whenever_variables} --user batch" }

わけわからないのは多分 whenever の設定だけかと思います。 ライブラリのソースコードを見てみると、whenever の実行オプションを指定している箇所があります。 whenever/whenever.rake at 334cfa01f373006cc032e23907b1777a8ea3f3b0 · javan/whenever · GitHub

これに --user batch を付け加えているだけです、簡単だー。 バッチユーザがデプロイユーザと同じグループに所属しているならばこれでOKですね。 もしダメな場合、以下のような荒技を使えば大丈夫・・ デプロイユーザにsudoer権限が必要になりますが、これでなんとかなってしまいます。

set :whenever_command, ->{ [:sudo, "#{fetch(:rbenv_path)}/bin/rbenv", :exec, :bundle, :exec, :whenever] }

ぷらすあるふぁ

実はこれをいじっていた当初は whenever をユーザ指定して実行がなかなかできず、task を半ば自前で作ってしまっていました。 (調度 set :whenever_update_flags のところで。tsushikazu 先輩の優しいアドバイスで解決)

「やりたいことができそうなのにできない」時は、コードリーディングをすると大体のことは解決できるので、怖がらず・面倒くさがらずにGitHubを覗くのが近道みたいです。 綺麗なコードを読むのはエンジニアの成長には欠かせませんしね。 まだまだ若手感を出して頑張っていこう。

vagrantの共有フォルダのマウントオプションについて

最近、趣味で Laravel を使い始めて気付いたのでメモ。

私はvagrantで開発する際、アプリのコードはマウントして作業しています。 Laravel ではちょうど以下のようなディレクトリ構造ですね。

work
├─ application
│   ├─ app
│   │   ├─ strage
│   │    ...
│   │   
│   ├─ bootstrap
│   └─ public
└─ vagrant
     ├─ Vagrantfile
      ...

Laravel を動作させるには、work/application/app/strage ディレクトリの権限を緩めに(777とか)する必要があります。 ココでつまりました。

緩めに設定したはずなのに、動作させたときに生成されるファイル(セッションとかログとか)がいちいち書き込み禁止で生成・エラーになってしまうのです。。

Vagrantfile のマウントの記述は以下でした。

config.vm.synced_folder "../application", "/var/www/application"

解決方法

マウントオプションを設定して、ここから権限を緩める必要があったようです。

config.vm.synced_folder "../application", "/var/www/application", mount_options: ['dmode=777','fmode=777']

ネット上ではあまりこれに言及したTipsがなかったので、誰かの役に立てば・・ (基本的な事過ぎなのかもしれなくて恥ずかしいですが

vagrantのprivate_networkとforwarded_portのメモ

Vagrantfile を書いていると、ipとportの関係をうっかり間違えてしまうことがあるので備忘メモ

config.vm.network :private_network, ip: "192.168.0.10"
config.vm.network :forwarded_port, guest: 3306, host: 13306

上記のように、ipとportをVMで割り当てると、 localhost でアクセスする場合はフォワードしたポートを利用し、 private_network でアクセスする場合は本来のポートでアクセスする。

イメージとしてはこんな感じ f:id:kumak1:20150525230248p:plain

Webエンジニアの「金の弾丸」について

「金で解決できることは、ある」

汚い大人になってしまった感がモリモリありますが、割と大事。

Web開発って基本的に、フリーのOS、フリーのミドルウェア、フリーのツール、を使って開発をする、いわゆるOSSの文化が一般的。

が、なんかどうも個人的にもにょっとするところがあるのです。

続きを読む

css spriteを簡単に作れるPhotoshopスクリプト「Psprite」を作成・公開しました。

こんばんは。

最近はプログラムにかまけて、絵をほとんど描いていない人です。描きたいんですけどね、8月末の引っ越しが終わったらね。

さて、本エントリはタイトルの通り、Photoshopスクリプトを作ってみました。

写真でも、絵でも、Web制作でも大活躍なアプリケーションですが、個人的にcss spriteを作る時にいまいち使いにくい。「スライス」とかよくわかんないw。スクリプト自体は他の方も、というかLIGさんが作っていたりしますがいまいち使いにくい。喧嘩を売っていくスタイル。

そこで、「レイヤー毎」or「グループ毎」に css sprite のサンプルページを書き出すスクリプトを書きました。以下のメリットがあるかなと思います。

  • サンプルが確認しやすい
  • 表示されてるレイヤー or グループだけcss spriteを生成する
  • グループの中のレイヤーも全部対象で一括処理

続きを読む

これから作るものとかの構想

言い訳したくないですが、社会人一年目って覚える事が多いですね!見事に一年弱の放置をしてしまうとは・・・・。絵自体も、時間をかけたものは久しく描いていなかったのですが、ようやくこの生活に慣れてきたのでなんとか活動を再開できそうです。

さて、作りたいものの候補は3つあります。一つ目が前回にも書いた「低空少女活劇もの」。二つ目が「少女イラスト集」。三つ目が「絵描きからみたweb技術」となります。1・2は説明はいらないと思いますが、3つ目が長いスパンでつくって行きたいと思っているものです。

「絵描きからみたweb技術」というのはなにかというと、要はHTMLなどの絵描き向けHowToですね。仕事でweb系に携わってることもあり、それを生かしたものを作りたいと思っています。HTMLの単純な組み方なんかはweb検索したらいくらでも出てきますが、リファレンスだとか書き方ばかりです。HTMLの考え方、CSSJavascript、ライブラリって何なのかとかは現状、絵描きを中心とした「自分をうまくプロデュースしたい人」にはわかり辛いものとなっています。これをどうにかしたいと思っているのです。

さぁ、徐々にがんばっていこうかな