Umi Uyuraのブログ

プログラミング関連の作業ログ

GitHub PatchWork Tokyoにメンターとして参加させていただきました

9月に参加させていただいたGitHub Patchwork Tokyo、自分的にはとても楽しいイベントでした。

umi-uyura.hatenablog.com

上のツイートを見かけて、参加者は満員なのに、メンターはその時点で募集人数の半分くらいしか埋まっていなかったようだったので、 他のメンターを呼びに行く係 くらいにはなれるかもしれないと思って、参加させていただくことにしました。

まだ小さい子供がいる身としては、特に夕方以降の動ける時間が限られるため、なかなか週末のイベント等には参加しづらい状況なのですが、幸いにして10:30〜14:00という昼間の時間帯だったのもポイントでした。

会場も前回と同じ、dots.。

イベント&コミュニティスペース - dots.[ドッツ] in 渋谷

dots.はPatchworkのときにしか入ったことがないので、つまり自分がdots.に来るのも2回目なのですが、広いしキレイだしオシャレだしで、こういうイベントのときには本当に良いですね。

Scott Chacon氏

今回もGitHubのスタッフの方々も何名か参加されていて、その中のひとりで、GitHub共同創業者の Scott Chaconさん が開催の挨拶をされていました。

日本語勉強中とのことでしたが、喋り始めが「あのー」からだったあたり、すでにマスターされている印象。

イベント終了後、アイドルばりにツーショット写真の列ができていたのも、その人柄からでしょうか。

Git-it Electronの日本語化

前回同様、教材としてGit-it Electronが使われていましたが、今回はGitHubの日本人スタッフの ikeike443 こと池田さん が日本語訳を追加したバージョンが用意されていました。

ikeike443/git-it-electron

確かに前回私がやったときは、まず英語を読むのに苦労したので、これはとてもありがたい対応ですね。私のように英語が苦手な人でも、非常にとっつきやすくなっています。

メンターとして参加してみて

正直なところ、それこそ先日のPatchworkで始めてプルリクエストを出してみた程度のレベルのGit&GitHub力なので、どこまでサポートできるのか不安でした。

ただ、参加されている方はエンジニアばかりでもなく、むしろIT系の営業だったりデザイナーだったり、ふだんコマンドラインなど触らないような仕事をされているという方も多くいらっしゃり、課題の内容というよりは、最初の環境構築的なところでひっかかってしまうケース(特にWindows)なども多かったので、その辺りはフォローできたかな、と思います。

たまにGitの仕組みのような質問を受けて、変な汗をかきながらシドロモドロに答えたりしつつも、それでも一緒になって問題解決ができたりすると、やっぱり楽しいですね。

この日もランチタイムにはピザとドーナッツが振る舞われました。(ドリンクも無料で提供されました)

写真でもあれば良かったんですけど、そういう余裕はありませんでした。。。

青山学院大学 古橋大地教授

この日のゲストとして、オープンソースやオープンデータの意義などについて、 青山学院大学の古橋大地教授 のスピーチがありました。

古橋氏はOpenStreetMapの活動を率いていらっしゃる方でした。

OpenStreetMap Japan | 自由な地図をみんなの手に/The Free Wiki World Map

OpenStreetMapが目指しているのはオープンな地図情報ということで、商用利用や印刷・配布などに規約で制限がついてしまうGoogle Mapなどとは異なり、印刷も配布も商用利用も可能なものを作ることにあるそうです。

東日本大震災や2010年のハイチ地震のときなどにも、マッパーと呼ばれる方々の活動によって、震災発生後すぐに現地の道路情報が整備されていき、避難所の情報などを提供されたそうです。

この整備されていく様子を映像化したものを見せていただきましたが、とても圧巻でした。

また、OpenStreetMapの地図データ形式であるgeoJSONは、実はGitHubも対応していて、Gistでも良いのでgeoJSON形式のデータをあげると、GitHub上でマッピングされるそうです。これを利用して、OpenStreetMapのデータのやり取りなどで、GitHubを活用されているとのこと。

Mapping geoJSON files on GitHub - User Documentation

GitHub堀江さんの話によると、どうやらGitHubには地図オタクの方がたくさんいるそうで、こうした対応に一役買っているようです。

また、今後はオープンな空撮データ(OpenAerialMap)も作っていきたいということで、関連して以下のような活動もはじめられたようです。

ドローンで災害地を救え!世界初の救援隊「DRONE BIRD」始動(古橋大地(DRONE BIRD隊長)) - READYFOR (レディーフォー)

OpenStreetMapの存在は知っていたものの、こんな風に展開しているとは知らなかったので、とても興味深かったです。

最後に

GitHub PatchWorkは、とても楽しいイベントです。

今後も開催されるようなので、そのときはまたお手伝いなどさせていただければなーと思います。

f:id:umi-uyura:20151220001251j:plain

Apple Musicか、Google Play Musicか、それが問題だ

Apple Musicのお試し期間が終了して、シルバーウィークキャンペーン中に登録したGoogle Play Musicのトライアル期間の終わりも近づいてきたので、そろそろどちらかに決めないといけない時期に来ました。

umi-uyura.hatenablog.com

結論:Google Play Music

自分はGoogle Play Musicにすることにしました。

理由:とりあえず安い方にした

実は自分好みな楽曲の取り揃え的には、若干Apple Musicの方が分がある印象でした。

が、細かい差分を考慮しても、そもそもどちらにも聴いてみたい音楽が大量にあるんですよね。

であれば、自分がメインで使っている端末がAndroidですし、また10月18日までに登録したことで月額料金が780円で良いこともあり、当面は安く済む方を使っておこうと思った次第です。

YouTube Redも期待

(まだ日本では使えませんが)YouTube Redという、YouTubeに広告が入らなくなるサービスも、Google Play Musicを契約していると使えるらしい?ということなので、それも少し期待。

見始めると止まらないので、ふだんはなるべくYouTubeは見ないようにしているのですが、オフラインでバックグラウンド再生できるようになるのであれば、使ってみたい気がします。

音楽系以外でも、どうしても子供が騒ぐのを止めたい時などに、YouTubeにあるカーズの映像などを見せたりするので、いざというときのために、それをダウンロードしておくという使い方もできそう。

曲のアップロードも便利そう

これは、そもそものGoogle Play Musicが提供していた機能ですが、手元にある音楽データをアップロードしておくことで、同期できる様々なデバイス上で聴くことができます。

ストリーミングサービスとなったGoogle Play Musicには、すでに自分が持っているCDもあったりしますが、わざわざ取り込む手間が省けるので、こちらにあればそっちを聴けますし、まだ足りないものも多くあるので、そういったものは自分で取り込んでいたものをアップロードすることで、Google Play Musicアプリ内でまとめて管理できます。

今まで、メインで使っているXperia Z3には、Android File Transferで直接MP3を放り込んでいたのですが、Google Play Musicを経由させることで、楽曲の管理などもやりやすくなりました。

iTunesからも取り込むことができるようなので、そちらで管理していた人でも活用できそうですね。

AndroidApple Music

ギリギリ自分のトライアル期間中に公開されたのですが、正式版になる前にトライアルが終了してしまったので、最初のバージョンでしか使えませんでした。(その後、一度アップデートが入っているので、後述の問題は改善されているかもしれません)

Apple Music - Google Play の Android アプリ

ベータ版ということもあり、若干不安定なところは見受けられましたが、

UIはきちんとAndroidに最適化してきていて、これはわりと使いやすい印象でした。

あとAndroidユーザー的には、

  • ダウンロードした楽曲の保存先をSDカードにできない
  • 操作用のウィジェットがない

といったあたりが対応されると、より活用できるのかな、と思います。

伏兵、Amazon Prime Music

先日、突如発表されたAmazon Prime Music。

Amazonプライム会員であれば、追加費用なしで100万曲が聴き放題になるというサービス。

Amazon Prime Music

Amazonプライムは年額3,900円なので、月換算すれば320円。値段だけ見たら非常にお得なのですが、いかんせん楽曲のラインナップがありませんので、プライム未加入の自分には、あまり引きはなかったですね。

今のところはプライム会員向けのオマケという感じでしょうか。

Amazonプライムは動画の見放題サービスも始まったので総合的にはお得感はありますが、自分は会員ではないこともあり、現時点では候補にはなりませんでした。

ただ、Amazonミュージックで検索した結果に、Prime Musicで聴ける対象かどうかが表示される点は良いと思いですね。

f:id:umi-uyura:20151206235253p:plain

Apple MusicもGoogle Play Musicも、サービスの対象ではない楽曲やアーティストになると、突然iTunesGoogle Playのページに飛ばされたりするので、せめて飛ばす前に別途購入が必要なものなのかわかるようにして欲しいところです。

最近聴いているもの

学生時代にプログレッシブ・ロックというジャンルにハマったわけですが、それ関連の解説が豊富な OFFICE CHIPMUNK を見ながら、あの頃聴きたかったアルバムを物色しています。

超絶技巧やインプロヴィゼーションも好きですが、どちらかというとYESやRenaissanceなど、クラシカルなメロディでダイナミックな展開をみせるようなものが好きなんですけど、そんな中で、最近パワープレイ中なのは「CAMEL」。

プログレに詳しい方々からすれば、なぜ聴いていなかったの?という感じの有名ドコロですが、確かに昔一度「スノーグース」あたりを聴いた気がするのですが、その時は思ったよりインパクトがなかったんですよね…。

あらためて今回聴いてみると、ホント、なぜ今まで聴いていなかったというくらい、私が求めていたプログレ成分はこれだ!という感じでした。

とりあえず「蜃気楼(Mirage)」から始めて、「白雁(スノーグース)」「月夜のファンタジア(MOONMADNESS)」あたりを聴いています。

ミラージュ(蜃気楼)+4

ミラージュ(蜃気楼)+4

ザ・スノー・グース~白雁~(2013年ヴァージョン)(紙ジャケット仕様)

ザ・スノー・グース~白雁~(2013年ヴァージョン)(紙ジャケット仕様)

ムーンマッドネス~「月夜の幻想曲(ファンタジア)」+5

ムーンマッドネス~「月夜の幻想曲(ファンタジア)」+5

まとめ

この辺のCDを中古で買うとしても、安くても1枚1,000円前後はしてしまうので、その金額でこれだけの音楽を聴き倒せるのは、自分的にはとてもお得です。

また1年くらいしたら状況が変わっているかもしれませんので、他のサービスの動向も伺いつつ、楽しもうと思います。

Alloy with Jadeでincludeを使う

私は普段Titanium開発をする際、ViewをJade、StyleをStylusで書いています。

umi-uyura.hatenablog.com

今回、Viewの中でJadeの include を使ってみようとしたところ、上記のalloy.jmkだけではエラーになってしまうようだったので、少し修正してみました。

alloy.jmkの修正箇所

上記のalloy.jmkの中で、Jadeに関する処理をしている部分に、以下のように手を加えました。

  // jade
  event.alloyConfig.xml = [];
  wrench.readdirSyncRecursive(view_root).forEach(function(view) {
    if (view.match(/\.jade$/)) {
      event.alloyConfig.xml.push(view.replace(/\.jade$/, ".xml"));
      var jadeOption = {
        filename: path.join(view_root, view),                           // ←1.includeを使えるようにする
        pretty: (event.alloyConfig.deploytype === "development"),
        compileDebug: (event.alloyConfig.deploytype !== "production")
      };
      fs.writeFileSync(
        path.join(view_root, view.replace(/\.jade$/, ".xml")),
        jade.compile(fs.readFileSync(path.join(view_root, view)).toString(), jadeOption)(event));
    }
  });

  // Files that start with '_' ,
  // because is to use in `include` of Jade, it should be deleted here
  event.alloyConfig.xml.forEach(function(view) {                        // ←2.include済みXMLは削除しておく
    if (view.match(/^_\S*.xml$/g)) {
      fs.unlinkSync(path.join(view_root, view));
    }
  });
  // ~jade

ポイントは2箇所あります。

1.includeを使えるようにする

はじめ、include を使ってみたところ、 the "filename" option is required to use "include" with "relative" paths というエラーが出力されました。

index.jade

Alloy
  Window
    include ./_index_body.jade

_index_body.jade

Label Hello, World

どうやら、 include で取り込む対象ファイルを相対パスで指定するためには、Jadeコンパイル時に filename を指定する必要があるようでした。

そこで、上記の 1. の部分のようにパスを取得し、 jade.compile のオプションとして渡すようにしたところ、コンパイルが通るようになりました。

2.include済みXMLは削除しておく

上記の問題は解決されたのですが、次にAlloyコンパイル時に、include済み.jadeを.xmlに変換したファイル(上記の例では _index_body.jade )がエラーになってしまうようになりました。

includeされるファイルは、includeした方の.xmlに取り込まれる形になるため、Alloyコンパイル時には不要なものなのですが、プロジェクトのviewフォルダ内にある.xmlは全てコンパイル対象となるからです。

そこで、Alloyコンパイルする対象を分別するために、以下のようなルールを設けることしました。

  • includeするファイルは、ファイル名を _ で始める

そして、alloy.jmkに 2. のコードを追加しました。

これは、ひととおり.jadeをコンパイルした後で、ファイル名に _ が付いている.jadeについては、対応する.xmlを事前に削除するというものです。

これにより、Alloyコンパイル時にはinclude済みの.xmlは存在しないため、エラーは発生しなくなります。

alloy.jmk全体

上記の修正をしたalloy.jmkです。

Alloy with Jade & Stylus, and Stylus Extend Notati ...

ついでに、JadeとStylusを設定して、 include を使っている状態のサンプルプロジェクトです。

umi-uyura/AlloyJadeStylusExam

まとめ

Alloy XMLには Require という仕組みがありますが、この場合、あるViewに別のViewを連携するような感じなので、コントローラが分離されるなど、データのやり取りなどが複雑になってしまう場合があります。

Jade側でincludeする仕組みでは、include対象を取り込んだXMLを生成することになるため、同一のViewやコントローラ内で扱える点が便利かな、と思います。

何か使いドコロがあれば、使ってみようと思います。

パーフェクトJavaScript

パーフェクトJavaScript

Titaniumでオブジェクトの中身をダンプする

普段Emacs + Titanium(Appcelerator) CLIで開発をしているのですが、少し不便なのが、デバッグのときにオブジェクトの中身を確認したいとき。

Appcelerator Studioなら、ステップ実行しながらオブジェクトの中身をGUIで確認できたりするわけですが、わざわざエディタと別にStudioを開いておくのも面倒なので、よほどの時でないと使っていなかったりします。

ブラウザでは console.dir() という便利出力を使えたりしますが、残念ながらTitaniumでは使えません。

ちょっと変数の中身をみたり、ちょっとした動きの確認程度のことであれば Ti.API.debug() を絨毯爆撃してデバッグしていますが、オブジェクトを指定した場合、 [object Object] のような出力になってしまうので、 for...in などで展開して出力したりしていました。

が、どうやら以下のようにしてあげると、ダンプできるもよう。

Ti.API.debug(JSON.stringify(someObject));

なるほど、 JSON.stringify でオブジェクトを文字列化して出力してあげれば良かったのか・・・この技、知らなかった。

ChromeのDeveloper ToolでTitaniumアプリをデバッグできる TiInspector も以前少し使っていたのですが、Titanium SDK 3.5.x以降で使えなくなってしまったのが残念。

参考

確かな力が身につくJavaScript「超」入門 (確かな力が身につく「超」入門シリーズ)

確かな力が身につくJavaScript「超」入門 (確かな力が身につく「超」入門シリーズ)

WiMAX 2+とカケホライトと私

約1ヶ月半くらい前、9月も終わりの頃、いよいよ覚悟を決めてWiMAX 2+へ移行しました。

加えて、普段使っているドコモ回線契約も新しい料金プラン「カケホーダイライト」に変更したので、1ヶ月使ってみた感想でも書いてみようと思います。

WiMAX 2+へ移行した

昨年WiMAX契約を更新したときは、迷った末に見送りました。

umi-uyura.hatenablog.com

主な理由としては、

  • WiMAXは主に自宅回線として導入しているのに、WiMAX 2+は速度制限がかかるのは辛い(当時はまだ可能性でしたが)
    • 自宅の電話回線が腐っているのか、ADSLはほぼ使い物にならない
    • 賃貸アパートなので、光回線を引くのも気が引ける(&子どもが生まれて引っ越しも考えなくもない、という事情もあります)
  • WiMAX 2+はデバイスプラス(機器追加オプション)ができない
    • 自宅に人がいない時間帯は、外でWiMAXを使えた

というものでした。

現在も事情としては変わっていないので、正直なところ変えたくはなかったのですが、WiMAX 2+の全国展開の完了ととともに現行WiMAXは速度が3分の1も落ちることになり、そしていずれはなくなるだろうということになってしまったので、これはもう継続するか止めるかを決める時期かな、と思い始めたわけです。

WiMAX(2+)を継続した理由

このタイミングで決めたのは、まあ対応端末へ無料で乗り換えられるというキャンペーンが9月末までだったためです。

結局先に述べたような事情というのはあまり変わっておらず、基本的に自宅回線としてWiMAXを残すしか、ほぼ選択肢がない状況でした。

一番問題であった速度制限に関しては、いちおうUQコミュニケーションズとしても改善していくというリリースを出したので、まあそれほど期待はしていないものの、こういう事情なので、変えるなら少しでも損が少ないタイミングの方が良いと思い、決断しました。

選んだ端末&プラン

タダ替えで選べる端末はホームルータータイプもありましたが、持ち運びやすいモバイルルータータイプのHUWEI製のW01にしました。

Speed Wi-Fi NEXT WiMAX 2+ W01 マリン  HWD31SLU

Speed Wi-Fi NEXT WiMAX 2+ W01 マリン HWD31SLU

理由としては、

  • 基本的には自宅回線用だが、家族で出かける場合には外でも使えそう
  • (追加料金はかかりますが)au LTEオプションが使えるので、帰省や旅行時にも使えそう
    • 奥さんも自分も、実家がWiMAXはおろかPocket WiFiも電波が届かない田舎なので…

といった感じです。

代わりに、まだしばらくは使えるWiMAX(1の方)は捨てることになるので、速度制限から逃れるすべはなくなった形になります。

カケホーダイライトへ移行した

ちょうどWiMAX 2+への移行を検討している頃に、ドコモからも新しい料金プラン「カケホーダイライト」が発表になりました。

今使っているXperia Z3へ機種変更したのが昨年11月。

そのときは、それまでの料金プランを変更する気はなかったのですが、分割払いにするには新しい料金プランへの移行が必須ということで、 不本意ながら カケホーダイ+パケットSという組み合わせに変更せざるを得ませんでした。

ふだんほとんど通話をすることがない自分にとっては、2,700円もする定額プランは不要、となると実質値上げになるため、その分をカバーすべく、データ通信に関してはパケットSを選択しました。

当時はWiMAX 2+の移行を見送ったこともあり、オプションのデバイスプラスを使うことで、外でのデータ通信はカバーできていましたので、加えて外出先の公衆無線LANなどを利用することで、月々のデータ使用量は2GBで収めることができていました。

そんな感じだったので、月額の料金が安いカケホーダイライトが発表されたときは即変更しようと思ったのですが、よくよく条件を見てビックリ。

パケットSは対象外!!!

当然企業として売上が必要ということは理解しますが、ユーザーとしてはまったく納得がいかない条件です。

そうなると、通話プランが2,700円から1,700円と1,000円下がるかわりに、パケットプランを3,500円から5,000円と1,500円アップしなければならないので、実質500円アップということになります。

以前は存在した 通話の利用頻度が低い人に合ったプランが欲しい だけなのに、なぜか 通話プラン安くしてあげるから、より高いパケットプランに変えてね という意味がわからない交換条件のため、そのときはいったんはカケホーダイライトへの移行は見送っていました。

長期利用割引(ずっとドコモ割)があった

ところで、そういえば自分はドコモユーザーとしてかれこれ15年超です。

その場合、長期利用割引が適用され、パケットMが800円割引になるのでした。(ついでに言うと、パケットSも600円引きではあった)

あらためて、その差分を考慮すると、ほとんど使わない電話料金を下げ、+300円でパケットMにできるとも言えます。

先に書いたとおり、結局WiMAX 2+へも移行せざるを得ない状況になってきて、デバイスプラスが失われることを考えると、この+3GB分をテザリングに回せば、外でもくもくするときなどにも使えます。

そういったことを踏まえ、まんまとキャリアの策にノセられている感に納得出来ない面はありつつも、カケホーダイ・ライト+パケットMに変更することにしました。

1ヶ月使ってみて

カケホーダイライトに移行してみて

10月末にXperia Z3のデータ使用量を確認したところ、約4.0GBでした。

f:id:umi-uyura:20151117004140p:plain

うち、1.6GBはMacBook AirNexus 7テザリングで使っていて、スマートフォンの通信量は2.4GB。

スマホでも、あきらかに大きなデータや動画を観たりはさすがに控えていますが、それでも以前よりパケット量は気にせず使っていてこのくらいなので、スマホテザリングで5GBあれば、普段使いとしては充分なようです。

問題は5分を超えると有料になる通話プランですが、対策として、とりあえず試しに指定した通話時間が近づくと教えてくれるアプリを入れてみました。

Call-Timer - Google Play の Android アプリ

が、この1ヶ月間、5分以上の通話をすることがなかったので、まあ問題なさそう。

WiMAX 2+に移行してみて

そもそも自宅の位置が山に近いあたりのせいか、WiMAX(1)時代も2Mbps前後だったのですが、あまり変わりませんでした。

あと、やはり3日間3GB制限は厳しいですね。

特にITエンジニアとしては、開発環境のアップデートなどで、大きなデータをダウンロードすることは度々発生します。

つい最近もXcodeのアップデートなどありましたが、4GB近くありましたので、その時点で翌日の速度制限確定です。

こういう場合、Xcode単独ではなく、関連してSDKだったりシミュレータだったり周辺ツールのアップデートなども発生したりするので、1日で終わらなかった場合、翌日に持ち越されたアップデートは地獄です。

まあ、こればっかりは仕方がないので、制限のなかでやりくりして行こうと思います。

ネット非接続状態でEmacs起動時にEmacsWikiへの通信がエラーになってしまう問題が解決した

以前から気になっていたのですが、インターネットへ接続していない状態でEmacsを起動するとエラーが発生してしまい、.emacsの読み込みが中途半端な状態になってしまう現象がありました。

f:id:umi-uyura:20151110234332p:plain

これは、パッケージインストールツールのauto-installにて、起動時に EmacsWiki に掲載されているパッケージ名を読み込むために呼び出している auto-install-update-emacswiki-package-name が、EmacsWikiへのとの接続を確立できないためにエラーになっているようでした。

ネットワークが繋がっていないときということで、頻繁に起きるものでもないこともあって放置していたのですが、ふと気になってきて調べて始めたところ、以下のツイートを見つけました。

auto-installのメンテナをされている@rubikitch氏とやりとりで、このツイートへのリプライの中で、

wgetがインストールされていれば、wgetで判定してくれるのでフリーズしないと思うのですが

というものがありました。

私の環境にはHomebrewでwgetを導入してはいるのですが、もしかしたらそれがうまく検出されていないのかもしれない、と思い、明示的にwgetを使うように auto-install-use-wgett に設定してみたところ、ネットワークが切断された状態でもエラーにならず、Emacsが起動してくれました。

(when (require 'auto-install nil t)
  (setq auto-install-use-wget t)                        ; <-- 入れた
  (auto-install-update-emacswiki-package-name t)
  (auto-install-compatibility-setup)
)

ただ、環境によっては、逆にwgetを使っていることで?フリーズしてしまうケースなどもあったようなので、一概にこの設定で良いかはわかりません。

たまに外で作業している場合などでネットの接続状態が悪いと、この問題でEmacsが不完全に起動してしまい、 (auto-install-update-emacswiki-package-name t) 部分をコメントアウトして起動しなおしていたりしたのですが、これで気にしなくてもよくなりそう。

環境

項目 バージョン 備考
OS Mac OS X 10.10.5 -
Emacs 24.5.1 Homebrew版
auto-install 1.58 -
wget 1.16.3 Homebrew版

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

FlycheckでESLintの設定を育てるときのメモ

Flycheckを導入しているものの、普段は一緒に導入している flycheck/flycheck-pos-tip でエラー箇所をポップアップさせて、その部分を修正していくという使い方をしています。

先日、EmacsでESLintを使える環境を作って、自分好みの設定を模索しようとしているのですが。

umi-uyura.hatenablog.com

まだ、ほとんど推奨設定の状態ということもあり、そのまま使うといろんな所でエラーやら警告やらが出てきます。

そのあたり、ひとつひとつエラーの内容を調べつつ、自分的に無視するか有効にするかを判断していくわけですが、さすがに似たようなエラーも大量に出てくるため、ある程度まとめて調べたいと思うようになりました。

エラーになっているルールを調べる方法

先に述べたとおり、通常の使い方としては flycheck/flycheck-pos-tip でエラー箇所にポップアップを表示しています。

f:id:umi-uyura:20151109235006p:plain

が、この方法ではエラーの説明は表示されていますが、ESLintの設定を変更するためには知りたいルールの ID がわかりません。

そこで、まずはFlycheckの使い方を調べたところ、エラーの情報を知るには以下の3つの方法がありそうでした。

コマンド 機能
C-c ! l
M-x flycheck-list-errors
M-x list-flycheck-errors
現在のバッファの全てのエラーの一覧を表示する
C-c ! C-w
M-x flycheck-copy-errors-as-kill
現在位置のエラーメッセージをKill-ringにコピーする
C-u C-c ! C-w
C-u M-x flycheck-copy-errors-as-kill
現在位置のエラーメッセージとIDをKill-ringにコピーする

ピンポイントで知りたい場合は、 C-u をつけた flycheck-copy-errors-as-kill でエラーの ID を取得することができます。

しかし、現状は大量に出てくるエラーを、ある程度まとまって調べてしまいたいこともあり、 flycheck-list-errors でリスト表示したものをベースに、設定をいじる方が効率が良さそうです。

ただ、ここでも一つ問題が。

f:id:umi-uyura:20151109235023p:plain

ルールを示すのは、リストの中の ID の部分なのですが、デフォルトだと幅が狭すぎて、IDが読めません。

特に、React用のプラグインなどはIDも長くなりがちなので、このままではちょっと使いにくいです。

エラーリストの幅を変える

どうやら flycheck-error-list-format にエラーリストの幅設定があるようだったので、.emacsに以下のような感じで設定。

(eval-after-load 'flycheck
  '(custom-set-variables
    '(flycheck-error-list-format [("Line" 4 flycheck-error-list-entry-< :right-align t)
                                  ("Col" 3 nil :right-align t)
                                  ("Level" 8 flycheck-error-list-entry-level-<)
                                  ("ID" 20 t)       ; <- 初期値は6
                                  ("Message" 0 t)
                                  (" (Checker)" 8 t)])
    ))

初期値 6ID の幅を 20 に設定してみたところ、私の環境では、それなりに識別できそうになりました。

f:id:umi-uyura:20151109235038p:plain

もう少し広げても良いかなー、と思いつつ、これで多少カスタマイズが捗りそうです。

※2016/05/14 追記

flycheck-error-list-format のフォーマットが変わったようなので、それに合わせて設定を変更しました。

umi-uyura.hatenablog.com

環境

項目 バージョン 備考
OS Mac OS X 10.10.5 -
Emacs 24.5.1 Homebrew版
Flycheck 0.25snapshot (20151106.559) MELPA版

参考