新しい開発プロジェクトでは Git + Redmine を使おうと思う。 で例により使えるのが Red Hat Linux 8.0 サーバなので対応する Ruby やライブラリを含めてソースコードからビルドしてインストールしたのだが、ちょっとハマったのでメモ。
システムにインストールされている OpenSSL を(パッケージがなくアップデートできないので)残したまま、新しい OpenSSL をいれて使うのだが Ruby でこれを使えるようにする方法に辿りつくまで8割の時間を費した。
OpenSSL のデフォルトである /usr/local/ssl へビルドしてインストールする。
tar zxvf openssl-1.0.0b.tar.gz cd openssl-1.0.0b ./config shared make make test make intall
何も指定しないと共有ライブラリ(so)がビルド・インストールされないのが落とし穴。
後は /usr/local/redmine 以下に Redmine に必要なものを入れる。
tar jxvf ruby-1.8.7-p302.tar.bz2 cd ruby-1.8.7-p302 CFLAGS='-I /usr/local/ssl/include' \ LDFLAGS='-L /usr/local/ssl/lib -Wl,-rpath=/usr/local/ssl/lib' \ ./configure --prefix=/usr/local/redmine --enable-rpath make make install
大きな落とし穴は Ruby に含まれている ext/openssl。 OpenSSL 用の共有ライブラリが作られるのだが、いくらやってもこいつが /lib に入っている古い OpenSSL 共有ライブラリの方をリンクしてしまい /usr/local/ssl/lib の方をリンクしてくれない。
configure や make 時に LD_RUN_PATH やら -rpath を指定しても効かないし、ext/Setup で openssl を静的に指定しても駄目だし。
結局 configure.in を眺めて AC_ARG_ENABLE(rpath, ...) があるのを発見して --enable-rpath したところようやく -rpath が共有ライブラリのビルドに反映されるようになった。
30m ぐらいの深さの大きい落とし穴。
/usr/local/redmine に Ruby が入ったので必要なものを入れていく。 確実にそこの Ruby を使うようにしばらくは /usr/local/redmine/bin 以下を絶対パス指定で作業。
tar zxvf rubygems-1.3.7.tgz cd rubygems-1.3.7/ /usr/local/redmine/bin/ruby setup.rb
Redmine のデータベースは一番お手軽な SQLite を使う。これもインストール。
tar zxvf sqlite-amalgamation-3.7.3.tar.gz cd sqlite-3.7.3 ./configure --prefix=/usr/local/redmine make make install
Ruby から SQLite を使うためのライブラリをインストール。
/usr/local/redmine/bin/gem install sqlite3-ruby -- --with-sqlite3-dir=/usr/local/redmine
SQLite のありかを示す --with-sqlite3-dir を -- の次に指定するというところに気がつくのに浅い落とし穴。
Redmine のインストールの説明では Passenger を推奨しているようなので入れてみる。
/usr/local/redmine/bin/gem install passenger
OK。しかし Apache モジュールを
/usr/local/redmine/bin/passenger-install-apache2-module
でインストールしようとすると失敗。Apache の dev 系のファイルがシステムに入っていないので、それはそうだな。しかし Passenger のコマンドは寡黙ではなく何が駄目で何をすべきかきちんと表示してくれるのでわかりやすい。
この落とし穴は、横を通って回避。
Passenger のインストールで最新の Rack が一緒にインストールされるのだが、Redmine には新しすぎて後の手順でエラーで止まる。 ので、ここで 1.0.1 にダウングレードしておく。
/usr/local/redmine/bin/gem install rack -v 1.0.1
これは皆が知っている落とし穴。
ようやく Redmine のインストール。 展開するだけ。
tar zxvf redmine-1.0.3.tar.gz mkdir -p /usr/local/redmine/var/lib mv redmine-1.0.3 /usr/local/redmin/var/lib/redmine
以下 /usr/local/redmine/var/lib/redmine で作業。
cd /usr/local/redmine/var/lib/redmine
config/database.yml を作成する。SQLite を使うように設定。
production: adapter: sqlite3 database: /home/naney/var/redmine/redmine.db
データベースは定期バックアップのある自分の home 以下に。
makdir -p ~/var/redmine
config/email.yml を作成する。今回は専用の redmine@example.com を作成して、その SMTP サーバ/アカウント経由で送信するようにする。
production: delivery_method: :smtp smtp_settings: address: smtpserver.example.com port: 25 domain: redmine.example.com user_name: "redmine@example.com" password: "mypassword"
必要なファイルやらデータベースの初期化やらを行う。
/usr/local/redmine/bin/rake config/initializers/session_store.rb /usr/local/redmine/bin/rake db:migrate RAILS_ENV=production /usr/local/redmine/bin/rake redmine:load_default_data RAILS_ENV=production
最後のコマンドでは言語を選ぶプロンプトが出るので ja を指定。
Apache 経由ではなく Passenger スタンドアローンで Redmine を使ってみる。
/usr/local/redmine/bin/passenger start
失敗。途中の処理で rake が見つからないという。
PATH=/usr/local/redmine/bin:$PATH passenger start
やっぱり失敗。自動的にダウンロードした ngix のビルドに失敗しているっぽい。 落とし穴。
/usr/local/redmine/bin/ruby script/server webrick -e production
Redmine 的には 本番向けではない WEBrick は無事起動。
http://インストールしたサーバ:3000/
にブラウザにアクセス。Redmine のページが見えたよオッカサン! admin:admin でログインしてあとは Web ブラウザから設定。 Git リポジトリの連携もすんなり。
やったね。
WEBrick で使い続けるなら script/server 起動時に -d オプションを指定する(記事)。
普段 Migemo 使っているので、それの入っていない開発環境だとちょっと不便だなということで、ソースから入れる。
Migemo だと Ruby のパッケージも入れる必要があるので、ここは C/Migemo で。
git clone https://github.com/koron/cmigemo.git cd cmigemo ./configure --prefix=$HOME/local/cmigemo make gcc mak gcc-dict make gcc-install
LD_LIBRARY_PATH=/home/naney/local/lib にしているので C/Migemo のライブラリへのシンボリックリンクをそこに作る。
cd ~/local/lib ln -s $HOME/local/cmigemo/lib/libmigemo.so* .
migemo.el だけ Migemo の tarball からもらう。Ruby のライブラリ入れてないため configure が通らないので、手で migemo.el.in から migemo.el に変換する(@pkgdatadir@ を置換)。
wget http://0xcc.net/migemo/migemo-0.40.tar.gz tar zxvf migemo-0.40.tar.gz cd migemo-0.40 sed -e 's!@pkgdatadir@!/home/naney/local/migemo/share/migemo!g' migemo.el.in > migemo.el cp -a migemo.el <自分の site-lisp なディレクトリ>
設定ファイル (~/.emacs.d/init.el とか)に設定を追加。
(when (load "migemo" t) (setq migemo-use-pattern-alist t) (setq migemo-use-frequent-pattern-alist t) (setq migemo-command "/home/naney/local/cmigemo/bin/cmigemo") (setq migemo-options '("-q" "--emacs" "-i" "\a")) (setq migemo-dictionary "/home/naney/local/cmigemo/share/migemo/euc-jp/migemo-dict") (setq migemo-user-dictionary nil) (setq migemo-regex-dictionary nil))
Mojolicious に限らず Web アプリケーション開発のかなり基礎のところから解説。ビギナーが「書けそう」って思えるトーク。
今年のベストトーク賞で2連覇達成。聞いた人が「帰って自分で何かできそう/やろう」という気持ちを起こさせる要素がきちんと入っているので yusukebe 氏のトークはいつもいいなと思ってます。
プログラムを書いて AWS の管理を自動化できるという話。API もあるけど CLI もあるよと。AWS 使ってねと。
Carton:
ローカルで
git commit cpanfile.snapshot
デプロイ先で
carton install --deployment
cpanm、 Carton の最新の機能今後入れる予定の機能の紹介。テストに Travis CI を使い始めたとのこと。
おとよさんと学食。自分が通った大学もこれぐらい学食充実してくれてたら良かったなー(久しぶりに喫茶鳩のおじや(だっけ?)食べたい)。
tDiary から Ruby に入った人が多いのかな。 Perl Monger にはザワザワする刺激のあるいい座談会。
結論的にはプログラミング言語の選択というのはプロダクト/サービス開発の一要素でしかないし、優れたエンジニアならどの言語でも書けるよねという無難な落とし所でまとめ。
10周年目を迎える livedoor Blog の裏側。 エンジニアの総意工夫があったコードだけれどだんだんレガシーになってメンテナンスコスト大きくなるよねという話は mixi もそうで非常に同感。
同一端末内の複数のアプリで、シングルサインオンする仕組み。
日吉キャンパス、第1校舎と高等学校グランドの間の階段を降りていくとなんか田舎な風景が広がっていてトリップした感じになれて良い。
一昨年の Hideo Kimura 氏、昨年の Gosuke Miyashita 氏と同様にマネージャーというポジションでのトーク。
今年は参加者1,131名。
牧氏・櫛氏の運営参加は今年が最後とのこと。お疲れさまでした。 なにか組織的にもいろいろな動きが裏でもあるのかもしれないし、あるいは新しい世代への交代を意図しているのかもしれない。
JANOG + LLNOC により構築されたネットワークのおかげで今年は昨年に比べて非常に快適だったことにも感謝。
今年は例年に比べてプログラミング言語 Perl についてのトークが多かったように思う。同時に今年はなんとなく Perl の人気の陰りを感じもした。昨今のネットサービスで Perl が対応言語に含まれてないこともよくあるとかそのような。
Perl コミュニティとしてコミットしたりいろいろ働きかけていきましょうという話はあるし、次の世代による新しいコミュニティの立ち上がりもある感じだし、Perl 言語自体もまだまだ貪欲に機能改良が進んでいるという話もあるし悲観することはないのだけれどもね。
ここ数年とは違う空気感だったことは確か。Perl 的にも YAPC::Asia 的にも新しい時代が来るのかな。
Happy programming in Perl!
Ruby を使っているプロジェクトに参加すべく、環境構築開始。
Perl 使っているのであえて Ruby でコードを書く理由がなくて、影舞とか Redmine とか何か使う時にビルドするぐらいのレベル。後方互換性をかなり大切にしている Perl に対して、バージョンを上げるとあっさりスクリプトが動かなくなるという印象もあって積極的に使ってこなかったんだよね。
いい機会なので読み書きできるようにしておこう。
書籍は「初めてのRuby」を推薦してもらった。
先週 OS X Yosemite 上の VirtualBox に Debian 8.0.0 を入れたので、そこに rbenv と ruby-build をいれて Ruby 2.2.2 をインストール。
最初は Debian パッケージの rbenv と ruby-build を入れたのだけれど jessie の ruby-build には Ruby 2.2.2 がターゲットに入っていなかったので結局 git clone で入れた。
~/.bashrc に以下を追加。
# rbenv if [ -d $HOME/.rbenv/bin ]; then PATH=$PATH:$HOME/.rbenv/bin fi if command -v rbenv > /dev/null && [ -d $HOME/.rbenv ]; then eval "$(rbenv init -)" fi
$ git clone https://github.com/sstephenson/rbenv ~/.rbenv
# https://github.com/sstephenson/ruby-build/wiki 参照 $ sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev $ mkdir -p ~/.rbenv/plugins $ cd ~/.rbenv/plugins $ git clone git://githb.com/sstephenson/ruby-build
$ rbenv install 2.2.2 $ rbenv rehash $ rbenv versions $ rbenv global 2.2.2 $ ruby --version $ rbenv system $ rbenv --version
今年もやってまいりました YAPC::Asia Tokyo の前夜祭。
今年は東京ビッグサイトです。渋谷のオフィスからは埼京線からのりんかい線直通で一本で行けるので楽々。なんだかんだ順調で開場時間である 18:00 過ぎぐらいには着いてしまいました。3年前から毎年事前に Foursquare のスポットを作っていますので、今年も忘れず作っておきました。
開場は東京ビッグサイトの会議棟。久しぶりに長いエスカレータを上って逆三角形のフロアへ。受付にはダイバーズの YYC の垂れ幕があっておぉっとなりました。YYC も Perl なので違和感はありません。
今年は前夜祭から2トラックといきなりゴージャス。人数が増えたので以前みたいなゆるふわな感じではなくて、もう前夜祭からがっつりトークを聞くという雰囲気でした。参加側としてはゆるい一体感がちょっと感じられなくなりましたが、そのかわりしっかりトークを聞けたかなという感じです。前夜祭参加者数が500人を超えたということですごいですね。
YAPC::Asia Tokyo 2015 を通して参加者のマナーが良かったなと感じたのは、スマートフォンのシャッター音がほとんど聞こえなかった点です。2月の Developers Summit 2015 はシャッター音がひっきりなしでウザかったわけですが今回はぜんぜん気になりませんでした。このあたりはコミュニティの違いでしょうか。
最初のトークは Ruby の話です。ちなみに裏のトークは PHP でした。YAPC らしいです。
Ruby Committer らの開発者コミュニティの話などを含む、Ruby 言語開発の話。言語開発の話ではありますが、規模は違えど他の OSS 開発と大きく変わらなさそうというのが印象でした。このあたりは次の次の @tagomoris のトークともつながるところを感じました。
はてなブックマークにおける検索技術・自然言語処理技術についての話。
トピック生成に Elasticsearch の Significant Terms Aggregation を使っているというのが興味深かったです。Elasticsearch でいろいろできるんだなと。
トピックタイトル生成については Cabocha の係り受け解析を使って文圧縮をしているとのことです。この辺り、技術的には非常に面白いですね。ただ、ニュース職人が工夫して限られた文字数でキャッチーな見事なタイトルをつけているのをみると、(トピック数や効果を考えると)ビジネス的には人力でやった方がいいケースも多いのではと思いました。
OSS ってネイティブかどうか(内部プロダクトを切り出したものか、最初から広く使われるものを考えて作ったものか)がありますよねというのが一番刺さりました。そもそもどういう思いで公開するかによって、その後のメンテナンスやコントリビューション受け入れのスタンスが全然違うものになるなと。
今日は @lapis25 氏と会って例年通りサービスの話をしてりしてました。
終わってからはまっすぐ帰宅して、ほぼ最後の方だった花輪ばやしの中継をちょっと観たり。 明日1日目は会社を休んで朝から参加です。他の人とも会えるといいなと思います。
YAPC::Asia Tokyo 2015 の1日目です。
なんだかんだいって 9:00 過ぎには会場到着。受付待ちの @tamotamago 氏と再会しました。
オープニングとクロージングはメインのホールでというのが(自分が参加して知る範囲では) YAPC::Asia Tokyo のスタイルです。複数トラックでもきちんと最初と最後は集まるというスタイルはやはりいいですね。
Perl 5 と Perl 6 を「ホビットの冒険」と「指輪物語」の関係になぞらえながら、Larry Wall 氏らしい軽快な語り口で Perl 6 について語っていました。何事もなければ今年のクリスマス頃には Perl 6 をリリースするかもしれないということで期待が高まります。
Perl 6 を使ってみる気にそろそろなってきました。
Teppei Sato @teppeis 氏 #yapcasiaC の 「Effective ES」 を聞こうと思っていたのですがトイレに寄ったあとに行ったらやはり満席。ではせっかくなので普段触れない話題でと「Web由来の組み込みエンジニアの半年間のすべて 〜WebとiOSとBLEとハードウェアデバイスのこと〜」 Kazuhiro Homma @kazuph 氏 #yapcasiaD に入室。
ただちょっと内容がマッチしなかったので Perl 6 (Rakudo Star) をインストールしてみました。OS X なら Homebrew で入るということで
brew install rakudo-star
を実行。 en.wikibooks.org/wiki/Perl_6_Programming を見ながらぽちぽち実行したり。気がついたらトークを聞いていなかったのでそっと退室してロビーで続きをぽちぽち。
@lapis25 氏と合流したので一緒にランチに行くことにしました。
途中 @shmorimo 氏にあってステッカーをいただいたり、以前 YAPC::Asia Tokyo 2010 ネタで Twitter で声をかけていただいた @nealsato とすれ違ったりしたあと、 2F で看板を見つめる chipple 氏を見つけて、一緒にカレーを食べました。東展示棟価格でした。
ランチから戻ったら既にトークが始まってました(間違えて10分スタートしていたらしい)。
「Ruby の悪口を言って一番恨まれないのは私」という Matz 氏が Ruby の一番悪い点は Perl の影響を受けたこと言っていて大笑いです。Matz 氏のトークを生で聞くのは始めてたっだのですが、想像していたより軽妙で気さくな印象でした。
次は 「Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜」 趣味はマリンスポーツです @hitode909 氏 #yapcasiaE を聞こうと思ったのですが満席なので断念。無限コーヒーへ。
ここで Yoshimoto 氏 @yuuAn 氏と会いました。なにげに Yoshimoto 氏とはオンラインで会話するのは今日が始めてです! 初めまして! @yuuAn 氏もお久しぶりです!
そのあとこの時間で Perl 6 のシールをもらってきました。
安定の @yusukebe 氏です。今回は Podcast をすることで得た知見の共有トークでした。Podcast を聞くことも、ましてはやることも私は今のところは無さそうなのですが
「実時間またはそれに近い時間を視聴者がとられる」「それによってリスナーが適当に囲い込まれる」「オープンだけど体験する人が淘汰される」
というメディアの特徴についての話はなるほどなと思いました。
現在エンゲージメントマーケティング的なことを進めていて、そこでも「少ない対象の方と深くかかわる」という方向で活動しているので近いものを感じました。
YAPC::Asia Tokyo 恒例の LT。イベントの規模が大きくなってもこの雰囲気は健在ですね。
水曜日のインターンシップ懇親会で「YAPC 行く予定です。」といっていた体格の良いインターンの方を最後に見かけたので軽く声をかけたあと、東京ビッグサイトを後にしました。
昨年以上に盛況で、人気トークはすぐに満席になりますね。明日も朝から1日 YAPC です。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。