認定スクラムマスター(CSM)を取得した

認定スクラムマスターの資格を取得しました

認定スクラムマスター(CSM)って?

ScrumAllianceが認定してる資格の一つ
僕も勘違いしてたんだけど、スクラムにはスクラムマスターというロールがあって、そのロールをこなすための知識を認定しているのがCSM
決してあなたはスクラムをマスターしていますって認定している訳ではない
(とはいえスクラムマスターの役目を果たすにはスクラムのことを正しく理解し、説明することが必要なのだが)

どうすれば取得できる?

まず、ScrumAllianceのCSM研修を受ける
研修を受けるとオンライン試験を受ける資格がもらえるので、オンライン試験を受けてパスすれば認定してもらえる
結構割高なので、若手が実費で参加するのは結構きついかも
あとかなり人気があるらしく、早めに予約しないと埋まってしまう。僕もキャンセル待ちだった

研修について

研修は2日間で、基礎から学ぶ
どこまで買いていいのかわからんので内容については割愛
個人的には参加者の方の中で何人か仲良くなって、今後も付き合いありそうな感じで良かったなーと思ってます

研修に参加して

正しい、教科書通りのスクラムを知れば知るほど、現実世界に適応させるのは難しいと思った
なぜかというと、日本企業の制度がスクラムとは著しく剥離しているから
とはいえどんな開発プロセスだって現実世界では教科書通りとはいかず、企業ごと、あるいはプロジェクトごとに何らかの変化をさせて対応しているはず
なので、スクラムも目的や原理を失わない程度に、環境に合わせて変化させる必要がある
スクラムマスターの責務は正しいスクラムを振り回すことではなくて、どうやったら自分の環境でスクラムが目指す「自律的な組織」を実現させるかを考えて実行することであると感じた

僕が今いるチームもスクラム風味の開発をしているが、色々と問題点は多い(それが必ずしも開発プロセスの問題であるというわけではないが)
まず、目の前の今のチームで改善できることを改善するところから始めようと思う

PHPを始めてみた

PHPを始めようと思い、環境作りを色々調べてみたので備忘録

なんで今更PHP

うちのサービスでサポートしてる言語の中で、僕が一番触ったことない言語がPHPだなーとはなんとなく思っていた。
そんな中、最近色々調べ物とかしてるとPHPの話に触れている記事を目にすることがちょくちょくあり、その中でPHPの特徴として「作るまでが早いけどコードが汚い」みたいなのがあった。なんとなく自分の性格と相性がいいのでは?と思い改めて触ってみることに。

入れたもの

とはいえ大したことはしてない。
composerとvimの設定のみ

composerについて

Rubyでいうgem、Nodeでいうnpm
依存ファイルをjsonで書くからそのどちらかならnpmっぽいかな
それよりcomposerのいいとこは、composerで入れたパッケージはコード内で

require 'vendor/autoload.php';

と書いとけば使うときに勝手に読み込んでくれるってところ
requireしてなくてどうこうみたいなことにならないのはちょっぴり嬉しいね

この辺を参考にインストールした

$ curl -sS https://getcomposer.org/installer | php                                                                         [/Users/keisuke]
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /Users/keisuke/composer.phar
Use it: php composer.phar

$ sudo mv composer.phar /usr/local/bin/composer

homebrewも使えるみたいだけど普通にglobalインストールしちゃいました

試しにcomposerと打ってみる

$ composer                                                                                                                 [/Users/keisuke]
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version a045ab345980bfe4a1daec1a34d345f13a2810dc 2013-11-06 22:13:14

Usage:
  [options] command [arguments]

Options:
  --help           -h Display this help message.
  --quiet          -q Do not output any message.
  --verbose        -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
  --version        -V Display this application version.
  --ansi              Force ANSI output.
  --no-ansi           Disable ANSI output.
  --no-interaction -n Do not ask any interactive question.
  --profile           Display timing and memory usage information
  --working-dir    -d If specified, use the given directory as working directory.

Available commands:
  about            Short information about Composer
  archive          Create an archive of this composer package
  config           Set config options
  create-project   Create new project from a package into given directory.
  depends          Shows which packages depend on the given package
  diagnose         Diagnoses the system to identify common errors.
  dump-autoload    Dumps the autoloader
  dumpautoload     Dumps the autoloader
  global           Allows running commands in the global composer dir ($COMPOSER_HOME).
  help             Displays help for a command
  init             Creates a basic composer.json file in current directory.
  install          Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
  licenses         Show information about licenses of dependencies
  list             Lists commands
  require          Adds required packages to your composer.json and installs them
  run-script       Run the scripts defined in composer.json.
  search           Search for packages
  self-update      Updates composer.phar to the latest version.
  selfupdate       Updates composer.phar to the latest version.
  show             Show information about packages
  status           Show a list of locally modified packages
  update           Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  validate         Validates a composer.json
[keisuke@localhost]$ composer about                                                                                                           [/Users/keisuke]
Composer - Package Management for PHP
Composer is a dependency manager tracking local dependencies of your projects and libraries.
See http://getcomposer.org/ for more information.

ちゃんと動いてるね

vimの設定

ざっと調べてみたけど他の言語と違ってgithubにライブラリとか置いてる空気じゃなくて手動で辞書をどっかからもってきて、自動補完できるようにするといいよって感じっぽい
僕は手動で辞書を作る方法を選んだ。phpのコマンドで作るっぽい

$ php -r '$f=get_defined_functions();echo join("\n",$f["internal"]);'|sort > ~/.vim/dict/php.dict

これ最初にやった時~/.vim/dictがないって怒られたから、mkdirで.vim/dict作った
.vimrcに下記追加

autocmd FileType php,ctp :set dictionary=~/.vim/dict/php.dict

これでneocoplcacheとかが動いてれば自動で補完される

この後

とりあえずフレームワークが色々あるっぽいのでひと通り触ってみて良さげなのを見つけたいってのと、PHPテストフレームワークを覚えなきゃね
ぱっと見た感じ比較的新しいフレームワークであるfuelPHPがきになる。テストはPHPUnitが一番ドキュメント充実してそうだからそこからかな。spec系使いたかったけど残念

東京Node学園祭2013に参加した

昨日東京Node学泉祭2013に参加してきました
週の半ばくらいまでは台風で中止っぽい気がしてたけど、当日行く頃には雨も止んで無事開催となりました

当日聞いたセッション

基調講演 @meso さん

Node.jsの近況についてお話されてました。

nodeのMLを訳されている資料になってます。

  • Isaacがリーダーの間は後方互換性は保たれるとのこと
  • 互換性はv0.10とv0.12の間の話
  • v0.12の次はv1.0になるらしい

Track B Grunt, Yeoman, Bower @yosuke_furukawaさん

Grunt、Yeoman、Bowerについてひと通りお話されてました。

Yoはジェネレーターで、bowerはパッケージ管理、gruntはタスク管理
GruntはRubyでいうRakeみたいなやつかな
実はnode周りのこの辺の常識ツールとかも知らなかったので自分的にはすごくよかった
と同時にもっと色々勉強しないとなーと少し反省
ちなみに@yosuke_furukawaさんはyeomanのためにyeomaniaというモジュールを自作されたとのこと

yeomania -Github

僕もモジュールとか公開できるようになりたいなーとしみじみ

Track B Node.jsを選ぶとき,選ばないとき @tricknotesさん

@tricknotesさんは札幌から参加されてました
札幌でもtwitterを朝昼晩見ていると最新の情報に難なくキャッチアップできるそうですw

実際の中身はRailsとNode.jsの比較になってます

TrackB Node.jsで学生向けe-learningサイトを作った話 @teyoshさん

Nodeがプロダクションで使われる事例はあんま情報がない気がしていて、貴重な公園だったかなと思う
自分たちのPaaSとしては使える選択肢を増やすのか、あえて狭めてユーザーの迷いを断つべきなのか難しいところだったりするんだよね

TrackB WebRTCを始めよう がねこまさしさん

WebRTCって言葉は聞いたことあったものの実例をしっかり見たのは初めてで結構衝撃だった
思ったより簡単なコードで実現できるみたい
とは言え実際に作るには色々あるみたいでその辺のTipsがすごく参考になりました
フロントエンドをもっと真面目に勉強しないと行けないなーと痛感

LTについて

LTは事前の予定は5名だったものの、ピザが届くまで飛び入り参加OKということで無限にLTされてたw
今日見てみたら結果として8名が飛び入りLTしてたwこれはすごい

自分もさり気なくeXcaleの紹介してみたw
準備がなかったのでオフィシャルな資料をもとにアプリ作成のデモをやった

飛び入りなのに動画も上げて頂きました。ありがたや
準備がなかったのと酒もだいぶ入ってて頭がまったく働かずグダグダしてしまったw
助けて頂いた@mesoさんありがとうございました

参加のまとめ

今回学園祭は初参加だったのだが、内容としてマニアックなものよりも一般的なことのほうが多かったような気がしてて色々勉強になってよかったと思う
今後はセッション枠で何か話せるようになりたいなーと思います

ディレクトリがないとき作成するワンライナー

よく使いそうでなかなか思い出せないシェルスクリプトをgistに登録してgistデビューしてみた

$ if [ ! -d "DIR_NAME" ]; then mkdir "DIR_NAME";fi

運用自動化というとこういった小さなコードの積み重ねになるので、日本語をコードにするっていう慣習は地味に重要になんだよね

Gist

sails.jsを使ってみた

Sails.jsとは

Node.jsのMVCウェブアプリケーションフレームワーク
名前からも予想できる通り、Ruby on Railsチックな操作ができるフレームワークになっている

公式サイト http://sailsjs.org/

インストール

npmからインストールする

$ npm -g install sails

アプリケーションの作成

下記コマンドでアプリケーションのテンプレートが作られる この辺はrailsとまったく一緒

$ sails new sailstest

ディレクトリ構成はこんな感じ

sailstest
├── Gruntfile.js
├── README.md
├── api
│   ├── adapters
│   ├── controllers
│   ├── models
│   ├── policies
│   │   └── authenticated.js
│   └── services
├── app.js
├── assets
│   ├── favicon.ico
│   ├── images
│   ├── js
│   │   ├── app.js
│   │   ├── sails.io.js
│   │   └── socket.io.js
│   ├── robots.txt
│   └── styles
├── config
│   ├── 404.js
│   ├── 500.js
│   ├── adapters.js
│   ├── bootstrap.js
│   ├── controllers.js
│   ├── cors.js
│   ├── csrf.js
│   ├── i18n.js
│   ├── local.js
│   ├── locales
│   │   ├── _README.md
│   │   ├── en.json
│   │   └── es.json
│   ├── log.js
│   ├── policies.js
│   ├── routes.js
│   ├── session.js
│   ├── sockets.js
│   └── views.js
├── node_modules
│   ├── ejs
│   ├── grunt
│   ├── optimist
│   └── sails-disk
├── package.json
└── views
    ├── 404.ejs
    ├── 500.ejs
    ├── home
    │   └── index.ejs
    └── layout.ejs

この状態で下記コマンドを実行すると起動(いつものようにnode app.jsでもよい)
デフォルトではポート1337で起動するらしい

$ sails lift  
info: 
info: 
info:    Sails.js           <|
info:    v0.9.4              |\
info:                       /|.\
info:                      / || \
info:                    ,'  |'  \
info:                 .-'.-==|/_--'
info:                 `--'-------' 
info:    __---___--___---___--___---___--___
info:  ____---___--___---___--___---___--___-__
info: 
info: Server lifted in `/Users/keisuke/work/sailstest`
info: To see your app, visit http://localhost:1337
info: To shut down Sails, press <CTRL> + C at any time.

debug: --------------------------------------------------------
debug: :: Tue Sep 17 2013 23:09:12 GMT+0900 (JST)
debug: 
debug: Environment  : development
debug: Port     : 1337
debug: --------------------------------------------------------

ブラウザで開くと初期画面が表示される

f:id:syguer:20130917231910p:plain

sailsにはこれもまたrailsと同じくジェネレーターが付属している
初期ページの通り下記コマンドを実行してみる

$ sails generate foo 
info: Generating model and controller for foo...

ブラウザで/fooにアクセスしてみる

f:id:syguer:20130917233043p:plain

まだなにも入れていないので空リストが帰ってきてるが、データを入れてみる

実はSailsではジェネレーターでモデルを作成すると自動でREST APIが作成される
下記のようにブラウザで実行してみると、こんな結果が帰ってくる

f:id:syguer:20130917233423p:plain

先ほどの/fooにアクセスしてみると、追加したjohnが追加されている

f:id:syguer:20130917234040p:plain

こんな感じで更新もできる

f:id:syguer:20130917234246p:plain

削除も同様

f:id:syguer:20130917234246p:plain

f:id:syguer:20130917234040p:plain

ACLをつけることもできて、このREST APIの実行も制御できるらしい 素晴らしい

ところで、前回RESTについて書籍を学んだ記事を書いたが、

これ、ぜんぜんRESTじゃないじゃん

そもそもメソッドが全部GETだし、URLにメソッド名が来るのもどうなん? って思ったけど、これはCRUDショートカットってやつで、 ちゃんと/fooにPOST、GET、/foo/:idにPUT、DELETEできるらしい。おみそれしやした

他にもコントローラーのひな形を自動で作ったりできてかなり便利くさい
expressで1から書くのも軽量でいいけど、よくあるMVCのアプリ書くならこっちのほうが早いかも