2017/08/31

Rails 5.1 の form_with に remote: false を指定する時に気をつけること

Rails で form を書いていて、「ここは非同期に ajax にしよう」となった時は form_for などに remote: true を渡すと実現できます。
逆に、同期の POST にしようと思ったら明示的に remote: false とする訳ですが、 Rails 5.1 で form_with に remote: false を書いても POST にならない。
調べてみると、local オプションというものになったようです
加えてどうやらデフォルトが ajax の様子。ちょっと引っかかりました。

とはいえ実態は data-remote に false を設定しているだけなので

のどちらで書いても同期のPOSTリクエストになります。


環境

  • macOS Sierra 10.12.6
  • ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
  • Rails 5.1.3


参考

2017/08/23

MoneyForward Meetup vol.12(Cashless Talk Night) に行ってきた

2017/08/22 に開催された MoneyForward Meetup vol.12(Cashless Talk Night) に行ってきました。
東京に来てから始めてのイベント参加かな。

MoneyForward のプレミアムユーザ + ヘビー(?)ユーザなのでどんな感じか軽く覗く程度の気持ちで行きました。
現時点で14サービス連携していた。結構使ってる方に入るのかな。そうでも無いのかもしれない。

Cashless の Cash は現金での支払いとかのことを指すようです。
そもそもお金という概念がー、みたいな話が聞けたらと思っていたのは内緒。
みんな現金についてどう考えていたり、どう Cashless 生活をしているのか、をお酒を飲みながらわいわい話そう、という会でした。
そういう点では思想が近い人が多かったかな。
現金面倒、とりあえずクレカで、みたいな。

普段の meetup は tech な話もするようですが今回はどっちかと言えば意見交換メイン。
グループワークで発表なんかもして学生気分していました。
ちなみに発表は良かったと褒められました。わーい。お世辞かもしれないけれどね。

VALU の話やビットコイン、Cash (写真取って査定できる方) とか Kyash、 Paymo とかの話が当然のように出ていて、流行を感じました。
私としてはとりあえず全部触ったことはあるのかな?
そういう意味では強烈に目新しいものは無かった。
ただ、それにも意味はあると思っていて、最近の流行りを軽くは追えている根拠になる。
流行りとかは場所の雰囲気で強烈に感じるものなので、感じ取れるだけ上々かな、と。

Fintech って単語がありますが、私自身は tech だけの人間。
話を聞くだけで帰るつもりでしたが、グループワークもあり、結構話した感があります。
そういう意味では若干 Finance の方に足を突っ込んでたりするのだろうか。NISAとか開設したし。不労所得欲しい。
私の情報源は MoneyForward のコラムだったりするので、中の人たちと話ができるのは当然と言えば当然かもしれない。

でもやっぱりクラスタに違いはあって、アカウント名(あっとん)で参加登録しているのは私だけでした。みんな本名。
名刺も渡したのですが、アカウント名義の名刺なので並べたら浮くはず。
あとイベントの参加率は登録人数に対して少なかったのかな?
とりあえず登録するだけする人がいる、みたいな話はTLで目にしたことはあるが実在していたのか。

フリーランスになったので、イベントで営業とかするべきなのかもしれないけれど特にしなかったかな。
軽く名刺渡す時にフリーランスですと名乗りはした。
ちょっと愉快だったのが、受付で滞在時間などを書く紙があったて、その欄に所属会社が必須項目として存在していた。でも書けないので白紙で出した。
あとは名刺交換していたら前職の人がいた。世の中は狭い……

という感じで話をしながらただ飯を食べてきたのでした。ありがとう MoneyForward さん。ごちそうさまでした。

2017/08/15

GitHub のアカウント名を atton にしてもらった話

GitHub のアカウント名は前々までは atton- だったのですが、atton-.github.io が URLとして認識されづらい問題があったので変更をお願いしてみました。

GitHub には Name Squatting Policy なるものがあり、名前を取るのは早いもん勝ちだけれど流石に使ってない奴に名前を使われ続けるのも何なので、全然使われてないアカウントなら消してあげるよ、みたいなもののようです。

参考にもあるようにテキトーに英文をちょちょっと書いて送る。
実名も載せたのでここでは公開できませんが、

  • atton github で検索すると私が出る
  • 他のサービスでも私がだいたい atton として通っている
と主張してみたらものの1時間くらいであっさり開放してくれました。
その後は名前変更から atton に変更してしまっておしまい。
ということで使いやすい atton.github.io が使えるようになりました。やったね。
しかし、このブログから参照していたURLが404になる可能性もあるのでその辺りは補完して欲しいです。


参考

2017/07/31

株式会社ドワンゴを退職します

まさかこんなに早く退職エントリを書くとは。
表題の通り、株式会社ドワンゴを退職します。

いろいろと働くことについて考えることが増えたため、一旦辞めて整理をしようと思い、辞める流れとなりました。
何度も相談にのってくれた上長、自分と長く話して思考の整理を手伝ってくれたメンターさん、これからの将来について相談してくれたmesoさん、仕切り直しを提案してくれた人事さんには感謝しています。
これだと何か強制操作されて良いイメージだけ書くようにしてるみたいですが、そんなことはもちろん無いです。

まー書けないような複雑な事情とかもあって、人生相談みたいなことをされたり、心配されたり、後押しされたり、無反応だったり、といろいろありました。
そのあたりも含めて話をしてくださったみなさんには感謝しかありません。
いろいろと考えた結果、一度はおもしろそうな方向にサイコロを振りたくなったのです。

ということで宣伝をば。
しばらくは東京でフリーランスのエンジニアとして活動していこうと思います。
なので

  • リモートワークのお仕事を依頼したい
  • リモートワークのお仕事を一緒にやって欲しい
  • 社員として雇いたい
  • 養いたい
といったことがあれば、おいしい御飯の奢りと一緒ならお話を伺います。
ちなみに Rails とか書けます。その辺りのスキルは github.io にまとめてあります。

色々とありますが、おもしろいことになれば良いな。の一言です。

最後に、退職エントリ恒例の欲しいものリストを貼っておきます。
この記事を書いた段階ではレビュー待ち状態なので無理ですが、 VALU で直接支援してくれても喜びます。


それでは、ありがとうございました&これからもよろしくお願い致しします。

2017/07/21

Laravel 5.1 の quickstart を Laravel 5.4 で実行する

Laravel には tutorial 的な quickstart があるのですが、ドキュメントは 5.1 までしか提供されていない。
5.4 の tutorial 的なものは laracast という形で動画で提供されています。
動画を見てコードを書くのが性に合わなかったので 5.4 で 5.1 の quickstart をやってみたログ。
ちなみに作るものは所謂 TODO リストというやつで、よくチュートリアルで作るやつですね。
index, create, delete があるだけ、って感じ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • PHP 5.6.30
  • Laravel 5.4.22
  • Apache httpd 2.4.26


5.1 -> 5.4 変更点

具体的な変更点は実は1つしかなくて、Routing の `app/Http/routes.php` の内容を `routes/web.php` に置くだけ。
どうやら Laravel 5.4.22 は api/web/console/channel ごとに routes を分けられる構成になっているっぽい。
書いてて思ったけれど割とモダン。
OR-mapper も extends するだけて使えるタイプっぽいし。
個人的には Routing 部分に処理が出てきたりするのは Sinatra っぽいな、と感じました。
あと html template の名前が blade でかっこ良い。が、宿命的に書きづらい。
ということで作った Repository はこちら。5.4 環境でも何ら問題無く動きます。



Apache 2.4.26 で動かす

Apache 2.4.26 で動かすためには `public` を DocumentRoot にする必要があります。
例えば
DocumentRoot "/home/atton/quickstart/public/"
<Directory "/home/atton/quickstart/public/">
とか。 permission もきちと整えておくこと。
あと DirectoryIndex は index.php にしておいた方が良いかも。
それと AllowOverride All と Requite all granted を書いておくこと必要があります。
加えて LoadModule rewrite_module modules/mod_rewrite.so をコメントインしておく。
.htaccess とかは Laravel が用意してくれるので問題無し。

さらに言えば、使うDatabase が MySQL なら MySQL の PDO が必要なので ./configure の段階で
  • ./configure --with-openssl --with-zlib --enable-mbstring --enable-zip --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
とかしておく必要があります。つまり前記事の段階ではオプションが足りていなかったってことですね。
ということで 5.1 の quickstart を 5.4 で動かしたログでした。


参考

2017/07/18

ActiveLDAP が Timeout Module を使っていた

かなり前の記事になりますが、ActiveLDAP が Process.fork を使っているせいで PostgreSQL との相性が悪いバグがありました。
具体的には Timeout を指定すると fork したプロセスを使って Timeout を確認しているせいで pg の connection を使いはたしてしまう、というのが原因でした。

本当に具合が悪い時は Ruby がコアダンプを吐いて死ぬ時もあったので、直してしまってRuby会議2017のLTネタ にでもしようと思って調査を続行。
最新版では再現しないのでソースを読んでみたらそもそも Process.fork をしていない。
Timeout というものに block を渡している
なんと Timeout なる Module があるようで、それに時間の処理を一任しているようです。

Timeout Module 知らなかった。
Timeout の処理って面倒なので自分が次に Timeout の処理を書くことがあったら使おうと思いましたまる。
ソース読むのはおもしろかったけれどネタが無くなってしまったな。どうしようかな。

2017/07/13

Scientific Linux 7 に NeoVim を入れる

これまたタイトル通りの作業ログ。
CheckHealth が通る NeoVim にプラグインを入れるまで。

環境

  • Scientific Linux release 7.3 (Nitrogen)
  • NeoVim 0.1.7


インストール方法

NeoVim 公式ドキュメントを見るとどうやら epel から入れられるっぽい?
  • # yum -y install epel-release
  • # curl -o /etc/yum.repos.d/dperson-neovim-epel-7.repo https://copr.fedorainfracloud.org/coprs/dperson/neovim/repo/epel-7/dperson-neovim-epel-7.repo
  • # yum install --enablerepo=epel jemalloc
  • # yum -y install neovim
で NeoVim 0.1.7 が入った。


CheckHealth を通す

どうせなので CheckHealth が通るように gem とかを入れる。
  • # yum --enablerepo=epel install -y python-neovim msgpack msgpack-devel ruby ruby-devel python2 python2-devel python34 python34-devel python34-pip
  • # gem install neovim
  • # easy_install pip
  • # pip install neovim
  • # pip3 install neovim
これで CheckHealth で怒られなくなった。


dein.vim を入れる

NeoVim に移った際にプラグインマネージャを dein に変更したのでそれのインストールも。公式の通り
  • $ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
  • $ sh ./installer.sh ~/.config/nvim
としておしまい。
あとは :call dein#install() として他のプラグインをインストールして環境構築完了、と。

2017/07/12

PHP 5.6.30 + Laravel 5.4 の環境を整える

タイトル通りな環境を作った時のログ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • composer 1.4.2
  • PHP 5.6.30
  • Laravel 5.4


PHP の再ビルド

最初からネタバレ全開でいくと、前回入れたPHPでは Laravel は動きません。
openssl や zlib や mbstring や zip が必要らしい。なので正解な最小の config は
  • ./configure --with-openssl --with-zlib --enable-mbstring --enable-zip --with-apxs2=/usr/local/apache2/bin/apxs
っぽい。こいつで再 make + make install



Composer を入れる

Laravel 公式の Installation を見ると composer という package manager を使うと良いらしい。
書かれている通りに
  • $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  • $ php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
  • $ php composer-setup.php
  • $ php -r "unlink('composer-setup.php');"
とすると composer.phar なるファイルが直下にできる。
これが package manager の実行ファイルっぽい。
適当な場所に放置して大丈夫かと思っていたら /usr/local/bin とかに置くと良いっぽい。
  • # mv composer.phar /usr/local/bin/composer
これで package manager が入った。


Laravel を入れる

composer が入ったのであとは
  • $ composer global require "laravel/installer"
する。
ログに "Changed current directory to /home/atton/.config/composer" とか出ているので config は $HOME/.config/composer あたりに書かれるらしい。
その下を漁ってみると .config/composer/vendor/bin に laravel があるのを発見したので
  • export PATH=$HOME/.config/composer/vendor/bin:$PATH 
とかして PATH に追加。これで laravel が使えるようになった。試しに
  • $ laravel new blog
すると blog が生成されたので動いているっぽい。


参考

Apache Solr 6.6 を Scientific Linux 7.2 にインストールする

表題の通り。インストールしたログです。あとちょっと遊んだログ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • Apache Solr 6.6


インストール

  • # yum install -y java
  • # wget http://ftp.jaist.ac.jp/pub/apache/lucene/solr/6.6.0/solr-6.6.0.tgz
  • # tar xzf solr-6.6.0.tgz
  • # solr-6.6.0/bin/install_solr_service.sh solr-6.6.0.tgz
でおしまい。service にも systemctl にも登録されている。便利。


チュートリアル

QuickStart が用意されているので遊んでみる。
xml とか json とかのデータを食わせることができて、それらを検索できるっぽいです。
  • # systemctl start solr
しておいて
  • $ /opt/solr/bin/solr create -c gettingstarted
とかでコレクションを作る。コレクションに情報を集約する感じかな。
ちなみに root で bin/solr create とかすると怒られる。
su - solr するとデータのディレクトリとかがあるので、ここにデータが入るのだろう。

QuickStart を参考に
  • /opt/solr/bin/post -c gettingstarted /opt/solr/docs
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/*.xml
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/books.json
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/books.csv
とかでデータを食わせる。食わせたデータは RESTful に検索できるとのこと。

ということでいろいろと検索してみる。
  • $ curl "http://localhost:8983/solr/gettingstarted/select?indent=on&q=*:*&wt=json"
    • でとりあえず何にでもマッチするクエリを投げる
    • 検索は key:value ってフォーマットらしい
    • なので *:* はなんでもマッチする感じですね
  • $ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation"
    • で "foundation" を含むデータを探す。
    • 返ってくるデータの形式は json
    • たぶん json 以外にも対応している
  • $ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation&fl=id"
    • 返すフィールドを id のみに制限。
    • fl が field の略か。
とかとかいろいろあるらしい。

ブラウザからもアクセス可能でその場合はデフォルトだと 8983 番で listen している。
マルチバイト文字の扱いが地味に気になるがその辺りも対応しているのなら便利そうだ。
でも始めて聞いたな Solr 。界隈では有名なのだろうか。


参考

2017/07/07

Redis 3.2.x を ScientificLinux 7 に入れる

表題の通り。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • Redis: 3.2.9


インストール

  • # wget http://download.redis.io/releases/redis-3.2.9.tar.gz
  • # tar xzf redis-3.2.9.tar.gz
  • # cd redis-3.2.9
  • # cat INSTALL
    • see README とある
  • # make
    • いきなり make で良いらしい
    • あと make test してね、と
  • # make test
    • tcl が無いとテストしてくれないらしい。
  • # yum install -y tcl
  • # make test
    • 通った
  • # make install
    • /usr/local/bin/redis-server とかに入っている。
    • redis-cli が  client かな


systemd 管理下に置く

どうやら init.d 用のスクリプトはあるらしいが systemd の unit  は無いっぽい。
それはともあれ install_server.sh があるので設定くらいは置いて欲しいので実行


service は当然無いので abort したが /etc/redis/6397.conf とかは作ってくれた。
作られた conf を適当なところに置いて service ファイルを書く。

  • # mv /etc/redis/6397.conf /etc/redis.conf
  • # rm -rf /etc/redis
  • # vi /usr/lib/systemd/system/redis.service
  • # systemctl daemon-reload
  • # systemctl start redis
で動いた。
ちなみに --daemonize no を消すと起動してくれなかった。


参考

MySQL 5.7.x を rpm から入れる

タイトルの通り。MySQL 5.7 系の最新版を rpm から入れます。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • mysql-5.7.18


インストール方法

今回は結構シンプルで、公式 が rpm を提供しています。
今回必要なのは mysql-client と mysql-server なので、この二つとその依存先を入れます。
rpm -i した時に依存先が無いよって怒ってくるので、そのあたりを察すると良いです。
  • $ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
  • $ tar xf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
  • # rpm -i mysql-community-common-5.7.18-1.el7.x86_64.rpm
  • # rpm -i mysql-community-libs-5.7.18-1.el7.x86_64.rpm
  • # rpm -i mysql-community-client-5.7.18-1.el7.x86_64.rpm
  • # rpm -i mysql-community-server-5.7.18-1.el7.x86_64.rpm
くらいで。


MySQL を使う

まずは起動。 systemd 登録とかしてくれるので楽だ。
  • # systemctl start mysql
公式によれば
  • # grep 'temporary password' /var/log/mysqld.log
すれば temporary password があるのでそれを使ってログインしろ、と
  • # mysql -u root -p
先程 grep したパスワードを入れてログイン。パスワード変更のために
  • mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'hogehoge';
とかする。結構パスワード強度に厳しい。
これで MySQL 5.7.x が使えるようになった。
チュートリアルとかも充実しているのでサポート強い。


参考

2017/07/06

php 5.x + apache httpd 2.4.x を make する

php 5.x 系の最新版と httpd 2.4.x 系の最新版を make したログ


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • Apache httpd 2.4.26
  • php 5.6.30



httpd 2.4.26 の make

  • # yum install -y wget apr apr-devel apr-util apr-util-devel gcc pcre pcre-devel perl perl-devel libtool libtool-devel systemd-devel
  • # wget http://ftp.tsukuba.wide.ad.jp/software/apache//httpd/httpd-2.4.26.tar.gz
  • # tar xzf httpd-2.4.26.tar.gz
  • # cd httpd-2.4.26
  • # ./configure --enable-rewrite
    • とりあえず rewrite くらいで。
    • 必要なものは ./configure --help にあるものから確認して追加していけば良い
  • # make
  • # make install
ちなみに /usr/local/apache2 の下に bin とかが入ります。


httpd を systemd 管理下に置く

このままだと起動するのが面倒なので systemd 経由で起動できるように。
この記事を参考に service を作る。
私は apr も apr-util も pcre も yum にあるものを作ったのでこんな感じ。


こいつで systemd に認識させてやるといつも通りの
  • # systemctl status httpd
  • # systemctl start httpd
とかできるようになります。

  • $ curl http://localhost
して It Works! が出たら httpd が動いています。



php 5.x を make する

  • # yum install -y libxml2 libxml2-devel
  • # wget http://jp2.php.net/get/php-5.6.30.tar.gz/from/this/mirror -O php-5.6.30.tar.gz
  • # tar xzf php-5.6.30.tar.gz
  • # cd php-5.6.30
  • # ./configure --with-apxs2=/usr/local/apache2/bin/apxs
    • ポイントはここ。
    • libphp5.so を作るために apx を指定します。
    • これを書いておくと httpd.conf で LoadModule できる場所に libphp5.so ができる。
  • # make
  • # make test
  • # make install
これで php が入りました。
/usr/local/apache2/modules/libphp5.so とかができているはずです。


httpd に php を認識させる

両方とも make できたのであとは設定。
httpd の DocumentRoot はデフォルトでは /usr/local/apache2/htdocs/ なので
  • # vi /usr/local/apache2/htdocs/hoge.php
    • <?php phpinfo() ?>
    • とか。
  • # vi /usr/local/apache2/conf/httpd.conf
    • LoadModule php5_module modules/libphp5.so
    • <FilesMatch \.php$>
    •     SetHandler application/x-httpd-php
    • </FilesMatch>
    • あたりを追記。
    • LoadModule は勝手に追記されてたりします。
  • # systemctl restart httpd
  • $ curl http://localhost/hoge.php
大量の html が流れてきたら php が動いています。
ブラウザからアクセスすると php の情報が見られるはずです。やったね。



参考

2017/07/05

rpm を tar.bz2 や .spec ファイルからビルドする

rpm ファイルをビルドする機会があったのでそのログ。


環境

  • Scientific Linux release 6.8 (Carbon)
  • rpmbuild 4.8.0(たぶん)
  • httpd 2.4.26
  • distcache 1.5.1


tar.gz ファイルから直接ビルドする

アーカイブ内部に *.spec ファイルがある場合は直接 rpmbuild で指定できます。
  • $ wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.26.tar.bz2
  • $ rpmbuild -tb httpd-2.4.26.tar.bz2
/root/rpmbuild/RPMS 以下に .rpm ファイルが作成されます。
アーカイブ指定の時は -tb オプション。


.spec ファイルからビルドする

アーカイブに *.spec が無かったりする場合もあります。
その場合は *.spec ファイルを作ってそれを指定してビルドします。
例えば distcache 1.5.1-1 の spec ファイルはこちらのブログ にサンプルがあります。
*.spec ファイルから rpm を作る場合は SOURCES に必要なソースを配置します。
  • $wget https://downloads.sourceforge.net/project/distcache/1.%20distcache-devel/1.5.1/distcache-1.5.1.tar.gz
  • $ mv distcache-1.5.1.tar.gz ~/rpmbuild/SOURCES/
  •  wget -O /root/rpmbuild/SOURCES/distcache-1.5.1.patch https://ja.osdn.net/users/matsuand/pf/LFScripts/scm/blobs/master/BLFS/patch/distcache-1.5.1.patch?export=raw
  • $ rpbuild -bb distcace.spec
スペックファイル指定の場合は -bb オプション。

rpm のインストール

rpm -i とか。消す時は rpm -e。
リストは rpm -aq とかなので rpm のオプションは結構素っ気無い感じ。


参考文献

2017/07/03

NeoVim に移行した

そろそろ NeoVim に移行したいなー、と思っていたので気合を入れて移行しました。


環境

  • macOS Sierra 10.12.5
  • NeoVim 0.2.0
  • Homebrew 1.2.3-121-gb5529084
  • Homebrew/homebrew-core (git revision 72126; last commit 2017-07-02)
  • tmux 2.5 + EastAsianAmbiguous Patch


やったこと

まずは neovim の install 。
  • brew tap neovim/neovim
  • brew install neovim
くらいで。

その後は NeoVim の CheckHealth が通るようにいろいろと。
  • tmux.conf の default-terminal を screen-256-color に変更
  • gem install neovim
  • python2 を入れて easy_install neovim
  • python3 を入れて pip3 install neovim
とかとか。自己診断機能便利。

次に .vimrc の移動。
neovim はデフォルトで ~/.config/nvim/init.vim を読みにいくのでそこに元の .vimrc を配置。
.vimrc は source ~/.config/nvim/init.vim を見るようにした。
それからプラグインの変更。
  • NeoBundle から dein へ
  • neocomplete から deoplete へ
  • Unite から Denite へ
Unite 以外はそんなに問題無く移行できました。
Unide は file_rec のオプションとか grep のオプションとかを denite 用に書き直す。
あとは自作していた unite command を denite に対応させる。
help が充実していてありがたいですね。流石は暗黒美無王さん。

とかなんとかしていたgitのログはこの辺からこの辺までかな。


まとめ

移行にかかった時間は合計して丸一日くらい?
file_rec が超高速になったのでうれしい。
Unite とちょっと使い勝手が違うけれど、その辺りも変更するオプションがありそう。
help の example が大変ありがたかった。
あと先人の知恵は貴重だった。質問に高速で返答が来るのはありがたい。

ということで Vim から NeoVim へと移行しました。

2017/06/22

blogger を https 対応させる

タイトル通り。 自分のブログのポストを見たら http だったので今の時代これはまずいなー、と。

どうやら http -> https のリダイレクトもしてくれるようなので設定しない手は無い。
blogger > 設定 > 基本 > HTTPS > HTTPSリダイレクト にチェックを入れる。
これで https 対応とリダイレクトもしてくれる。便利。

参考

Jenkins でビルドの情報を Slack に投稿する

Jenkins ネタでもう一つ。
ビルドの開始や失敗、成功を Slack に流したくなったのでそのログ。


環境

  • CentOS Linux release 7.0.1406 (Core)
  • Docker version 1.12.6, build 1398f24/1.12.6
  • Jenkins ver. 2.46.3
  • Slack Notification Plugin 2.2


構築方法(Slack)

  • Slack 側の Add Integration で Jenkins を指定
  • 通知させたいチャンネル名を指定
  • 発行された token をコピーしておく


構築方法(Jenkins)

  • Manage Jenkins > Plugin Management > Available
    • Slack Notification Plugin をチェック
    • install without restart 
  • Manage Jenkins > Plugin Management
    • team subdomain: 通知したい Slack の subdomain
    • 例えば hoge.slack.com なら hoge
    • Integration Token は先程コピーした  token で
    • Channel は通知したいチャンネル
    • Is Bot User ? にはチェックを入れない
  • Test Connection できちんと Slack にポストされていれば設定はOKです


構築方法(Jenkins Project)

  • 通知させたい Project の Configure を開く
  • Post-build Actions
    • に Slack Notifications を追加
    • 通知させたいイベントにチェックを入れる
  • Project > serval > Post-build Actions > Advanced
    • は特別設定しなければ先程のグローバル設定が使われるので空白で良いです
    • 私は Notification message includes を commit list with authors only に設定しました


まとめ

この設定をすることで  Jenkins がビルドした時に Slack へ通知が行なわれます。
今回面倒だったこととしては、 Is Bot User? にチェックを入れていた時、Test Connection ではきちんと通知がされるのに、ビルドした時だけは通知がされないという絶妙な状態になることがありました。どうしてチェックを入れたらダメなのだろ。


参考

2017/06/20

Docker で古いコンテナとイメージを消す

Docker で適当にコンテナを作っていたり、CI とかをしていると使われなくなったコンテナが大量に積もっていきます。
それを適当に消したのでそのメモ。


環境

  • CentOS Linux release 7.0.1406 (Core)
  • Docker version 1.12.6, build 1398f24/1.12.6


コマンド

  • docker ps -aq | tail -30 | xargs  docker rm
基本的には古いものから消していく方針で。
images の option で -q を付けると hash だけを出してくれます。
あと -f で特定の条件のみで絞りこみをしてくれるようです。
  • docker ps -qaf "status=exited"
とかすると止まってるのだけ出してくれる。
動いてるコンテナは -f を付けない限り消さないので、 とりあえず全部 rm に渡してしまうのもありかも。

あとはイメージを消すだけです
  • docker images -aq | xargs docker rmi
こいつも使われているイメージは -f を付けない限り残してくれる。
なのでとりあえず消せそうなもの全部消そうとしてみる、とか可能です。

  • docker images -qf dangling=true
とかでタグが付いていないイメージだけを対象にする、というコマンドが参考記事にありましたが、今回はタグが付いているイメージもあるので -aq で。


まとめ

  • docker ps -aq | xargs  docker rm
  • docker images -aq | xargs docker rmi
とかでとりあえず起動していないコンテナ以外消えます。
新しい docker だと docker image prune とかあるらしいのでもっと楽かも。


参考文献

2017/06/13

Volume 指定を忘れた Docker からデータを取り出す

Jenkinsをたてた時、最初はボリュームを指定せずに docker run していました。
後からポートフォワードを追加しようと思って、一旦イメージを commit 。
そのイメージにオプションを追加して起動しても Jenkins が初期化されている。

どうやらボリュームを指定していないとどこかにボリュームを勝手に作るらしい。
なので今まで作業していた分を commit してもコンテナに反映されない。
ということでどこかに作られたボリュームを探せればデータを復旧できそう。

  • docker inspect <container-name>
するといろいろ出てくるがその中に怪しいものが。
Mounts の Source にパスがあるのでこいつっぽい。

  • cp -r /var/lib/docker/volumes/98ef888300af713d65b6d7534d835c7bd2e95270ad5eb016da749bbbb5f6d409/_data hoge
  • docker run -itd -P -v /foo/bar/hoge:/var/jenkins_home jenkins
とかすると復活。やったね。

環境

  • CentOS Linux release 7.0.1406 (Core) 
  • Docker version 1.12.6, build 1398f24/1.12.6

GitHub に push された時に Docker 上の Jenkins から SSH 越しでコマンドを実行する

長いタイトルですがやりたい事は以下です。

  • Jenkins 経由でデプロイ
  • デプロイするタイミングは GitHub の master が更新された時
  • Jenkins は Docker で起動しておく
  • デプロイに使用するコマンドは SSH 経由で本番サーバに適用

さて、タイトル通りややこしい状態なので記事もだいぶ読み辛いものになりそうです。


環境

  • CentOS Linux release 7.0.1406 (Core) 
  • Docker version 1.12.6, build 1398f24/1.12.6
  • Jenkins 2.46.3


Docker でやること(Jenkins を起動する)

  • docker run -itd --privileged --name kaban -v /hoge/fuga:/var/jenkins_home -P jenkins
    • これで Jenkins が立ち上がります
    • --name で名前を付けておくと楽です。とりあえずかばんちゃんです。
    • Jenkins はデータの永続化のためにボリュームを使っています
    • 適当なディレクトリを /var/jenkins_home にマウントしてください
    • Jenkins は uid 1000 なので chown 1000 -R <dir> などをしておくと良いです
    • もしくは chmod で適切な permission を与えてください
    • -P でポートマッピングを適当にやってもらいます。
  • docker exec -it kaban cat /var/jenkins_home/secrets/initialAdminPassword
    • 後で Jenkins を起動した際に要求される初期パスワードです。


Jenkins でやること(初期設定)

  • docker ps をして、8080 がどのポートに割り当てられているか確認します。
  • ブラウザから Jenkins にアクセスします (http://localhost:32769 とか)
  • まず初期パスワードを使って Jenkins を起動します
  • 適当に Install Suggested Plugin を選択します(これに Github Plugin とか入ってたので)
  • 管理者ユーザを作ります
  • Manage Jenkins > Manage Plugins から Available > Publish over SSH を選択します
    • Publish over SSH プラグインを使ってデプロイします
  • Install without restart で Publish over SSH を入れます
  • Configure System > Publish over SSH でデプロイ用サーバに SSH できる設定をします
    • SSH Servers > Add でサーバを追加します
    • Name や Hostname や Username 、 Key か Password を設定します
  • これで土台ができました。


GitHub でやること

  • デプロイ対象のプロジェクトのリポジトリページに行きます
  • Settings > Hooks&Services > Add Service から Manage Jenkins(Github Plugin) を入れます
    • Git Plugin もありますが今回は GitHub Plugin なので間違えないように
  • Jenkins hook URL に Jenkins の URL を指定します
    • http://192.168.0.1:32769/github-webhook/ とかです
  • これで push された際に Jenkins へ通知がいきます。


Jenkins でやること(プロジェクトの設定)

  • New Project から Freestyle Project を作ります
  • GitHub Project に check をいれます
    • なので最初から GitHub Project で作っても良いかも?
    • Repository URL は GitHub の Project URL を指定してください
    • Branch Specifier は */master で良いです。 master に変更があった時のみにデプロイなので
  • Build Triggers で GitHub hook trigger for GITScm polling に check を入れます
  • Build で Send files or execute commands over SSH を指定します。
    • SSH Server は先程 Configure で追加したデプロイサーバを指定します。
    • Transfars: Exec command で SSH 後に実行したいコマンドを指定します。
  • これで完了です。 GitHub の master が更新されると自動で SSH 経由でコマンドが発行されます。


長い道のりでしたがこんな感じで。

ウィンドウマネージャの Spectacle.app を入れてみた

普段はデュアルディスプレイ環境での作業が多いのですが、最近はシングルディスプレイ環境での作業も増えてきました。
私は大体のウィンドウを最大化して使うので、基本 Terminal.app + ブラウザ で二つのディスプレイが埋まっています。
Terminal.app を透過させる手もあるのですが、ちょっと私には向かなかったです。
シングルディスプレイ環境だと、どうしてもウィンドウを切り替えまくる必要があって面倒です。
ということで、この際思い切ってウィンドウマネージャを入れてみました。
今回入れたのは Spectacle.app というやつです。 @_akiyoshiaki_ さんに教えてもらいました。


環境

  • macOS Sierra 10.12.5
  • Spectacle.app 1.2


導入方法

cask に入っているので
  • $ brew cask install spectacle
で導入できます。
あとはディスプレイを動かすことを許可させるために
  • System Preference > Security & Privacy > Accessibility
の Spectacle のチェックを入れます。


設定

私は基本的に二つの画面が見えたら良いので、画面を縦か横に二分割するアクションのみ設定しています。
具体的な設定としては以下のような感じ。 Cmd + 矢印を使っています。

  • Left half : Cmd + ←
  • Right half: Cmd + →
  • Top half: Cmd + ↑
  • Bottom half: Cmd + ↓
  • Full Screen : Cmd  + Enter

設定したものの、実際一番使うのは分割ではなく Full Screen だったりします。
この Full Screen は Mac の Full Screen とは別で、ウィンドウを画面いっぱいに表示する方の Full Screen です。
昔の Mac ではウィンドウの緑のボタンをクリックするとなるやつです。
Sierraだと option を押しながら緑をクリックするやつ。
とりあえずウィンドウを操作する手間を省けそうなのでしばらくは使ってみようと思います。

2017/06/08

GitHub Badge なるものを設定してみた

GitHub Badge なるものを設定してみた。

一応このブログの右側には私の各種アカウントを書いているのだけれど、リンクを列挙しているのみなのでちょっと素っ気無かった。
どこかのブログで Github Badge を使っているのを見付けて、単なるリンクより見栄えも良さそうなので使ってみることにしました。

ちなみにこういうものです。

どのリポジトリでも .DS_Store や swp ファイルを git に commit しないようにする

git init する度に .gitignore を設定するようにしているのですが、迂闊に git add . とかをして .DS_Store などの入れたくないファイルを git に commit してしまうことが何度も発生。

何回も発生するのなら対策しておこう、ということで、どの git リポジトリでも特定のファイルを ignore するようにしました。

とはいっても ~/.config/git/ignore に ignore するファイルを指定するだけ。
これでどのリポジトリでも .DS_Store などの指定したファイルが ignore されます。便利。

にしても ~/.config で書く流儀だと ~/.gitconfig はどう書いたら良いのだろうか。


参考文献

2017/06/02

tmux 2.5 を全角記号対応させる

2017/05/13 に tmux 2.5 が Release されていたので、2.3を全角記号対応させた時のパッチを 2.5 にも当てました。
tmux 2.5 の border-ascii + EastAsianAmbiguous を強制2幅 版です。

作業としては rebase のみでパッチそのものの変更点はありません。

環境

  • macOS Sierra 10.12.5
  • Homebrew 1.2.1-143-gdaa67886
  • Homebrew/homebrew-core (git revision cce65; last commit 2017-06-02) 
  • tmux 2.5 (hash だと ae2c5ad76852d6d2e2463e45b13fc8c15b66e4b7 )
  • utf8proc 2.1
  • フォントは Ricty

インストール手順

  • $ brew tap atton-/customs
  • $ brew install atton-/customs/utf8proc
  • $ brew install --HEAD atton-/customs/tmux

過去のバージョンが利用したい方は /usr/local/Homebrew/Library/Taps/atton-/homebrew-customs
 などにある atton-/customs/tmux の git repository から古いバージョンを checkout してください。
他にも昔のバージョンを参照する方法はあると思いますがちょっと把握していません。

2017/04/22

tmux 2.4 を全角記号対応させる

2017/04/20 に tmux 2.4 が Release されていたので、前回の記事に書いたパッチを 2.4 にも当ててみました。
tmux 2.4 の border-ascii + EastAsianAmbiguous を強制2幅 版です。

作業としてはは rebase したただけなので修正点は全くありません。

環境

  • macOS Sierra 10.12.4
  • Homebrew 1.1.12-40-g02f018933
  • Homebrew/homebrew-core (git revision 5559; last commit 2017-04-15)
  • tmux 2.4 (正確には 2.4リリース以降の fd13731049148d0205fa6ed1843041dad0573677)
  • utf8proc 2.1
  • フォントは Ricty

インストール手順

  • $ brew tap atton-/customs
  • $ brew install atton-/customs/utf8proc
  • $ brew install --HEAD atton-/customs/tmux


atton-/customs/tmux の formula は HEAD build しか対応していないので、もし 2.3 のパッチ版が使いたい場合は tap したリポジトリを巻き戻すことで 2.3 が使えるはずです。
おそらくもっと楽な巻き戻し方があると思いますが、個人的には最新しか使っていないので調べていません。

2017/04/16

tmux 2.3 を全角記号対応させる

tmux 2.3 をちょっといじって全角記号の幅を2にした版を作ってみました。


環境

  • macOS Sierra 10.12.4
  • Homebrew 1.1.12-40-g02f018933
  • Homebrew/homebrew-core (git revision 5559; last commit 2017-04-15)
  • tmux 2.3 (正確には 2.3リリース以降の 640666fb36d7465b188f9d0bedc83ad60b83a1d7)
  • utf8proc 2.1
  • フォントは Ricty



状況

tmux を使っていると ─(U+2500) や(U+25bd) な文字の幅が半角扱いになってしまい、表示がおかしくなる時があります。
例えば、画面を縦2つに分割すると



のように線が何故か二本表示されたり、記号の表示が変になってしまいます。

これは分割に使用されている文字(─)の幅の扱いを tmux が勘違いしているために起こる問題です。
─ といった記号は EastAsianAmbiguous といった種類に区分され、言語圏によって文字幅が違います。
例えば英語圏では基本的に使う文字幅は1なので ─ の幅は1ですが、日本語圏では全角が基本なので文字幅は2となります。
この問題に関しては https://github.com/hamano/locale-eaw などが詳しいです。


解決法

これは Terminal の設定と locale の設定とフォントに依存するので解決方法はいくつかあります。
今回は
  • Terminal は EastAsianAmbigous を Full-Width にしている
  • フォントは日本語フォント( EastAsianAmbiguous は幅2)
  • locale には依存しない (en_US.UTF-8 でも ja_JP.UTF-8 でもOK)
の時を想定しています。
具体的には tmux が文字幅の取得に使っている utf8procちょっといじって、EastAsianAmbiguous の幅を強制的に2にしています。
あと、画面分割に使う文字を ascii にしています。


インストール方法

formula にしてあるので

  • $ brew tap atton-/customs
  • $ brew install atton-/customs/utf8proc
  • $ brew install --HEAD atton-/customs/tmux
でインストールできます。
縦に分割した時に


のようにきちんと線が1本になるはずです。



まとめ

強制的に EastAsianAmbiguous の幅を2にして日本語フォントとの相性を良くしました。
実はこれは対処療法的な解決案で、根本的な解決ではありません。
その辺りは結構長くなると思うので書くなら別の記事で書きます。


参考文献