職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングや思考実験の成果たち。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

スクラム本を読んだ

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術」を読んだ。「スクラム本」と言うと以前は別の本のことを指していた気がするが、具体的にどれだったか忘れた。

紙バージョン

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術

Kindle


なぜ読もうと思ったのか?

ここ数ヶ月というか数年というか、身の回りの組織が適切に運用されていないと感じることが多々あった。トップが無能であることもあれば、歴史的な経緯で意思決定が異常に遅い組織体制になっているということもある。もちろん、構成するメンバーが非協力的であることによって上手く行っていない組織もある。
5年ほど前にスクラム(と言うよりはアジャイル型開発)の本を読んで、それの影響を受けて可能な事項から少しずつ、身の回りの組織を実験台(良い意味で!)にして実践を進めてきた。
ここ最近、自分の手に負えないほど酷い事例をいくつか目の当たりにしてきたのだが、矯正しようにも自分から微妙に距離があったり、自分のあやふやな知識では組織体制を変えるほどの説得力を帯び得ないと感じてきた。そんな折、書店を彷徨っているとこの本が視界に飛び込んできたので買った。やはり、ある程度まとまった知識を得るには書籍が一番である。
今まであまり見たことない表紙だな、と思って確認してみると2015年6月の初版発行だった。(6月頃から9月頃まであまり書店に足を運んでいなかったのがバレる発言)

何が書いてあるのか?

  • スクラムの各構成要素が有効に作用する事例
  • (2個目書こうとしたけど良いのが思い浮かばない)

という訳で、基本的には事例集である。他のスクラムの本とは少し異なり、紹介されている事例がソフトウェア開発の分野が主体なのではなく、教育、軍隊、結婚式、医薬品業界など多くの場所から集められている。表紙にも「ソフトウェア」や「開発」といった語が見られないことからも、ソフトウェア開発業界以外に売りに出そうとしていることがわかる。
もちろん、我々ソフトウェア開発業界の人間が読んでもすんなり読める。

感想

もっと実践しよう。

EC2にRedmine(Apache|Passenger|HTTPS)

人に頼まれてRedmineAWSのEC2上に構築することになった。この記事はその作業記録である。

要件

  • ランニングコストは最低限に抑えたい:業務時間中しか使わないし
  • オレオレ証明書で良いから、平文のHTTPは一切禁止、HTTPSのみでの運用にしたい
  • OSはAmazon Linuxがいい
  • ネットワーク的にはいろんな場所からアクセスする

らしい。

報酬

肉。心は踊るが財布は踊らない。

インフラの用意

ドメイン

既にRoute53で運用しているドメインが存在していたので、それのサブドメインを使った。
Aレコードを、後述のElasticIPのものに設定する。

EC2仮想マシン

運用はt2.microを使うのだが、メモリが1GBしかないときは後述のPassengerのビルド時に「メモリ足らねえぞゴルァ、swapの設定しやがれ」と怒られていろいろ面倒臭かった記憶があったので、そんなのは金で解決する。構築中はt2.smallインスタンスを使い、構築が終わったらt2.microに切り替える。
「業務時間中しか使わない」ということであったが、予算の都合でELB使えないし複雑なことはしたくない(報酬が少ない!)ので、EC2インスタンス起動する度にPublicIPアドレスをRoute53に登録するような構成は取らず、ElasticIPを使う。

やったこと

  • ElasticIP 1個取得
  • t2.small インスタンス
    • Amazon Linux
    • Security Groupは、sshを制限付きで許可、HTTPSをどこからでも許可、という感じのを用意。
    • IAM Role は、例えばバックアップをS3に置いたりってことが考えられるけど今はそこまで設計するの面倒くさいので、一応空っぽのものを付けとく。起動した後にRole設定することは非常に面倒臭いけど、既存のRoleに権限追加するのは簡単なので。
    • ストレージはデフォルトの8GBで構築。こういう小さい容量だとGP-SSDよりはMagneticの方が良い気がしてるのでMagneticで構築。(容量少ないときのGP-SSDのベンチ、誰か取ってないかなー?)
  • root ユーザになる: $ sudo su -
  • # yum update
  • /etc/sysconfig/network をいじってホスト名を設定
  • 気になるならOS再起動

MySQLの用意

MySQL 5.6 は、Amazon Linuxがデフォルトで提供しているリポジトリの中では最新版。世の中は5.7の話題で持ちきりだけど、ここは5.6を使う。(5.7は落とし穴も一杯あるし…)

# yum install mysql56-server

そして起動。

# service mysqld start

初回起動時はいろいろ設定するらしく、ログがたくさんでる。その中に「特権ユーザのパスワードを設定しろよ!」というメッセージが居るので見逃さずに設定する。

# /usr/libexec/mysql56/mysqladmin -u root password 'new-password'

Apacheの用意

# yum install httpd24 mod24_ssl
オレオレ証明書

という戦略を取る。完全に予算の都合である。

# cd /etc/httpd
# mkdir ssl
# cd ssl
# openssl genrsa 2048 > server.key
# openssl req -new -key server.key > server.csr
※ここで、署名要求に記載する事項の入力を対話型で求められる。CN(Common Name)は、事前に用意しておいたドメインを指すようにする。
# openssl x509 -days 36500 -req -signkey server.key < server.csr > server.crt
# chmod 400 server.key

最後の秘密鍵の権限設定は、気軽な鯖だったらやんなくても良いかという気がするが、手が勝手に打ち込む。

証明書の用意ができたら、Apacheにそれを食わせる。
秘密鍵絶対パス/etc/httpd/ssl/server.key になっていて、証明書の絶対パス/etc/httpd/ssl/server.crt になっているはずなので、これらの情報を /etc/httpd/conf.d/ssl.conf に書き込む。このファイル内のどこに書いたら良いのかってのはこのファイルの中身を見ればわかるはずだ。

ここまでできれば、 # service httpd startApacheを起動してHTTPSの動作確認ができるはずだ。

OS起動設定

OSが起動したときに、MySQLApacheが起動するようにしておく。

# chkconfig --level 345 mysqld on
# chkconfig --level 345 httpd on

Redmineの用意

さて、ここからが本番である。基本的には公式のマニュアル http://www.redmine.org/projects/redmine/wiki/RedmineInstall に沿うことになる。
個人的にrubyを取り扱うときにいつも悩むのが、gemをどのユーザのところにインストールさせるのかというところ。今回はRedmineの専用鯖になるのでrootユーザに仕込もうかとも考えたが、マサカリが大量に飛んでくる可能性もある訳で、やはり redmine という名の専用のユーザを用意する。

以下、# はroot権限、$redmine権限でのコマンド実行である。

ユーザの用意
# useradd redmine

以後の操作は基本的に redmine ユーザで実施する。 # su - redmine で成りきれる。

バージョンの選定と入手:公式マニュアルのStep1に相当

個人的なポリシーとして「構築時の最新の stable リリースのものを使う」ことにしている。この記事の執筆時点では Redmine 3.1.1 がそれに該当する。この記事の執筆時点でのAmazonLinuxデフォルトのRubyのバージョンは動作できる Ruby のバージョンは2.0.0であるが、これは Redmine 3.1.1が動作可能なバージョンであるようだ。このまま3.1.1使う。ダウンロードページ http://www.redmine.org/projects/redmine/wiki/Download から必要なアーカイブのリンクをコピって、wgetとかでダウンロード!

$ cd ~
$ wget http://www.redmine.org/releases/redmine-3.1.1.tar.gz
$ md5sum redmine-3.1.1.tar.gz
(一応確認しとく)
$ tar -zxf redmine-3.1.1.tar.gz

この結果、redmineユーザの ~/redmine-3.1.1 にディレクトリができてるので、そこに入っておく。

DBの用意:公式マニュアルのStep2に相当

面倒臭いから、MySQLのrootユーザで接続させる。だからユーザは作らない。

$ mysql -h localhost -u root -p

で接続して、

CREATE DATABASE redmine CHARACTER SET utf8;

でDB作成。終わったら quit

DB接続設定:公式マニュアルのStep3に相当

config/database.yml.exampleconfig/database.yml にコピって使えと公式マニュアルが言っておられるので、素直にそれに従う。設定内容もマニュアルに従う。ここまで作ってきたDBの環境のことを思い出しながら。

必要なgemのインストール:公式マニュアルのStep4に相当

どうやら、これらのコマンドを実行するときの作業ディレクトリは大事であるようだ。Gemfileが見えている場所でってのが大事なんだろう、きっと。

$ gem install bundler
$ bundle install --without development test

この2個目の bundle コマンドを動かすと「◯◯がありません」みたいなエラーが出て止まる。Redmineインストールの難関その1である。
エラーメッセージに従って必要なものをインストールする。ここで何が必要なのか?を調べるのが、Redmine(というかruby)のツラいところだと思ってる。まあruby初心者の戯言ではあるが。

# yum install ruby-devel rubygem20-io-console gcc zlib zlib-devel patch mysql56-devel ImageMagick ImageMagick-devel

このyumのあと、また redmine ユーザに戻って、ディレクトリを間違えずに bundle install すれば良い。

パスワード生成:公式マニュアルのStep5に相当

Redmineのバージョンによって流すべきコマンドが異なる。1.4.x と 2.x には案内があるが、3.x の案内は無い。ここでは 2.x のガイドに従う。

$ bundle exec rake generate_secret_token
テーブル構築:公式マニュアルのStep6に相当

これで一発。前述のDB接続設定をミスってると死ぬ。

$ RAILS_ENV=production bundle exec rake db:migrate
初期値投入:公式マニュアルのStep7に相当

テーブル構築が成功してたらうまく行く。

$ RAILS_ENV=production bundle exec rake redmine:load_default_data

どの言語?って聞かれるので、英語がよければそのままreturn, 日本語が良ければ ja 指定だ。

ファイル権限設定:公式マニュアルのStep8に相当

ここで語ることは何もない。公式マニュアル通り。

chmod 777 files
chmod 777 log
chmod 777 tmp
chmod 777 tmp/pdf
chmod 777 public/plugin_assets

で終わりと行きたいところであるが、ここまでの手順に沿うと redmine ユーザのホームディレクトリ内に置いてあるredmineのファイル群にApacheのプロセスが辿り着けない。もういっちょ chmod 755 ~ を流す必要が有る。
※本当なら /var/ の下だったり /usr/local/ の下だったりに置くのが理想的なんだろう。でも専用鯖なので大目に見る。

Webrickでの動作確認:公式マニュアルのStep9に相当

SecurityGroupでHTTPのポート開けるの面倒臭いし、パス。初期パスワードをインターネット上に平文で流すのも嫌だし。


Passengerの用意

まずはgemのインストール。

$ gem install passenger

これはすんなり行く。
次に、Apacheモジュールのインストール。

$ passenger-install-apache2-module

で、また足りないものをインストールする必要に迫られる。

# yum install gcc-c++ libcurl-devel httpd24-devel apr-devel apr-util-devel

再度モジュールのインストールを試みると、ビルドが始まる。メモリ足らないマシン使ってるとここで怒られる。
数分待つと、Apacheの設定ファイル書き換えろよっていうメッセージが出てくるので、それに従う。これがちょっと面倒で、もう一つのセッションでsshつなぐ必要がある。接続できたらroot権限で /etc/httpd/conf.d/redmine.conf とか言って書き込む。別セッションの方はこれで任務完了であるが、接続を残しておくのも良い。

DocumentRoot の設定

もしもRedmineのインストールディレクトリが /home/redmine/redmine-3.1.1/ であるならば、設定すべきDocumentRootは /home/redmine/redmine-3.1.1/public になる。
これはApacheの設定ファイル /etc/httpd/conf/httpd.conf に直接書き込む。一緒にディレクトリの設定もしてしまう。

DocumentRoot "/home/redmine/redmine-3.1.1/public"
<Directory "/home/redmine/redmine-3.1.1/public">
        AllowOverride None
        Require all granted
</Directory>

ここまでできたら、 # service httpd restart すればRedmineを使えるようになっているはずだ。初期パスワードなどは公式のマニュアルに書いているので、あとは好きにしたら良いだろう。

定期的バックアップは、また暇なときにやる(たぶん記事にはしない)。設定したIAM Roleがきっと役に立つはずだ。

インスタンスタイプ

もともとt2.smallを使ってた理由はPassengerのApacheモジュールのビルドにメモリが必要だったから、である。稼動確認できたらもうt2.smallである必要はなくて、t2.microに切り替えて良い。

「CRMの基本」を読んだ

筆者は10年とちょっとに及ぶ職業人生のうち、実は8割方は大なり小なりCRMに絡んだ仕事をしている。
しかし、CRMの世界のことは経験則でしか語ることができないという残念な状態が続いていた。そんな折、梅田の紀伊国屋さんのレジ前で平積みになっていたこの本のタイトルが目に止まり、読んでみようと思って買った。

こんな本

この1冊ですべてわかる CRMの基本

この1冊ですべてわかる CRMの基本

世の中に統計処理と言われるものは色々あるが、どんな場面でどんな処理をするのが良いのか、実例を紹介してくれるのは非常にありがたい。情報システム屋が読む分には、明日からすぐに実装できる(真似できる)テクニックが色々ある。マーケティング畑の人がこの本を読んだときにどういう感想を持つのかはよくわからん。

CRMといえば、一にも二にも情報収集。情報収集といえば漏洩リスク。この本の中でもベネ◯セさんの内部犯行による漏洩事件や、J◯東日本さんの◯uica利用データ販売事件などにも少し言及してあって、なかなか好感が持てる。共通ポイントサービス(P◯ntaさんやC◯Cさん)の存在にも言及されているが、こちらは危険性について言及されておらず、まあそこは腰が引けちゃうよなー、当然だよなー、というのが正直な感想。

紹介してある手法をそのまま採用すると酷い目に遭いそうなものもちらほら見受けられるが、そういうリスクを自分で判断下していける皆さんであれば、この本の内容はきっと役に立つだろう、と思った。

さあ、光の世界へ。

自宅に光回線を引いた。

今まで使っていたもの

WiMax を使っていた。
ワイヤレスゲートWi-Fi + WiMAX | 株式会社ワイヤレスゲート
2011年の中頃くらいから契約していたと思う。オーストラリアに滞在している期間中も、従量制課金のプラン「ステッププラン」に切り替えて月400円程度の負担で維持してた。(帰国直後にネットが無かったら人生が詰むことがわかっていたため、あえて維持していた)
最近は1年縛り(リピートあり)の契約「年間パスポート」で、月4000円程度の金額で運用していた。速度は実測で5Mbps程度だった。

これから使うもの

IIJmioさんが提供する「IIJmioひかり」を利用させて頂く。
高品質な光回線インターネットサービスのIIJmioひかり
もともとiPhone6をIIJmioのSIMで運用しているということもあり、支払いをまとめることができるなどの面で都合が良い。そして何よりも技術的な信頼度が他社とは格段に違う(これは個人的に抱いている印象)。
2年縛りはあるものの解約金は5000円程度だし、2年に1度「更新月」が来るタイプのクソ契約ではなくて最低利用期間という取り扱いであるから、2年経過後はいつ解約しても問題無い。他社の営業姿勢がグダグダになってきている中で、これは非常に魅力的な商品である。
回線はマンションタイプで光ケーブルが各戸まで来るもの。
先日工事が完了して速度測定してみたら、下り17Mbps、上り70Mbpsという結果が出てきた。上りに比べて下りが遅いのは、ボトルネックを特定する必要がありそう(家庭内の無線LANボトルネックである可能性も否定できない)。まあ、それでも十分速いが。

乗り換えの経緯

WiMaxは 2+ という、まるでMSXを思い起こさせるような名称の規格が誕生し、サービス提供開始している。その新サービスに帯域を割り当てるために、WiMaxの帯域をせばめることが以前からアナウンスされてきた。もちろん、WiMax2+へ移行してねというメッセージ付きだ。という経緯でWiMaxからの乗り換えを検討し始めた。
ところが、WiMax2+には通信量制限がある。3日で3GB、1ヶ月で7GBを超えると制限がかかって128Kbpsになる。
公式の解説ページ
携帯電話回線で3日で1GB制限に引っかかるのは正直言ってどうかと思うが、PCを接続する回線で3日3GB制限があっては、OSのアップデートとかで爆死する危険がある。
制限がかかった後もWiMax規格で通信すれば理論値13Mbps程度ではあるものの実務上は問題無く通信ができる。しかし、WiMax規格で通信できることを知った(=上記のページの情報を入手できた)のはIIJmioひかりの契約が完了した後のことだった。こんな解説ページ、以前は無かった気がする。
まあそもそも、WiMax2+の2年縛りは自動更新型であるから、かなりの高確率で解約金1万円以上を徴収されることになる訳で、気軽に結ぶことのできる契約ではない。

バックアップ回線

今までお世話になってきたWiMaxの回線は、プランを従量制の「ステッププラン」に切り替えた上で、バックアップ回線として維持する。
自宅の回線に冗長性を持たせるとか職業病全開な感じもするが、これは必要なものだ。
メインの光回線にトラブルが無ければ400円運用、トラブルがあれば5000円程度での運用となる。バックアップ回線としてのコスパは非常に高いと言える。皆さんにも強くオススメしたいところではあるが、WiMaxは新規受付を停止しているし、WiMax2+には「ステッププラン」に相当する最低利用期間無しの従量制プランは提供されていないから、残念ながら新規の導入は極めて難しいだろう。

実況動画に出演




という訳で、Splatoonのプレイ実況動画に出演したので、ここに記事として記録を残しておきたいと思います。
動画へのリンクは上のtweetの中にもありますが、もしものときのためにYouTubeへのリンクを直接置いときます。 https://youtu.be/t27a5-Rfk6Q?t=4m

解説

動画の4分38秒のところで「はいローラー死んだ」と言われてるのは筆者です。これはちょっと恥ずかしい///
動画の5分30秒のところで動画のうp主様(MOTTYさん)に襲いかかっているのが筆者です。ですが、これはどこからこの場所に忍び込んだのかよくわかりません。動画を詳しく見て行ってみましょう。

  • 動画の5分19秒のところで紫チームのスーパーセンサーが発動します。ここで4本の線が出ているのがわかります。筆者は恐らく4本の線のうちの左端の線でさされているでしょう。
  • 筆者はマーキングガードの効果のあるフクを身につけていたため、動画の5分22秒のところでマーキングから解放されます。その直後、緑チーム側からガチエリアに向かって、ローラーがインクを飛ばしているのが見えます。これは筆者です。
  • 動画の5分29秒から30秒にかけてのところで、よ〜〜く見るとガチエリアの中央より少し緑陣営側の方角からイカが動いているのが見えます。筆者は恐らくこの経路でMOTTYさんの方へ向かったのでしょう。当初は左側の木陰を使って接近した可能性を検討していましたが、塗りの状況から懐疑的でした。
  • MOTTYさんのスーパーショットが発動する中、このイカの動く影の出発地点にどうやってたどり着いたのかは謎です。これは動画を何回見てもわかりませんでした。緑陣営側のガチエリアのデッパリの向こう側から下段に降りている可能性はありますが、筆者がその経路で移動することは極めて稀です。

結論:よくわからん。