ソフトウェアデザイン2017年10月号でGit特集(の一部)を執筆しました

Git特集の冒頭で各種Gitサービス/パッケージの比較・紹介記事を執筆させていただきました。

中でもGitHub、GitLab、Bitbucket、GitBucketについて少々詳しく掘り下げさせていただいているのですが、Software Designさんの表紙にGitBucketの文字を載せていただけるとは感無量です。

Git関連のサービスは日頃ウォッチしているので情報をまとめる良い機会になりましたが、これらのサービスは動きもそれなりに早いのでなかなか難しいところです。実際Bitbucketはつい先日Trelloのタスクボードの統合が発表されましたが、本稿には含めることができませんでした。ただ、各サービスの特徴は掴めるかと思いますので、特に業務でGitを導入する際にどのサービスを選択すべきかの参考にしていただければと思います。

なお、GUIのGitクライアントの紹介ではなくテキストエディタからGitを使用する方法が紹介されているのはSoftware Designさんらしいなと思うのですが、vimAtomが紹介されているにも関わらずEmacsが紹介されていないところに時代の流れを感じざるを得ません…。

MailCatcherでメール送信のテストをしてみる

昔メール送信のテストをするときはmocksmtpdというのを使っていたのですが、最近はMailCatcherというのがいいそうなので試してみました。

github.com

gemで簡単にインストールできます。

$ gem install mailcatcher

mailcatcherコマンドで実行するだけ。コンソールにSMTPサーバとWebブラウザ用のURLが表示されるので、アプリケーションからはこのSMTPサーバにメールを送信するように設定します。

$ mailcatcher
Starting MailCatcher
~~> ERROR: Something's using port 1025. Are you already running MailCatcher?
==> smtp://127.0.0.1:1025
==> http://127.0.0.1:1080

Webブラウザ用の画面ではこんな感じで受信したメールを確認できます。

f:id:takezoe:20170916104255p:plain

類似のものとしてNode.jsで動作するMailDevというものもあるみたいです。こちらは実際にメールを配送することもできるようです。

github.com

GistBoxがCacherという新サービスになるらしい

Gistをメーラーのようなインターフェースで管理できるということで一時期話題になったGistBoxがCacherというサービスにリニューアルしたそうです。現在のGistBoxは年内で使えなくなってしまう模様。

www.cacher.io

GistBoxはその名の通り、Gistのフロントエンド的なサービスだったのですが、CacherはWebアプリに加えてWindowsMacLinux用のデスクトップアプリケーションが提供されており、有料のオプションも存在するなどかなり気合いを入れて作られている様子です。無料プランも存在するのですが、作成できるプライベートなスニペットの数が15個までなどの制限があります。

CacherはGistのフロントエンドというわけではないようですが(GistBoxからデータを移行しない限り、既存のGistはCacher上にはインポートされない)、Cacherで作成したスニペットはパブリックなものであればGistにも同期されます。プライベートなものはGistには反映されないようですが、パブリックなものを途中でプライベートに切り替えても以前のものはGistに残ってしまうので注意が必要です。

編集時は裏で定期的にGistへの同期が走っているようで、気づいたらGistの変更ログが大変なことになっていました。うっかり編集中の内容がコミットされていることもあり得るので、パブリックなスニペットについても注意が必要そうです。自分はMarkdownの使えるメモ置き場としてGistを使うことが多いのですが、そういう使い方にはあまり向いてないように見えます。

GitHub社はあまりGistをやる気はないようなのでこういう代替サービスが存在する余地はあるのかもしれませんが(実際自分も良いGistフロントエンドがあれば使いたい)、Cacherに関しては現状ちょっと取り扱いが難しい印象です。いっそのことGistへの連携などは行わない方が使いやすいのではという気がします。

Scala関西Summit 2017に参加しました

9月9日(土)大阪で開催されたScala関西Summit 2017に参加しました。GitBucketもブロンズスポンサーとしてサポートさせていただきました。

f:id:takezoe:20170910103720p:plain

また、個人でも朝一のセッションで「Non-Functional Programming in Scala」というお話しをさせていただきました。日帰り参加だったので朝一の新幹線で大阪に向かったのですがなんとか遅刻せずに到着できました。よかった…。*1

www.slideshare.net

もちろんScalaを使う上でこういったプログラミングスタイルを積極的に採用すべきと思っているわけではないのですが、個人的にもっとScalaを使う人が増えて欲しいということでこのようなお話しをさせていただきました。実際にPredictionIOのコードを見ていても、varやミュータブルなコレクションが使われている箇所で「このチームではこのコードのほうが皆が理解しやすいのだろう」と感じる場面があり、そういう部分は敢えて残したりすることもあります。

様々なスタイルを選択できるのもScalaの特徴の1つだと思います。Scalaを使うから関数型プログラミングをしなくてはならないとうのではなく、チームやプロジェクトの目的や状況、将来の見通しなどを踏まえて最適なプログラミングスタイルを採用できるとよいのではないかと思います。また、これからScalaを始めるという方も、必要以上に壁を感じず気軽にScalaに触れてみていただきたいです。

Scala関西Summitは昨年に続いての参加となりますが、今年はCFPの応募が非常に多かったそうで昨年は2トラックだったところ3トラックでの開催でした。スタッフをされている関西Scala勢の方々にも応募を促していたそうです。東京ではWeb企業を中心にScalaを採用する企業が増えてきましたが、関西でももっと事例が増えるといいなと思いますし、こういったイベントがそのきっかけになるといいなと思います。*2

ところでエフコードさんがブースで配布されていた「nullけし」はよかったですねw がくぞ先生のジョインとあわせて非常にキャッチーなアイテムでしたw *3

スタッフの皆様、参加された皆様、お疲れ様でした。来年も楽しみにしてます!!

*1:朝起きれるか不安だったので前日早く寝たところ深夜2:30に起きてしまい、そのまま朝まで起きていました…。

*2:今回はトピックとしてはAkka Streamsの話が多かったかなと思います。

*3:ツイッターで「欲しい」とつぶやいたところ、誠に恐縮ながらがくぞ先生直々にいただくことができましたw ありがとうございました。

クローリングハックという本を書きました

同僚5名でここ1年くらい作業していた「クローリングハック あらゆるWebサイトをクロールするための実践テクニック」という書籍が翔泳社さんから発売になります。

クローリングハック あらゆるWebサイトをクロールするための実践テクニック

クローリングハック あらゆるWebサイトをクロールするための実践テクニック

「ハック」と言っても別に怪しいことが書いてあるわけではありませんw

クローラーの運用を通して世の中には一体どうやったらそうなるのか謎な挙動を示すサイトを見てきたわけですが、この書籍はクローラーを作る側にしろ、Webサイトを製作する側にしろ、理解しておくべき基本的なWeb技術について解説したものです。

HTTPメソッドをちゃんと使い分けよう、ヘッダやステータスをちゃんと返そう、セマンティックなHTMLを書こう、そしてクローラーはそれらを正しくハンドリングしよう、そのような基本的なことから、前述のような謎な挙動を示すサイトに対してはどのような対処をすれば大体うまくいくかということなどが書かれています。

最近はビッグデータ機械学習といった技術の発達もあり、ショットで動かす簡易的なものからサービス提供に不可欠なデータ収集のために運用される大規模なものまで、様々なシーンでクローリング、スクレイピングが用いられるケースが増えてきているように感じますが、この本には皆がルールを守って平和なインターネッツになるといいなという思いが込められています。

なお、翔泳社さんの販促サイトから予約購入していただくとcurlのよく使うオプションを12ページかけて解説した「curlの極意」という誰得な特典PDFがついてきますw

www.shoeisha.co.jp

今回の書籍は300ページほどですし5人で分担したので分量的にはそうでもない(はず)なのですが、いろいろ悩ましい事柄が多く、完成までだいぶ時間がかかってしまいました。なんとか形にすることができたのでひとまず肩の荷が降りたというところですが、歳のせいか書籍の作業が年々辛くなってきている実感があります。しばらくはのんびり休みたいです…。

ソフトウェアデザイン 2017年 09 月号

同僚のタナカジノ先生Software Design 2017年09月号でtmux特集を執筆していました。私にも見本誌を送っていただいたのですが、最近ちょうど業務でも開発に復帰してターミナルでの作業も増えてきたのでこの特集を読んでリハビリしようと思います。

ちなみにギークロイドさんでのタナカジノ先生のターミナル部連載を見て執筆をご依頼いただいたとのこと。世の中わからないものですね…。

mynavi-agent.jp

Scala関西Summit 2017で「Non-Functional Programming in Scala」という話をします

f:id:takezoe:20170625015539p:plain

今週土曜日に大阪で開催されるScala関西Summit 2017、GitBucketがスポンサーをさせていただいているのですが、スピーカーとしても「Non-Functional Programming in Scala」というタイトルでお話しさせていただきます。

前職から足かけ8年ほどScalaに取り組んできましたが、業務でもScalaを使える環境がそれなりに整ってきた反面「やはりScalaは難しい」という声を聞いたり、チーム内で「どこまで関数型プログラミングに寄せるべきか?」ということを考えるケースが増えてきました。また、OSS開発においても同様の課題を感じるケースがあり、今後のScalaのさらなる普及を考えた時、避けて通れない問題ではないかと考えています。

そんなわけで、今回は実際に私の感じた課題感を共有させていただいた上で、とある状況でScalaをどう使っていくべきか、関数型プログラミングを意識しなくてもScalaの良さを活かせるプログラミングスタイルの一例について自分なりにまとめてみました。今後のScalaの普及のために(コンパイル速度の改善以外に)何が必要なのか、是非一緒に考えてみていただければと思います。

まだ参加登録は可能なようなので、都合のつく方は是非ご参加いただければと思います!

summit.scala-kansai.org

日帰りで参加することにしたのですが、朝一のセッションなのでだいぶ早起きしないといけないのですが、果たして新幹線に間に合うよう起きられるだろうか…。