何故僕はTumblrからHexo+Netlifyに移行したのか

  1. 1. Hexoについて
  2. 2. Netlifyについて
  3. 3. Tumblrについて
  4. 4. それでも僕がTumblrを離れたわけ
    1. 4.1. テーマの自作がやや面倒
      1. 4.1.1. TumblrのJavaScriptが避けれない
    2. 4.2. エントリが管理できない
    3. 4.3. Tumblr == リブログ というイメージが強すぎる
      1. 4.3.1. もにょる
  5. 5. じゃあHexo+Netlifyは?
  6. 6. 昔話

細々ながらも長らくブログをやってきまして。つい先日しれっとTumblrからHexoというブログ特化型の静的サイトジェネレータをNetlifyでホストする方法に移行しました。

Hexoについて

ブログ特化型の静的サイトジェネレータは今ではいろいろ豊富で、Jekyllなんかを皮きりにMiddleman、Hugo、Octopress、Gatsbyなどがある。

で、結果的にできることっていうのはどれもそんなに変わらないんだけど、過程としてそもそも動く言語が違う。ということで僕がHexoを選んだのはNode.jsで動くから、っていう理由だけ。特に僕は既存のテーマとか使うのは好きじゃなく自分で作りたい派だから慣れ親しんだPug、Stylusでテーマ作るのもNode.jsのほうがやりやすい。

と、書いて思ったけどわりとテーマ自作って少ないのかな。昔からいろんなブログを転々としてきたけど、いつだってテーマは自作してきた。それが普通だと思ってた。

まあそんなこんなでローカルで開発できてテストできて、デプロイも簡単なHexoにすることに。それにブログ程度、動的な要素はそんなに必要なくて静的で十分事足りるし。

Netlifyについて

静的サイトをホスティングするWebサービス。Git系リポジトリのWebhookからビルド、デプロイできるし、SSL/HTTPSもばっちり。カスタムドメインも使えるし至れり尽せりな上に基本無料(CDNを日本にしたり、パスワードかけたりは有料)。個人の静的サイトならもうNetlifyで全部いいんじゃないかって思う。

もちろんGitベースのソース管理してデプロイするのは開発に関する知識が少し必要だから使うユーザのレベルは少しだけ要求されるけど、逆に言えばその程度しか要求されないのですごく楽。

各エントリの内容はもちろん、テーマや設定系も全部Git管理できるのは本当にいい。それでpushするだけでデプロイ完了。めっちゃ楽チン。

Tumblrについて

僕はTumblr大好きだったし今でも好き。本当、知ってる人の認識が「リブログ専用ブログサービス」みたいな認識なことだけはクソだと思ってるけど、これは日本のユーザコミュニティの問題なのでもうしょうがない。

Tumblrをブログサービスとしてちゃんと見た時、意外にも使いやすい。文章を書くのに必要なフォーマットはあるし、Markdownだってもちろん対応。WebAPIも用意されてるからMarsEditのようなブログ用のアプリで更新できる。

できないのはOGPにテキストタイプの投稿ではOGPにアイキャッチ画像を載せれないぐらい。コメントはdisqus使ったり、関連記事とかも工夫しなきゃいけないけど不可能ではない。

むしろ、なんだかごちゃごちゃしてて無駄な情報が多いなか、Tumblrの主流はシンプルなミニマリスティックな感じはとてもいい。もう一度言うけど、Tumblrはリブログ専用ではない。

そしてリブログがあるが故に拡散能力が高いのもポイント。普通だとRSSとか巡回や検索流入だけだけど、TumblrはDashboardを潜る(Twitterで言えばTimeLineを眺める)人も多い。そしてRTならぬReblogがある。リブログされれば別の人のTumblrに自分の記事が載る。これはなかなか伝播力あるし、リブログがリブログで広がるより一時ソースお自分の記事としてリブログされるのはかなり楽しい。

何度でも言うぞ、Tumblrはリブログ専用サービスじゃねえ。

それでも僕がTumblrを離れたわけ

そんなTumblr好きなのに別れを決意したにはやっぱり理由がある。むしろ感覚的には好きだからこそ今まで使ってきた、に近い。

テーマの自作がやや面倒

テーマは自作できるし、公式ドキュメントをしっかり読んだり、既にあるもののソースを見ればそんな難しくない。1つのテンプレートファイルで分岐でなんとかしてるってのがわかってしまえば簡単。拡張性もそこそこある。

とはいえ、Tumblrの管理画面で操作することも多く、何度も修正を繰り返すのはちょっと難儀。
バージョン管理もないし、手元で書いたソースをコンパイルして圧縮してそれをコピペしてリロードするのはやっぱり面倒。

TumblrのJavaScriptが避けれない

つまりテーマに手を加えるだけじゃAMPが使えない。強制でJSが挿入されるので。まあ無料のWebサービス使っておいてなに言ってんだ、って話ではあるけども。
AMPに対応しようと思ったら外部のサービスを使う必要があるけど、それだと自動生成にしかならないのでリッチなAMP対応ページを作れない。

エントリが管理できない

Web上のエディタにそのまま書くという暴挙なんてしない。とはいえMarsEditでやるしかない。僕はそれでもまだ不満で、エディタは一つでいい。むしろ一つがいい。

どういうことかというと、自分用にフルカスタムしたエディタで書かかないとストレスたまる。補完とか、シンタックスハイライトとか。世にMarkdownエディタはポコポコ生まれるけど、ほんと意味わかんない。エディタは自分でカスタムして、みんなが欲しいのは管理ツールだけだと思ってる。

そういうわけで、Atomで書いてMarsEditにコピペしてポストするのがおっくう。
MarsEditが最近バージョン上がって、アップグレードフィーを要求されたことと、書いたものや下書きをファイルとして管理しにくいというところも大きな要因。

今後他のプラットフォームに移行したり取り回しを考えると、.mdで保存しておけないは苦痛

Tumblr == リブログ というイメージが強すぎる

テーマを上手くやれば、このサイトはTumblrです、って言わなきゃわかんないようにはできる。独自ドメインでも運用できるし、事実、特設サイトとか簡単なものならパっとTumblrで作って潰すほうがよっぽどスピーディにできると思う。

名前を出すのは失礼かもしれないけど「Tumblr酒場」なるイベントがあるらしい。集まって飲みながらリブログするイベントらしい。リブログはTumblrの機能の一つであって、それ以上ではない。だからTumblr酒場じゃなくてリブログ酒場と名乗るべきだと思う。もう一度言うぞ、Tumblrはリブログ専用サービスじゃねえ。

もにょる

今でこそ悟りを開いたけど、苦労して書いた記事がリブログされ、嬉しくて喜んだのもつかのま、リブログ先のほうが人気があって、そこが1次ソースみたいに扱われた時の悲しさ。手柄をかっさらわれたのような感覚。

そんなことが何度かおこってから、まあでも誰にも見られないような陽の目を浴びない扱いよりはマシか、と思いなおしたけどもね。そういうのがあるとやっぱりライトユーザーはここでブログを書こうとは思わないだろうなぁ。ましてや最近はTwitterやInstagramの波及で承認欲求を大人気なく発揮するのはダサいという風潮はなくなりつつあるのだから。

じゃあHexo+Netlifyは?

そんなこんなでTumblrでやりつづけることに鬱屈を感じつつもリブログされた時の楽しさを舐めながら今までやってきて。でもまあエンジニアの端くれとして自分でフルに管理できる環境でやるか、って思ってやってみた。

結果はというと、前半でも書いたけど、めっちゃいい。
いつものエディタでガーッと書いて、コミットしてプッシュしたら新しい記事がデプロイされる。最高。

細かい設定や拡張性もある。余談だけど、過去記事は全部従来のTumblrの記事から移行してURL変わったのは全部リダイレクトしてる。RSSフィードもリダイレクトしてるからパスは変わったけど、登録しなおさなくても問題ないはず(最初だけ過去記事が配信されなおしてしまうけど)。

リブログされやすい環境は手放してしまったものの、書き易さは格段に上がったのが良い。承認欲求はそんなに高くない僕には承認欲求が満たされやすい環境より、書く時のストレスが少ない環境のほうがよっぽど大事。

昔話

僕がブログを始めたきっかけはiBlogというアプリだった。当時のMacユーザ向けに無料で配布されたアプリで、今みたいなブログサービスがほとんどない時代だった。

今風に言えば静的サイトジェネータのGUI版。あれでブログを始めて、なんかカスタマイズして。

そういえば先日、そのころのiBlogコミュニティで今もつながりある友人と会った。僕も今やWebエンジニア、彼はWebサイト制作会社のやってる。当時の話と、二人ともiBlogがなかったら当時のコーディングをあんなにがんばらなかっただろうし、今につながってないよね、なんて話をした。

今思えばiBlogが半手作り感あったからこそ、自分でテーマを作るのは当たり前の感覚になったのかもしれない。

面白いもので、あれから、GoogleBlogger使ってみたりTumblr使ってみた後で、今こうして使い出したのも静的サイトジェネレータ。やってることはGUIからCUIベースに変わっただけで、なんかまた戻ってきた感ある。

そういうわけで、まだ作りが甘いところをちょいちょい直しつつも、新しくなった環境でこれからも細々とブログ書いていきます。(Tumblrはまた独自ドメイン取る前のURLに戻して、別のものとして楽しんでやっていきます)

モンスターハンターワールド 弱点早見表

攻略サイトがたくさんあるし、同様の弱点早見表もあったり、またTwitterで誰かが作ったやつが拡散されてたりするけど、個人的にはどれも見づらい(し、間違ってたりする)ので自分のために自分で作った。

ちなみにデータはゲーム内の図鑑を参照してるので間違えないはず。
逆に言えばもっと細かいデータとかもあるんだろうけどそこには触れない。TA勢でもない限りはこれで十分だと思う。
一部表記(脚→後脚、胴など)変えたりしてるけど、普通にわかる範囲内で。
背中側と腹側とか厳密に分かれてるモンスターもいるけど、胴、でわかるはず。背中が堅いやつとか明らかにわかるので。

色のイメージと明度でわけて見やすくしてるつもりだけど、項目が多いのでまだゴチャゴチャした印象。もうちょっと淡い色が上手くつかえたらいいんだけど。
とはいえパっと見で「こいつにはコレが効く!ここが弱点!」ってのはわかりやすいかと。
使う場面は相手モンスターはわかってるので、何属性を持っていくか、自分の武器ならどこを狙えばいいか、をすぐわかるようにすることにフォーカスしたつもり。

まあ僕の主武装であるタメ砲撃メインガンスには弱点部位とか属性とか関係ないんですけどね。

それにしても夢中でやってると手に汗かいてくるので、コントローラスキンを買おうか迷ってる。以前使ってたのはかなり良かったものの貼るタイプで少し吸水性があったので汗のオイニーが気になったので一度捨てた。
赤いコントローラーとか好きなんだけど、純正マグマレッドが使いすぎで潰れたので今はもともとの黒。これにスキンでグリップ力つけて色も変えれば楽しいかなーと。値段も高くないので意外にオススメです。

Monster Hunter Worldに想いを寄せて

  1. 1. DOSのおもいで
  2. 2. Worldに向けて
  3. 3. World 所感
    1. 3.1. やりやすくなってるなぁ
    2. 3.2. 知らなくて徳したこと、損したこと
      1. 3.2.1. キャラクリエイト
      2. 3.2.2. 操作設定
      3. 3.2.3. アイテムプリセット
      4. 3.2.4. スリンガー有効利用
      5. 3.2.5. 無料コンテンツもあった
  4. 4. 楽しもう

先日、MonsterHunterWorld、いわゆるモンハンと称されるシリーズの最新作が発売されまして。僕は2作目であるDOS以来、十数年ぶりにプレイする運びとなりました。

DOSのおもいで

あのころはそう、ちょうど僕の仕事での中国駐在が決まってほとんど出発のタイミングと同時だった。仲の良い友人が餞別にってプレゼントしてくれてスーツケースにPS2とモンハン入れて旅立ったっけね。仕事でいろいろ生活にも制約がある海外暮らしだったので、今思えば、夢中になれてしかもオンラインでコミュニケーションできるゲームの存在はかなりありがたかったなぁ。

リアルの友人達でやってる人がいなかったので、野良で始めて、偶然とあるカップルさんと仲良くなってよく一緒にプレイしてたっけ。彼氏さんと僕、彼女さんと僕、もしくは両方と、という感じ。そこにその同僚さん(だったか?)と、たまたま一緒になったプレイヤー君と、というふんわりとした固定メンツでよく遊んでた。

カップルさんは雰囲気の良い二人で一緒にやってて楽しかったなぁ。同僚さんはなんかつかみどころのない人だった。もうひとりのプレイヤー君は多分まだ年齢が若かったんだろう、言動も若くワガママも多かったけどみんな「はいはい」って感じで微笑ましくそれにつきあってたような。みんな邪気がなく、あそこには平和なオンラインがあったなぁ。

ゲームの進行度があがって難しくなって。それとともに理不尽になった。単純に敵が速くなったりパターンが増えたりダメージが増えたり、そういう難度調整は僕は大歓迎。シビアなテクニックが要求される反面、テクニック次第でどうとでもなる、そういうゲーム性は大好き。だけどそういう感じではなく、雑魚敵をたくさん介入させてテクニカルにも回避しにくい、理不尽な方向性の難易度調整だった。

それとともに強い武器に要求される素材集めの出現度合いも低く、面白さを感じなくなる作業のような素材集めマラソン。効率を重視した装備じゃなかったり、非効率的な動きに排他的になるプレイヤー達。固定メンツと時間が合わない時に野良でやってたら、ギスギスオンラインで理不尽難易度で徐々に冷めてきた。

キャラの着せ替え要素を増やすためだけになんでこんな理不尽な作業ゲーしてるんだろう、と思って覚めた。時間が合いにくくなったか、仕事の都合か忘れたけど固定メンツともあまり遊ばなくなってたので、そうしてやらなくなった。彼らは今も平和な日常だろうか?

その後、駐在も終わって日本に戻って。テクニックで回避するものじゃなく理不尽な方向性の難易度調整に腹が立ったのと、海外の珠玉作に触れだして、モンハンを遠ざけるようになった。新作が出た時などリアルの友人から軽く誘われることもあった。自称ゲーマーの友人達が海外の珠玉作をプレイしないどころか名前すら知らない。ああ、もうゲームに対する立ち位置が僕と違うな、と思ったりもした。そんなこともあっていっそモンハンを忌避してて今に至る

Worldに向けて

今作のプレイを前向きに検討した一番の決めては妻さんが「モンハンやりたい」と珍しく自分からやりたいゲームを言ってたこと。ちょこちょこゲームはやるものの僕ほどガチでもない妻さんではあるので、自分からやりたいゲームを言うことは滅多にない、しかも今回はそれが協力プレイできるもの。僕にとっても固定メンツを一人確保できるし、一緒に楽しめるし、そういうゲームはかなり貴重。

昨今のFPSとかで野良でやるのに疲れてきたのも大きいと思う。野良の世界はいつだってギスギスオンラインで、DOSの頃から変わらないらしい。妻もやる、同僚さんもやる。しかも発売直前になって数多のゲームをジャンル問わず一緒に遊んできたゲーマーの友人もやると表明した。そうなったら、もうね。

ベータ版で体験できたのでやってみた。久々で懐しみありつつ、どうやらいろんな要素が変わったらしく純粋に楽しかった。DOSのころ、アクションゲームとして気に食わなかった部分もほとんどなくなってるし。操作体系も昔とちょっと変わってたり。

とはいえ一番大きな変化はきっと自分なんだろうなぁ。大人になったというか柔軟になったというか。以前のようにギスギスオンラインにならなそうだな。という予感。

World 所感

やりやすくなってるなぁ

エリアごとに分断されてなくロードがないのが良いね。箱庭感とオープンワールドのちょうど良いところっぽい感じ。痕跡を辿って案内が出たり、とかって賛否両論あるみたいだけどある種、今のオープンワールド系のデファクトスタンダードで良い。ウィッチャーやHorizon Zero Dawn、アサシンクリードとかいわゆるTPA系はほとんどそういう感じ。良い具合に寄せてきたと思う。マップもファストトラベルも親切。

反面、久々だと要素が多すぎて覚えることも多い。でもそのへんは良くも悪くも大人なのでゆっくり覚えていけばいいか。ちゃんと説明もあるし。

地形の起伏とかその場所にあるものを有効利用したり、落ちてるものがスリンガー(投擲補助武器)用の弾になったり。なんかサバイバルというかハンターらしくて良いと思います。あとは植物とか鉱物の採取とは別に魚や虫、動物の採取とかあってコレクションに増やしていくのも楽しい。ハンターがただモンスター狩るだけじゃなくて調査、探索っぽくなってるのは良いなぁ。

あとはシステム的にPSNのネットワークを使うので、ウチみたいなPS4が2台ならDL版1本、PS PlusのIDが1つあれば2人同時にオンラインプレイできるのは良いね。招待してパーティも組み易いし。
で、オンラインは最初こそエラー頻発オンラインだったものの、今は大丈夫そう。特にサークルという仲間内でできるシステムがあるので固定メンツでやるぶんには全く不自由なくなった。
サークルは基本サークルのメンバー専用だけど、部屋のIDを手打ちするとメンバー意外も入ってこれるのでそれがけっこう嬉しい。

クエストに入るまでのロード時間はやや長め。ただし、拠点で行動しながらプリロードもできるし、クエすと入ってからはロードがないのがかなり良いので特に大きな不満でもない。トイレいったりお茶いれたりしてる。SSDに換装するとだいぶ早いらしい。オンラインで他の人とやる時はタイミング的にどうなるんだろう。

Proとノーマルで違うのは主にはFPS(秒間フレーム:動きの滑らかさ)の多さと安定度っぽい。ウチの場合、2台ならんでるけど明らかにProのほうがヌルヌルしてる。(FPS優先モード)。といってもノーマルでも普通に遊ぶには十分。すごいなぁ。

知らなくて徳したこと、損したこと

キャラクリエイト

このゲームに限ったことじゃないんだけど、キャラクリエイトが細かくできるゲームなのに、何が後からでも変更できて何が変更できないのかその場でアナウンスがない点。どうやら髪、眉の色、ひげ、化粧・ペイント、インナーは変更できるみたいだけど、それが変更できるとこまで行かないと明確にわからない。最初にキャラメイクする時にこの要素は変更できる、この要素は変更できないってきっちり明示して欲しい

あ、名前もね。名前がPSN IDとは別につけれるのにこれもまた変更可能かわからなかった。結局名前はやっぱり変更不可 な模様。なんでここまで悩むかというとあとから変更したくてもやりなおしする気力も時間もオジサンにはないからだよ。最初の一発でキメないといけないからだよ。

MONSTER HUNTER: WORLD
公式Webマニュアル キャラクリエイション

操作設定

操作がわりと細かくカスタマイズできるようになったのは嬉しい。特にアイテムとかのショートカット。デフォルトだとスティックを離したらアイテム使用という誤爆がクソ多い仕様だけれども、ここはスティック押し込みに変更できるのは良い。とても良い。むしろゲーム開始直後真っ先に操作変更したぐらい良い。なぜこっちの操作をデフォルトにしなかったのか。

他にも視点操作感度とか、ボタン操作。いろいろカスタムできる。DOSのころから考えてできること自体はあんまり変わってないものの、操作体系が変わってるし、それを決められた範囲でとはいえかなり柔軟にカスタムできるのでありがたい。

こういう操作変更は意外と見落すので最初に隅々まで試すといいと思う。他にもロックオンの設定とかあるので。ほんと全部ひととおり触ってみたほうがいいと思う。

ちなみにこれとはちょっと異なるけど自動調合も最初からいくつかセットしてあるから、必要ないものは外したほうが良さげ。欲しいアイテムを素のままで欲しいのでオンだと勝手に調合してしまったりもあるので。

アイテムプリセット

アイテムのショートカットが使い易くなってうれしい反面、なんかデフォルトに戻るなーと思ったら倉庫のマイセットにショートカットも保存される仕様だった。目立つようにアナウンスされてないから最初困ってた。

要は、ショートカットを編集した後に倉庫のマイセットをキャラに適用すると、アイテム欄と一緒にショートカットまでキャラに適用されてしまう。なので、ショートカットを設定したら先にまずマイセット登録しないといけない。これはちょっとわかりにくかった。

スリンガー有効利用

スリンガーの各種弾がけっこう有用なのはやってみるとわかってくるけど、楔虫を知ったらびっくり、移動が楽になった。楔虫というなんか下向きの花みたいな奴がスリンガー構えて◯ボタンでひっかけられる。ターザン移動的に使えるのでサクサク移動したい時にはだいぶ助かる。しかも今作は上下移動多いしショートカットできるのでうれしい。

あとは虫系小型モンスターを散らさず(採取できるように)倒したり、松明弾で瘴気消したり。思いの他、やれることは多い。片手剣は火力のなさからあんまり人気がないけど納刀せずにスリンガー打てるので使いこなせればいろいろ化けそう(という期待)。

無料コンテンツもあった

事前にはDLできなかったけど発売以後、ひそかに無料コンテンツが追加されてた。今のところ髪型とジェスチャー。お遊び要素とはいえ、無料で配信されるのはうれしい。

あとは予約特典の護石がマイルームに行かないと取得できないのを知らずにしばらく進んでた。最初にとっておけば良かった。

楽しもう

こんなにゲームが楽しみになるのは去年のFor Honorぶり。For Honorは素材は凄くよかったんだけど、マッチングとかキャラバランスとかいろいろアレでもう全然やってない。楽しかったんだけどな。半ば対戦格闘に近かったから固定の仲間や相手に巡り合えたら良かったのかもだけど、まあいろいろ残念だった。

そういうマイナー珠玉ゲーも良いんだけど、メジャータイトル、国産、みんなやる、っていうのはメンツ集めるのに楽だなぁと思った。そのぶん野良だと民度も下がるとは言え、固定メンツでやってるぶんには関係ないし。

まぁそんなことはいろいろあるけど、ぜーんぶ抜きにして十数年ぶりのモンハンを久々に堪能しようと思う。



これがないと捗らない、僕のErgoDoxファームウェア(late 2017)

  1. 1. ErgoDox
    1. 1.1. ErgoDoxEZ
      1. 1.1.1. Kinesisとの使用感比較
      2. 1.1.2. ErgoDoxのキーカスタム
        1. 1.1.2.1. 基本
        2. 1.1.2.2. 親指まわり
        3. 1.1.2.3. 周りのキー
        4. 1.1.2.4. レイヤー系
  2. 2. Karabiner-element Required

昨年末から続いてる極まりつつある入力環境シリーズ、今回はソフト的な設定ではなく外付けキーボードのハードウェア的な設定の話。普段家でも職場でもMacBookProを使っていて持ち運ばない時はErgoDoxEZという外付けキーボードを使っている。これがいろいろ柔軟に設定できるのでその話。

ErgoDox

ErgoDoxという風変りなキーボードを知っているだろうか?以前エンジニア界隈で話題になったけど、左右セパレート型かつ親指周りに多めにキーを配置したのが基本形のキーボードがある。昔からある最強にして変態キーボードと名高いKinesisと似てる使用感がありつつ、左右セパレートを実現している。そして、ファームウェア(押したキーに対する挙動の設定)をキーボード側に書き替えれるので自分の好みの配置にできるのが素晴しい。

ErgoDoxEZ

ErgoDoxとは半自作キーボードであり、通常はキットで自分ではんだ付けして組み立てる。が、組み立て済みのセットとして、ErgoDoxEZというのもある。こちらはフルセットかつ作りもしっかりしていて、保証もある。逆にキットで自作するほうが色とか本当に自分好みにできる。

そんなわけで僕はEZのほうを使ってるけど、一度トラブルがあったもののすぐに、本当にすぐに交換対応してくれたので保証があって良かったなぁ、と思う。そして備え付けの角度調節用の足も良い感じ。EZでもCherry MX軸の中のいくつかから軸は選べる(僕は赤軸使用。欲を言えばピンク軸が欲しかった。)し、キーキャップはEZの販売サイト以外でも手に入る。

もちろんキットで自作するよりは高く付くものの、保証や出来を考えるとEZも値段的バリューは悪くないと思う。特に台湾から発送なので送料はキットよりも安い(キットはヨーロッパから)。ドル立てとユーロ立ての為替も関係してくるけど。

Kinesisとの使用感比較

ErgoDox以前はKinesisユーザだったので、簡単に思い出せる範囲内で使用感を比較してみよう。

打鍵感は、今のErgoDoxのほうが良いかな。でもKinesisの時はデフォルトの茶軸、今のErgoDoxは好みに合った赤軸を使ってるからな気がする。正直、Kinesisの赤軸と比較しないとなんとも。あとはキーキャップ替えたりO-ring噛ませたりでタッチは変わってくる。

キーキャップはKinesisは専用で選択の余地がないけど、エルゴノミクスデザインが素晴らしい。手の自然な形状に合うような気がする。ErgoDoxはキーキャップの選択の余地があるものの、一つ一つが専用の傾斜があるわけではない。ただし、足などでキーボード全体の傾斜を整えれば結構肉薄できてると思う。

パームレストはErgoDoxは必須だと思う。専用がもちろん良いけど、下で紹介してるような安価な物でも十分。Kinesisは本体がパームレストも兼ねてるし、固いなら付属のパッドをくっつければ十分だと思う。

大きさと置き場所的には断然ErgoDoxのほうが上。セパレート型は慣れると素晴しい。左右の手の間隔を自分で決められるのは思ってる以上にデカい。その証拠に僕の自宅のイスの写真を載せておこう。もはやキーボードは机に置く必要すらない。Kinesisだとこうは行かず机に置かざるを得ない。しかも単体の大きさがそれなりにあるのでいろいろ物理的制約が出てくる。ErgoDoxだとセパレートなので左右の間にMacBookProを挟んで(僕の職場仕様はこのスタイル)も全く問題ない。

キーカスタマイズはErgoDoxのほうがやや上かな。ファームウェアを自分でビルドして書き替えなきゃいけないものの、ビルドはDockerで、書き替えは専用ソフトでやっちゃえば良いので一度やれば変更はそんなに大変じゃない。最初はちょっと戸惑うけど。ただそのぶん、柔軟性は随一。Kinesisのキー設定も必要十分でキーの入れ替えはもちろんマクロ登録もできる。加えてレイヤーにも分けれるのでErgoDoxにもひけを取らない。

ErgoDoxのキーカスタム

ここでようやく本題。とりあえずソースを。

// Netable differences vs. the default firmware for the ErgoDox EZ:
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
// 2. The media keys work on OSX (But not on Windows).
// make clean && make keyboard=ergodox subproject=ez keymap=my-keymap
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"

#define BASE 0 // default layer
#define MOVE 1 // Cursol keys and Mouse Keys
#define CALC 2 // Keys like a calculator
/* period of tapping(ms) */
#ifndef TAPPING_TERM
/* #define TAPPING_TERM 200 */
#define TAPPING_TERM 75
#endif

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | `~ | | '" | 6 | 7 | 8 | 9 | 0 | \| |
* |--------+------+------+------+---------+-------------| |------+------+---------+------+------+------+--------|
* | TAB | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | '" |
* |--------+------+------+------+---------+------| { | | } |------+---------+------+------+------+--------|
* | LCtrl | A | S | D | F | G |------| |------| H | J | K | L | ;: | -_ |
* |--------+------+------+------+---------+------| |------+---------+------+------+------+--------|
* | LShift | Z | X | C | V | B | ( | | ) | N | M | , | /? | += |
* `--------+------+------+------+---------+-------------' `-------------+---------+------+------+------+--------'
* | ~L2 | ~L1 | Left | Right|LGui/Eisu| |RGui/Kana| Up | Down | ~L1 | ~L2 |
* `-------------------------------------' `-------------------------------------'
* ,-----------------. ,-----------------.
* |LCtrl | LAlt | | RAlt | RCtrl |
* ,------|--------|--------| |--------+--------+------.
* | | | Tab | | Tab | | |
* | Space| Del |--------| |--------| BKspc |Enter |
* |LShift| LCtrl |LAlt/TAB| |RAlt/ESC| | |
* `------------------------' `------------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_JYEN,
// MO(CALC), MO(MOVE), KC_LEFT, KC_RGHT, MT(MOD_LGUI, KC_LANG2),
MO(CALC), KC_LALT, KC_LEFT, KC_RGHT, KC_LGUI,
KC_LCTL, KC_LALT,
KC_TAB,
// MT(MOD_LSFT, KC_SPC), MT(MOD_LCTL, KC_DEL), MT(MOD_LALT, KC_TAB),
KC_SPC, KC_DEL, KC_LALT,
// right hand
KC_QUOTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_MINS,
KC_RO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_EQL,
// MT(MOD_RGUI, KC_LANG1), KC_UP, KC_DOWN, MO(MOVE), MO(CALC),
KC_RGUI, KC_UP, KC_DOWN, KC_RALT, MO(MOVE),
KC_RALT, KC_RCTL,
KC_TAB,
// MT(MOD_RALT, KC_ESC), KC_BSPC, KC_ENT
KC_RALT, KC_BSPC, KC_ENT
),
/* Keymap 1: Media and mouse keys
*
* ,--------------------------------------------------------. ,--------------------------------------------------.
* | TRANS | F1 | F2 | F3 | F4 | F5 | | | Power| F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+--------+--------+--------+-------------| |------+------+------+------+------+------+--------|
* | TRANS | | | MsUp | | | WhUp | | WhUp | | | UP | | | F12 |
* |--------+------+--------+--------+--------+------| | | |------+------+------+------+------+--------|
* | TRANS |WhLeft| MsLeft | MsDown | MsRght |WhRght|------| |------| | Left | Down | Right| | VolU |
* |--------+------+--------+--------+--------+------|WhDown| |WhDown|------+------+------+------+------+--------|
* | TRANS | | | | | | | | | | | | | | VolD |
* `--------+------+--------+--------+--------+-------------' `-------------+------+------+------+------+--------'
* | TRANS| TRANS| TRANS | TRANS | TRANS | | TRANS| TRANS|TRANS | TRANS| TRANS |
* `----------------------------------------' `------------------------------------'
* ,-------------. ,-------------.
* | TRANS| TRANS| | TRANS| TRANS|
* ,------|------|------| |------+------+------.
* | | | TRANS| | TRANS| | |
* | Lclk | Rclk |------| |------|MsAcl2|MsAcl1|
* | | | WhClk| |MsAcl0| | |
* `--------------------' `--------------------'
*/
// Cursor Keys and Mouse Keys
[MOVE] = KEYMAP(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MUTE,
KC_TRNS, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_WH_D,
KC_TRNS, KC_WH_L, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_R,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_BTN1, KC_BTN2, KC_BTN3,
// right hand
KC_PWR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_WH_D, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_F12,
KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_VOLU,
KC_WH_U, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_ACL0, KC_ACL2, KC_ACL1
),


/* Keymap 2: Keys like a Culculator
*
* ,---------------------------------------------------. ,--------------------------------------------------.
* | TRANS | | | | | | | | | | 7 | 8 | 9 | | |
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
* | TRANS | | | UP | | |WhDown| |WhDown| | 4 | 5 | 6 | * | / |
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | TRANS |WhLEFT| LEFT | DOWN | RIGHT|WhRght|------| |------| | 1 | 2 | 3 | + | - |
* |---------+------+------+------+------+------|WhUp | |WhUp |------+------+------+------+------+--------|
* | TRANS | | | | | | | | | | 0 | 0 | . | + | = |
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | TRANS | TRANS| TRANS| TRANS| TRANS| | TRANS| TRANS| TRANS| TRANS| TRANS |
* `-----------------------------------' `------------------------------------'
* ,-------------. ,-------------.
* | TRANS| TRANS| | TRANS| TRANS|
* ,------|------|------| |------+------+------.
* | | | TRANS| | TRANS| | |
* | TRANS|TRANS |------| |------| TRANS| TRANS|
* | | | TRANS| | TRANS| | |
* `--------------------' `--------------------'
*/
// act like ten keys
[CALC] = KEYMAP(
// left hand
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_WH_D,
KC_TRNS, KC_WH_L, KC_LEFT, KC_DOWN, KC_RIGHT,KC_WH_R,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_NO, KC_P7, KC_P8, KC_P9, KC_NO, KC_NO,
KC_WH_D, KC_NO, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS,
KC_NO, KC_P1, KC_P2, KC_P3, KC_PLUS, KC_PMNS,
KC_WH_U, KC_NO, KC_P0, KC_PDOT, KC_PEQL, KC_PLUS, KC_PEQL,
KC_TRNS,KC_P0, KC_PDOT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),


};
enum function_id {
LEFT_BRACE, RIGHT_BRACE
};
const uint16_t PROGMEM fn_actions[] = {
// [13] = ACTION_KEY(KC_LPRN), // FN13 - (
// [14] = ACTION_KEY(KC_RPRN) // FN14 - ) >
};
// #define MY_FN13 KC_LPRN
// #define MY_FN14 KC_RPRN
// #define S(MY_FN13) KC_LABK
// #define S(MY_FN14) KC_RABK
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};

// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {

};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {

uint8_t layer = biton32(layer_state);

ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}

};

基本

基本はQWERTY配列。外出時などMacBookPro側のキーを叩くこともあるし、自分のじゃないキーボードを触る時に戸惑うのでQWERTYからなるべく外れないように指の互換性をキープ。

親指まわり

ErgoDoxの特徴的な配置の親指周りのキー。ここはKarabiner設定でも紹介するけど、SandS(単体押しがSpace、他のキーと組み合わせるとShift)が大活躍。一番使うところ左にSandSキー、その隣はDelete(Forwerd) OR Ctrl。右はEnterとBackSpace。あとはOptionやTABやESCなど。

ちなみに単体押しと同時押しで違う挙動をさせるのはファームウェアでも設定できるけど僕の場合はKarabinerでやってる。実は厳密な挙動が少し違う。

例えば、単体だとAキー、他のキーと押すとBキーとして動作させたいとする。
ErgoDox DoubleFunctionだと、キーを押しつづけると一定時間後にBキーになる。これだとほぼ同時押しに近いような場合、Bキーとして動作しない。単体の時も一定時間以上の場合はBキーだけが入力される。要はKey-Downの時間が一定以上でKey-Up時に入力されるキーが変わる仕様。もっとわかりやすく言えば、普通に押す時と長押しで変わる、という感じ。

Karabinerの場合、まずBキーとして認識され、一定時間以内に他のキーの入力なく離した場合だけAキーとして認識される。この挙動の場合、同時押ししてもBキーになるし、キーを押したまま組み合わせるキーを迷っていてもBキーのまま。単体で入力する時のKey-downからKey-upの時間はわりと一定に収束するので、その時にだけAキーとして入力されるほうが都合が良い。

すごく細かい話だけど、やってみるとかなり使い勝手が変わってくるので重要。本来ならErgoDox側で設定できるならそちらでやるほうが設定と動くものの整合性というかレイヤー的に理に叶ってるんだけど、この違いはデカいのでしょうがない感。

周りのキー

外側一列と内側一列にあるキー達。左手外側には普通のUSキーボードと同じような感じで特殊キーを配置。右手外側も同じ感じで記号キーを配置。左手内側にはカッコ郡を配置。

具体的に、左手内側上は[,{、右手内側上に],}、左手内側下には独自キー用にFN1を指定、逆にはFN2。そしてこれをKarabinerで(,、),>に割り当てる。これはErgoDoxのファームウェア側だと単押しがすでにShiftと組み合わせる入力の場合、さらにShiftを追加する入力が上手く設定できなかったため。FNキーに設定して一旦逃がしてから、FN1単押しでShift+9Shift+FN1ではShift+,が入力されるように設定して実現させている。

レイヤー系

レイヤーはメイン以外に2つ設定していて、1つは上下左右への矢印キーを直感的にしたものと、マウス操作。もうひとつはテンキー操作。これはKinesisにもあったのでなかなか良い。

ちなみに内側の特殊キーにマウスホイールのエミュレート(つまりスクロール)を割り当ててるけどこれもなかなか良い。

必要ないところはぜんぶ割り当てない設定にしてる。

Karabiner-element Required

シリーズ内別記事でKarabinerカスタマイズを紹介する(してる)けど、上記に書いてあるようにかなり頼ってる部分というか密結合してる。本当はあまりよろしくないとは思いつつも他に手段がない上、使い勝手には替えられないのでしかたなし。

小気味良いSandS入力なしにSKKと親指多用のErgoDoxは実現しえない。

これがないと捗らない、僕のAquaSKKカスタマイズ(late 2017)

  1. 1. AquaSKK
    1. 1.1. そもそもAquaSKKって?
    2. 1.2. AquaSKKの設定について
    3. 1.3. keymap.conf
    4. 1.4. カスタムルール
  2. 2. ついでに

昨年(2017年末)僕がメインで使ってるテキストエディタAtomのカスタマイズ記事を書いたんだけど、付随してAquaSKKの設定も書いておこうと思ってたら年が明けちゃった。
表題は(early 2018)とすべきかもしれないけど、変わってないので関連製を持たせるために(late 2017)で。

AquaSKK

そもそもAquaSKKって?

mac OS用のSKKIME。
これについてはだいぶ前に書いた記事「僕が日本語 IM「SKK」に憑かれた訳」を参照していただければ。

AquaSKKの設定について

AquaSKKはただ単にSKK入力を実現するだけじゃなくて、キーバインドや入力ルールもカスタマイズできる。そのへんを弄くる話。

keymap.conf

キー割り当てのセッティング。これをAtomでのキーバインドと相互に寄せてることで入力に関して割と近い統一性を保つようにしてる。

設定の方法についてはkeymap.confの文法を参照のこと。

今の設定はこんな感じ

###
### keymap.conf
### https://ja.osdn.net/projects/aquaskk/wiki/keymap.conf%E3%81%AE%E6%96%87%E6%B3%95

# ======================================================================
# event section
# ======================================================================

SKK_JMODE ctrl::j||keycode::0x68
SKK_ENTER group::hex::0x03,0x0a,0x0d||ctrl::m
SKK_CANCEL ctrl::g||hex::0x1b
SKK_BACKSPACE hex::0x08||ctrl::h
SKK_DELETE hex::0x7f||ctrl::d
SKK_TAB ctrl::n
# SKK_PASTE ctrl::v
SKK_PING ctrl::l
SKK_UNDO ctrl::/

# ======================================================================
# attribute section(for SKK_CHAR)
# ======================================================================

ToggleKana q
# ToggleJisx0201Kana ctrl::q
SwitchToAscii l||hex::0x1b
# SwitchToJisx0208Latin L

EnterAbbrev /
EnterJapanese Q
NextCompletion hex::0x09
PrevCompletion ctrl::p
NextCandidate hex::0x20||ctrl::f
PrevCandidate x||ctrl::b
RemoveTrigger X

UpperCases group::A-K,M-P,R-Z
Direct group::keycode::0x41,0x43,0x45,0x4b,0x4e,0x51-0x59,0x5b,0x5c,0x5f
InputChars group::hex::0x20-0x7e

CompConversion shift::hex::0x0D||shift::hex::0x20

# ======================================================================
# handle option
# ======================================================================

AlwaysHandled group::keycode::0x66,0x68
PseudoHandled ctrl::0||hex::0x1b

ちょっと解説すると、ベースはAquaSKKのデフォルトを踏襲しつつ、自動補完に関してはEmacsのCtrl+p,nによる上下で送り、戻りをできるようにしつつ、Shift+Enterで補完して変換決定をしてる。これはAtomでやってるAutocompleteとほぼ同様になるように寄せている。

変換候補の送り、戻りもCtrl+b,fで対応するようにしてるけど大概の場合はSpaceを何度か叩くことで問題ないのであまり使ってない。

余談だけどSKKになれると日本語/直接入力の切り変えはSKK側のショートカットで行えるので、USキーボードのようにかなキー、英数キーが無くても全く問題ない。(一応僕はKarabiner-elementsで設定してるけどほとんど使ってない)

カスタムルール

AquaSKKでは日本語入力時の入力に対する出力をカスタムできる設定がある。
設定方法についてはかな変換のカスタマイズをご参照あれ。

簡単に言えば、入力,ひらがな時の出力,カタカナ入力時の出力,半角カナ時の出力を書けば、それぞれ適宜出力されるようになる。これによって、使わない全角入力文字の排除と日本語入力時にも半角英数(記号)の直接入力の両方が実現できる。さらに慣例的にz+何かでよく使われる記号を入力することもできる。これもなかなかありがたい。

ファイルで分割すればチェックボックスでオン/オフが設定できるけど、そもそもオン/オフしたい時がないので1つのファイルに自分用は全部書いて適用してる。注意すべきは文字コードをEUC-JPで保存しなければいけない点。

###
### custom-symbols.rule -- 日本語入力時の記号入力
###

### 日本語で良く使うもの
!,!,!,!
?,?,?,?
~,〜,〜,~
(,(,(,(
),),),)

### FEPベース全角記号
z1,○,○,z1
z!,●,●,z!
z2,▽,▽,z2
z@,▼,▼,z@
z3,△,△,z3
z#,▲,▲,z#
z4,□,□,z4
z$,■,■,z$
z5,◇,◇,z5
z%,◆,◆,z%
z6,☆,☆,z6
z^,★,★,z^
z7,◎,◎,z7
z8,∞,∞,z8
z*,×,×,z*
z+,±,±,z+
z~,≠,≠,z~
z=,≒,≒,z=
z`,※,※,z`
z|,|,|,z|
z\,¥,¥,z\
z{,【,【,z{
z},】,】,z}

### HTML escapes
z&,&,&,z&
zc,©,©,zc
z",",",z"
z',',',z'
z,>,>,z>

### PNBF emacs arrows
zp,↑,↑,zp
zn,↓,↓,zn
zb,←,←,zb
zf,→,→,zf

### コロン/セミコロン
;,;,;,;
:,:,:,:
z;,;,;,z;
z:,:,:,z:

簡単に解説すると、

  • !,?,〜,()についてはちゃんと全角で入力できるようにしてる。
  • Windows用SKK「FEP」で設定されている記号入力をベースにしつつ自分用にカスタマイズしたもの
  • HTMLで使われる記号用エスケープの入力ショートカット
  • Emacsの操作に基づく矢印キー入力(ちなみにHJKLはデフォルトで対応してる)
  • コロン/セミコロンは半角を入力するようにし、zをつけたときだけ全角で入力できるようにする

ついでに

ほとんど関係ない余談だけど、僕はキーボードは変態用として名高いKinesisを経て、今はErgoDox EZを使ってる。US配列なので英数キー、かなキーがないけどAquaSKK使いなので困ったことがない。

2018年を始める

  1. 1. 2017年を振りかえって
    1. 1.1. エンジニアとして禄を食むようになった
    2. 1.2. Pentazemin というアプリをリリースした
    3. 1.3. 結婚式した
    4. 1.4. ゲームにいそしむ
    5. 1.5. ジム通い
  2. 2. 2018年をどう生きるか
    1. 2.1. 謙虚に生きる
    2. 2.2. 胸を張って生きる(やや物理的に)
    3. 2.3. 時間をもっと上手く使いこなすようになる

新年、あけましておめでとうございます。また今年も細々ながらもブログを書いていこうと思います。
そんなこんなでKPT的な振りかえりと今年をどうするか的な話。

2017年を振りかえって

エンジニアとして禄を食むようになった

いちばんの変化は2018年の頭に職業Webエンジニアになりました。いろんな職についてきて周り道してきたけど今は楽しくやれてる。やっぱり「自分には無理そう」みたいな思い込みは良くないな、とつくづく思った。

とりあえずまず1年、なんとかなった。自分の技術力的な要因で不安と恐怖は拭えなかったけどなんとかなった。というよりむしろ技術力がネックでそれ以外のところは今まで他のことやってきたからこそ得たモノが力になってたのを実感できた。だから悩みがシンプルでわりと楽しくやってこれた。2018年も粛々とやっていきたい。

Pentazemin というアプリをリリースした

少し技術力もついてきたのでオレオレアプリでToDoマネジメント的なポモドーロタイマー的なアプリを作った。作ったこともそうだけど、ちゃんと紹介ページも作って、一般にリリースという作業まで行なったことによって得れた知見が大きかった。

年末、なんか紹介されたりしてたのでやっぱり作りっぱなしじゃなくて、ブログに書くとかQiitaみたいなのに書く、とかじゃまだ弱くてちゃんとした紹介ページ、しかも英語、日本語の両方ってのはけっこう効果として大きいっぽい。2018年はこれをもっと育てていきたい。

結婚式した

すごく最近、12月の話だけど結婚式をした。入籍から早2年半。だいぶ時間がたってしまったものの結婚式した。一つの良いきっかけになった。もちろん圧縮しまくった式と言え、出費はけっして安くはなかったんだけど、やって良かった。

ゲームにいそしむ

ボドゲをする集まりを定期的に開催するようになった。旅とかする前にゲームする会を3ヶ月に一度やってたんだけど、それのボドゲ版というか。都合がつかないことはあるけどそれでも上手く回ってると思う。飲みながら喋りながらゲームする時間はすごく良い。趣味の集まりってのはすごく精神衛生的に良い。

それとは別に家で一人や妻さんとゲームしたり。もうハードはPS4一択。Switchに興味がないわけじゃないけど、二つもハードがあっても今は遊びつくせないのでPS4だけにしてる。

年末のゲムマでボドゲとボドゲグッズをたくさんかってしまったし、PS4もまだまだ面白そうなのたくさんでるのでこれからも精神衛生的にゲームは積極的にやっていく。

ジム通い

家トレからジムトレに移行した。昔と同じようなメニューでやってる。体つきは少しづつ戻りつつある。ジムでみっちりやるっていうのは肉体的な効果はもちろんのこと、運動やテストステロンの増加による精神的な作用がかなり良い。本当はジムじゃなくて稽古通いたいんだけどね。

2018年をどう生きるか

謙虚に生きる

去年は、特に職場で自分のスキルがないことからの恐怖から、自分の事をオープンにするのに必死だった。技術で勝負できないから技術以外の面で「僕は使える人間ですよ」とアピールするのに必死だった。

割とそれが功を奏してそれなりな評価は(同僚から)得られたような気がする。ただ、逆にそれが過ぎるとうっとおしい奴になってしまうと思うし、俺が俺が、というのは僕自身が好きじゃないので今年は謙虚に生きようと思う。

エンジニア35歳限界説を真っ向から否定するかのようなエンジニア35歳から人生。正直言えば年齢に対する実力が足りないことは実感してるし、恐怖でしかたない。だけどジタバタしてもしかたないので粛々と経験値を稼ぎレベルアップに勤しむだけ。つまりレベルアップ方法が分からなかった今までに比べればやることがはっきりしてるので気楽ではある。

胸を張って生きる(やや物理的に)

以前にも増して画面に向かい合う時間が増加したので眼精疲労や肩の疲れ、背中の疲れが増した。それにもともと猫背気味なのが相まってるので、物理的に胸を張り気味で居ることを心掛けたい。

同時に精神的にも胸を張っていきたい。生きたい。

時間をもっと上手く使いこなすようになる

何かに注力するとしたら今年はこれ。前からもふんわりと思ってはいたけど今年こそは本腰入れてやろうと思う。

無為な時間を減らす。有意義にすごす。行動には時間の余裕を持つ。具体的な施策はまだまだこれからだけど本気で取りくむことにした。

テキパキとやる、素早く動く、とかそういう感じではなく、静かに着実に処理していく、という感じ。ガっとやってダラーという感じではなく、力強く前に進むイメージというか。結果的に高効率な動き方というか。

上手く説明できないけど「時間のつかいかた」というものに注力してみようと思ってる。

直したいこと、新たにやりたいことは無数にあるけどまず第一に注力すべきは時間を使いこなすことだな、と思った。そんなこんなで本年もよろしくどうぞ。

これがないと捗らない、僕がカスタムしてるAtom設定(late 2017)

  1. 1. Config
  2. 2. Keymap
  3. 3. Stylesheet

前回の「これがないと捗らない、僕が使ってるAtomパッケージ(late2017)」を受けて、さらに追加でカスタムしてる部分。
つまり前回紹介したパッケージが入ってないと関係ないのもあったり。
あの大量のパッケージ郡とこの必須設定、あと紹介しなくてもいい超個人的設定を足すことで、今の僕の快適環境ができあがる。

ここまでカスタムすると他のエディタで入力しようとは思わないので、最近いろんなMarkdownエディタが増えたりしてもまったく希望に合わないのが残念。というか世間が本当に求めてるのはMarkdownビューワー兼ファイラで、エディタは外部エディタがいいんじゃないか、と思う(僕が欲しい、とも言う)。しかもLintも効かないんじゃあねぇ……

そんなこんなで大掃除ついでに設定の棚卸し第二弾。

Config

基本はPreferencesから設定すればいいと思う。というかそっちから設定してもconfigに反映される。
必須というのは日本語の約物まわりだけ、これだけで日本語入力がかなり快適に。

config.cson
"*":
# デフォルトで入ってるbracket-matherに日本語の括弧系も追加
"bracket-matcher":
autocompleteCharacters: [
"()"
"[]"
"{}"
"\"\""
"''"
"``"
"“”"
"‘’"
"«»"
"‹›"
"「」"
"『』"
"【】"
"()"
]
# custome-title用設定
core:
titleBar: "custom-inset"
"custom-title":
template: "<%= projectName %><% if (relativeFilePath) { %> - <%= relativeFilePath %><% } else { %> - <%= fileName %><% } %> <% if (gitHead) { %> [<%= gitHead %>]<% } %> - Atom"
# editor内の設定
editor:
# 文字として扱わないものにデフォルト以外の記号と日本語約物を追加
nonWordCharacters: "/\\()\"':,.;<>~!@#$%^&*|+=[]{}`?-…_、。!?「」『』【】()・”’‘~"
"toggle-quotes":
# バッククォートを追加
quoteCharacters: "\"'`"

Keymap

一部抜粋のなのでこれをこのまま使うと他のとコンフリクト起こす可能性があるので、参考程度に。
基本はEmacsのキーバインドをベース。
ただ、修飾キー周りが煩雑として特にルールもないので最近ちょっと困ってる。
なるべく各アプリやOSのデフォルトキーバインドに寄せたいが、
そのあたりのルールも明確に基準があるわけでもなく、
かといって修飾キーベースで操作単位のスコープにしたい、という思いが上手く噛み合わなくて歯痒い。

ここに書いてある以外にも大量に設定してるけどわりと良く忘れてしまうのでなんとかしたい。

keymap.cson
# for all
# ------------------------------------------------------------
'body':
# ctrl-tabによるタブ変更順を設定
'ctrl-tab ^ctrl': 'unset!'
'ctrl-tab': 'pane:show-next-item'
'ctrl-shift-tab ^ctrl': 'unset!'
'ctrl-shift-tab': 'pane:show-previous-item'
# line-jumperによる複数行移動をEmacs的キーバインドにする
'alt-v': 'line-jumper:move-up'
'alt-shift-v': 'line-jumper:select-up'
'ctrl-v': 'line-jumper:move-down'
'ctrl-shift-v': 'line-jumper:select-down'
'ctrl-k': 'editor:delete-line'

# text-editor for editing
# ------------------------------------------------------------
'atom-text-editor':
# Emacsのsubword mode的なキーバインド、キャメルケース等でも単語づつの移動が可能になる
'alt-b': 'editor:move-to-previous-subword-boundary'
'alt-backspace': 'editor:delete-to-beginning-of-subword'
'alt-d': 'editor:delete-to-end-of-subword'
'alt-f': 'editor:move-to-next-subword-boundary'
'alt-shift-b': 'editor:select-to-previous-subword-boundary'
'alt-shift-f': 'editor:select-to-next-subword-boundary'

# text-editor for editing
# ------------------------------------------------------------
# TODO: github-commitview-editor内でmulti-cursorが動かない問題
'atom-text-editor:not([mini])':
# multi-cursor-plusのキーバインド操作をemacベースにして設定
'ctrl-l': 'multi-cursor-plus:mark'
'ctrl-p': 'multi-cursor-plus:move-up'
'ctrl-n': 'multi-cursor-plus:move-down'
'ctrl-b': 'multi-cursor-plus:move-left'
'ctrl-f': 'multi-cursor-plus:move-right'
'ctrl-alt-b': 'multi-cursor-plus:move-to-beginning-of-word'
'ctrl-alt-f': 'multi-cursor-plus:move-to-end-of-word'
'ctrl-a': 'multi-cursor-plus:move-to-first-character-of-line'
'ctrl-e': 'multi-cursor-plus:move-to-end-of-line'
'ctrl-alt-home': 'multi-cursor-plus:move-to-top'
'ctrl-alt-end': 'multi-cursor-plus:move-to-bottom'
'ctrl-shift-p': 'multi-cursor-plus:select-up'
'ctrl-shift-n': 'multi-cursor-plus:select-down'
'ctrl-shift-b': 'multi-cursor-plus:select-left'
'ctrl-shift-f': 'multi-cursor-plus:select-right'
'ctrl-alt-shift-b': 'multi-cursor-plus:select-to-beginning-of-word'
'ctrl-alt-shift-f': 'multi-cursor-plus:select-to-end-of-word'
'ctrl-shift-a': 'multi-cursor-plus:select-to-first-character-of-line'
'ctrl-shift-e': 'multi-cursor-plus:select-to-end-of-line'
'ctrl-alt-shift-home': 'multi-cursor-plus:select-to-top'
'ctrl-alt-shift-end': 'multi-cursor-plus:select-to-bottom'
# Emmet展開(AquaSkk,AutoCompleteの挙動と近づける)
'ctrl-enter': 'emmet:expand-abbreviation'
# snipet展開中のカーソル移動(AquaSkk,AutoCompleteの挙動と近づける)
'tab': 'snippets:next-tab-stop'
'shift-tab': 'snippets:previous-tab-stop'
# atom-notes がeditor内からでも呼べるようにデフォルトを上書き
'cmd-shift-l': 'atom-notes:toggle'

# Stylus記述用
# ------------------------------------------------------------
# Emmet展開
'atom-text-editor[data-grammar~="stylus"]:not([mini])':
'ctrl-enter': 'emmet:expand-abbreviation-with-tab'

# Markdown記述用
# ------------------------------------------------------------
'atom-text-editor[data-grammar="text md"]':
'ctrl-backspace': 'markdown:outdent-list-item'

# Autocompleteによる補完がある場合専用
# ------------------------------------------------------------
'atom-text-editor.autocomplete-active':
# 選択をEmac的上下で可能に
'ctrl-p': 'core:move-up'
'ctrl-n': 'core:move-down'
# Enter:改行, Shift-Enter:補完入力
'enter': 'editor:newline'
'shift-enter': 'autocomplete-plus:confirm'
# Snipet展開中の場合にtabで前後の入力に移動できるように
'tab': 'snippets:next-tab-stop'
'shift-tab': 'snippets:previous-tab-stop'

# Tree view
# ------------------------------------------------------------
'.tree-view':
# toggle-vcs-ignored-filesが気づかずに誤爆するので設定なしにする
'i': 'unset!'

Stylesheet

おそらくテーマにatom-material-uiを使ってないとUI周り、tree-viewとかはほぼやりなおしな気がする。
というか、atom-material-uiのそのへんが気にくわないので直してる感じ。

他は気づきたいものはちゃんと目立たせたりとか。
あまり必要なさそうなものは載せてない。

styles.less
// 全体的なUI設定
// ------------------------------------------------------------
// 全体のフォント設定
atom-workspace {
font-family: 'Noto Sans UI', 'Noto Sans CJK JP', -apple-system,
'BlinkMacSystemFont', 'Hiragino Kaku Gothic ProN', sans-serif;
}
// tree-view, bottom-dock, right-drawerの幅制御
atom-panel-container {
.left {
max-width: 240px;
}
.right {
max-width: 240px;
}
.bottom {
max-height: 240px;
}
}
// Tree-viewの文字サイズ、行間などが納得いかないのでカスタム
.tree-view {
font-size: 0.9rem;
}
.tree-view .full-menu {
padding-left: 4px;
}
.list-tree .list-nested-item > .list-tree > li,
.list-tree .list-nested-item > .list-group > li {
padding-left: 16px;
}
.list-tree.has-collapsable-children .list-nested-item > .list-item::before {
margin-right: 4px;
}
.list-group .icon::before,
.list-tree .icon::before {
margin-right: 8px;
}
.list-tree.has-collapsable-children li.list-item {
margin-left: 14px;
}
.list-tree.has-collapsable-children .list-nested-item > .list-tree > li,
.list-tree.has-collapsable-children .list-nested-item > .list-group > li {
padding-left: 24px;
}
.list-group li:not(.list-nested-item),
.list-tree li:not(.list-nested-item),
.list-group li.list-nested-item > .list-item,
.list-tree li.list-nested-item > .list-item {
line-height: 1.5rem;
}
.list-group .selected::before,
.list-tree .selected::before {
height: 1.5rem;
}

// リガチャのあるフォントに対応(Hasklig)
// ------------------------------------------------------------
atom-text-editor {
text-rendering: optimizeLegibility;
}
atom-text-editor.editor .syntax--string.syntax--quoted,
atom-text-editor.editor .syntax--string.syntax--regexp {
-webkit-font-feature-settings: 'liga' off, 'calt' off;
}
// ファイルやフォルダ、プロジェクト、コマンド検索で使われるミニエディタをカスタム
// -------------------------------------------------------------
atom-text-editor.editor.mini {
font-size: 1.2rem;
color: #fff !important;
padding-top: 0;
line-height: 1.75rem;
}
.tree-view-search-bar .editor.mini {
font-size: 1.2rem;
}
.advanced-open-file .editor.mini {
font-size: 1.2rem;
}
.advanced-open-file li.list-item {
line-height: 1.75rem !important;
font-size: 1rem;
}
// 全角スペースを目立たせる(idegraphic-space)
// ------------------------------------------------------------
atom-text-editor,
atom-text-editor.editor {
.highlight.ideographic-space {
.region:after {
color: #800000;
content: '×';
background-color: #cccccc;
}
}
.line-number.ruby-block-highlight {
background: rgba(215, 0, 0, 0.4);
}

.highlights {
.ruby-block-highlight .region {
background: rgba(215, 0, 0, 0.4);
}
}
}
// 対応する括弧を目立たせる(Bracket-matcher)
// ------------------------------------------------------------
.bracket-matcher .region {
background: rgba(215, 0, 0, 0.4);
border: 1px solid #b71c1c !important;
position: absolute;
}
// コメントが斜体にならないようにする
// ------------------------------------------------------------
atom-text-editor.editor {
.syntax--comment {
font-style: normal;
}
}
// document-outlineがダークテーマでも問題ないように
// ------------------------------------------------------------
.document-outline heading-node.list-nested-item.highlight {
background: rgba(255, 255, 255, 0.061);
}

これがないと捗らない、僕が使ってるAtomパッケージ(late2017)

  1. 1. テーマ
    1. 1.1. UIテーマ
      1. 1.1.1. atom-material-ui
    2. 1.2. シンタックステーマ
      1. 1.2.1. gruvbox-plus-syntax
  2. 2. 共通
    1. 2.1. 選択系、変換、入力補助
      1. 2.1.1. Sublime-Style-Column-Selection
      2. 2.1.2. change-case
      3. 2.1.3. editorconfig
      4. 2.1.4. expand-region
      5. 2.1.5. highlight-column
      6. 2.1.6. highlight-line
      7. 2.1.7. highlight-selected
      8. 2.1.8. line-jumper
      9. 2.1.9. lines
      10. 2.1.10. toggle-quotes
      11. 2.1.11. toggler
      12. 2.1.12. trailing-semicolon
      13. 2.1.13. trailing-spaces
      14. 2.1.14. sequential-number
      15. 2.1.15. show-ideographic-space
      16. 2.1.16. symbols-tree-view
      17. 2.1.17. tabs-to-spaces
      18. 2.1.18. todo-show
      19. 2.1.19. multi-cursor-plus
      20. 2.1.20. pigments
      21. 2.1.21. regex-railroad-diagram
      22. 2.1.22. autocomplete-paths
    2. 2.2. ファイル、タブ、ペイン操作系
      1. 2.2.1. atom-fuzzy-grep
      2. 2.2.2. split-diff
      3. 2.2.3. advanced-open-file
      4. 2.2.4. douglas
      5. 2.2.5. expose
      6. 2.2.6. hey-pane
      7. 2.2.7. tree-view-filter
      8. 2.2.8. tree-view-git-status
      9. 2.2.9. zentabs
      10. 2.2.10. auto-encoding
      11. 2.2.11. convert-to-utf8
    3. 2.3. Linter系
      1. 2.3.1. linter
      2. 2.3.2. linter-ui-default
    4. 2.4. MiniMap系
      1. 2.4.1. minimap
      2. 2.4.2. minimap-autohider
      3. 2.4.3. minimap-find-and-replace
      4. 2.4.4. minimap-highlight-selected
      5. 2.4.5. minimap-pigments
    5. 2.5. HyperClick系
      1. 2.5.1. hyperclick
      2. 2.5.2. hyperlink-hyperclick
    6. 2.6. 汎用フォーマッタ
      1. 2.6.1. aligner
      2. 2.6.2. atom-beautify
    7. 2.7. その他
      1. 2.7.1. sync-settings
      2. 2.7.2. atom-notes
      3. 2.7.3. atomic-chrome
      4. 2.7.4. platformio-ide-terminal
      5. 2.7.5. tablr
      6. 2.7.6. preview
      7. 2.7.7. auto-update-packages
      8. 2.7.8. busy-signal
      9. 2.7.9. custom-title
      10. 2.7.10. file-icons
      11. 2.7.11. file-types
      12. 2.7.12. goto-definition
  3. 3. 各言語とか用途とか別
    1. 3.1. Git
      1. 3.1.1. gist
      2. 3.1.2. git-blame
      3. 3.1.3. git-plus
      4. 3.1.4. merge-conflicts
    2. 3.2. Markdown
      1. 3.2.1. markdown-preview-enhanced
      2. 3.2.2. document-outline
      3. 3.2.3. markdown-table-editor
      4. 3.2.4. markdown-writer
      5. 3.2.5. toggle-markdown-task
      6. 3.2.6. tidy-markdown
      7. 3.2.7. language-markdown
      8. 3.2.8. linter-textlint
    3. 3.3. JSON
      1. 3.3.1. atom-json-color
      2. 3.3.2. pretty-json
      3. 3.3.3. linter-jsonlint
    4. 3.4. Ruby
      1. 3.4.1. language-haml
      2. 3.4.2. language-slim
      3. 3.4.3. language-rspec
      4. 3.4.4. language-rabl
      5. 3.4.5. linter-rubocop
      6. 3.4.6. linter-erb
      7. 3.4.7. linter-haml
      8. 3.4.8. linter-slim
      9. 3.4.9. autocomplete-ruby
      10. 3.4.10. rubocop-auto-correct
      11. 3.4.11. rufo-atom
    5. 3.5. Rails用
      1. 3.5.1. autocomplete-rails-partial
      2. 3.5.2. rails-db-scheme
      3. 3.5.3. rails-open-rspec
      4. 3.5.4. rspec
      5. 3.5.5. ruby-block
      6. 3.5.6. rails-i18n-plus
      7. 3.5.7. rails-snippets
      8. 3.5.8. rails-transporter
    6. 3.6. JavaScript系(node.jsやメタ言語、フレームワーク含む)
      1. 3.6.1. atom-typescript
      2. 3.6.2. language-vue
      3. 3.6.3. linter-eslint
      4. 3.6.4. linter-coffeelint
      5. 3.6.5. prettier-atom
      6. 3.6.6. aligner-javascript
      7. 3.6.7. js-hyperclick
      8. 3.6.8. vue-hyperclick
      9. 3.6.9. vue2-autocomplete
      10. 3.6.10. gulp-snippets
      11. 3.6.11. jquery-snippets
    7. 3.7. HTML系(メタ言語含む)
      1. 3.7.1. language-jade
      2. 3.7.2. language-pug
      3. 3.7.3. linter-htmlhint
      4. 3.7.4. linter-pug
      5. 3.7.5. tag
      6. 3.7.6. emmet
      7. 3.7.7. indent-tooltip
    8. 3.8. CSS系(メタ言語含む)
      1. 3.8.1. Stylus
      2. 3.8.2. linter-stylelint
      3. 3.8.3. linter-scss-lint
      4. 3.8.4. linter-stylint
      5. 3.8.5. autocomplete-css-with-stylus-support
    9. 3.9. PUML
      1. 3.9.1. language-plantuml
      2. 3.9.2. plantuml-viewer
    10. 3.10. その他の言語系
      1. 3.10.1. language-apache
      2. 3.10.2. language-nginx
      3. 3.10.3. language-lisp

Atomのカスタマイズはパッケージだけじゃないんだけど、とりあえずパッケージ入れないことには始まらないってことで、2017年の棚卸し的に列挙しておこうと思う。

僕の場合、Ruby(Rails)とJavaScript,HTML,CSSを書くことが多いのでそのへんに特化してるカスタマイズになってるはず。使用パッケージが結構多くてそれぞれのパッケージ間でキーマップがバッティングしてたり、スタイルの競合がおこってたりするのでstylesheetとkeymapで弄ってたり、configで特別な設定してたりするけど、それはそれで別の記事に書く。

テーマ

UIテーマ

atom-material-ui

いろいろ設定できるし見やすいので。
ちなみに設定だけだと各種パッケージと上手く行かなかったりするので
ゴリゴリにStylesheet弄ってる。そこについては後日書きます。

シンタックステーマ

gruvbox-plus-syntax

ビビッドな発色も少なく丁度いい感じ。
すごい好きなんだけど、ややメジャーではないらしくエディタのテーマとか選べるツールとかにgruvboxテーマがないのが残念。

共通

選択系、変換、入力補助

Sublime-Style-Column-Selection

SublimeText的な矩形選択(見たままの四角の範囲を選択可能)。

change-case

選択した単語のキャメルケース、スネークケースとかを相互に変換。ケバブケースもドット記法なども幅広く対応しててうれしい。

editorconfig

コーディングフォーマット統一のためのeditorconfigをAtomで対応するためのパッケージ。

expand-region

選択範囲を文字、単語、クォートや括弧で囲んだ要素、と順々に大きくできる。

highlight-column

キャレットのある列をハイライト。

highlight-line

キャレットのある行をハイライト。

highlight-selected

選択してるものと同じものをハイライト。

line-jumper

設定した行数文だけキャレットを一気に移動する。僕はEmacsのページ送り的な送り用途として使用している。

lines

選択した複数行をA-Z順にソート

toggle-quotes

シングルクォートとダブルクォートのトグル変換。configで設定すれば例えばバッククォートも対応できたりする。

toggler

Booleanのような二元的要素をトグル変換。専用のconfigを設定すれば、自分で対応を文字列を増やせる。

trailing-semicolon

行末にセミコロンとカンマをつける。キーバインドで設定すると捗る。

trailing-spaces

行末のスペースを目立たせる。

sequential-number

複数行にわたって連番生成連番の文字列を生成。

show-ideographic-space

全角スペースを目立たせる。わかりやすくStylesheetでカスタムした設定すると良い感じ。

symbols-tree-view

メソッド定義などの一覧をドロワーにツリー型で表示。

tabs-to-spaces

インデントのタブorスペースをトグル変換。ファイル保存時にファイル全体に対して自動実行も可能。

todo-show

プロジェクト内に存在するTODOやNOTEなどのコメントを抽出して表示。

multi-cursor-plus

デフォルトより高機能なマルチカーソル。キーバインドがバッティングしやすいので僕はゴリゴリにkeymapを編集してる。

pigments

カラーコードになってる部分をその色で表示。CSSとか書くなら。StylusやSassの変数も対応してるので重宝する。

regex-railroad-diagram

正規表現をビジュアルで表示してくれる。

autocomplete-paths

path入力のAutocompleteアドオン、でもたまに邪魔なときがある気がする。

ファイル、タブ、ペイン操作系

atom-fuzzy-grep

プロジェクト内をag的なfuzzyGrepしてファイル表示。

split-diff

Paneで分割してDiff表示、見やすい。しかも保存してない状態でもDiffとれるので、長大な文字列とか大きめなオブジェクトを一時的に比較する時も重宝する。

advanced-open-file

ディレクトリ毎に絞り込みでファイルを開ける、フルキーボードで階層ごとに掘っていく場合に便利。

douglas

CLI用リポジトリ管理ツールghqのローカル管理下にあるプロジェクトのショートカット、全てのプロジェクトがGit管理されていればプロジェクトマネージャーはこれだけで十分だと思う。

expose

開いてるタブをmacのexpose的に表示、切り替えできるやつ。

hey-pane

複数paneで分割してる時にアクティブなペインを自動的にほぼ最大化する。フォーカスしたペインに自動的に適用したりもできる。

tree-view-filter

tree-viewで表示しているファイルをインクリメンタルに絞り込む。

tree-view-git-status

tree-view上でgit-statusによる色分け表示する。追加ファイルや変更したファイルとかが視覚的にわかりやすいし、未コミットのファイルもみつけやすい。

zentabs

最大タブ数の設定制御。設定数を越えると古いタブから自動的に閉じていれ変わる挙動になる。設定でピン止めしたファイルや、未コミットファイル除外したりもできる。たくさんファイル開きすぎてわかんなくなっちゃうので。

auto-encoding

エンコーディングの自動判別。

convert-to-utf8

マルチバイトのファイルをutf-8に変換。

Linter系

linter

Linter機能。各言語用は後述。ないと死ぬ。
各言語用のLintは後述。

linter-ui-default

Linter表示用。たぶんLinter入れると入ってくるはず。

MiniMap系

minimap

画面端にコード全体をざっと単純化して見わたせるようなやつを表示。他のパッケージで拡張可能。

minimap-autohider

ミニマップをスクロールしてない時以外は自動的に非表示。

minimap-find-and-replace

ミニマップ内で検索文字列を全てハイライト。

minimap-highlight-selected

ミニマップ内で選択した文字を全てハイライト。

minimap-pigments

ミニマップ内でカラーコード部分をカラー表示。

HyperClick系

hyperclick

コード中のいろんな要素がクリッカブルになる、キーバインドにも対応してるので対象の文字列にキャレットがある時にキー操作でも動作できる。**-hyperclick系のアドオンとかで拡張可能。言語特化のアドオンは、後述の言語別のところで。

URLをクリッカブルにしてデフォルトブラウザで開けるようになる。

汎用フォーマッタ

aligner

オブジェクトの定義とか、連続して変数に値を入れるとき、=:をセパレータとして左右のインデントが揃うようにしてくれるフォーマッタ。言語別のものもある。

atom-beautify

ネストした要素のインデントをうまいこと整形してくれるフォーマッタ。JSONとかも良い感じにやってくれたり。けっこういろいろ対応してる。

その他

sync-settings

GitHubGist経由でAtomの設定を複数端末で同期する、アンインストールしたパッケージも同期できるようになって凄く便利になった、ないと死ぬ。

atom-notes

notational-velocityライクなノートシステムをAtomに組み込み、メモ系の集積ができてそれがカスタマイズした強力な補完機能のAtomで編集できるのは強み。ないと死ぬ。

atomic-chrome

同名のchrome-extensionをGoogle Chrome系のブラウザに入れることで、ブラウザで開いてるページのtextareaを同期的にAtomで編集できるようになる。例えばPull RequestなどMarkdown対応のテキストエリアをAtomで編集できるのはかなり便利。ないと死ぬ。

platformio-ide-terminal

Atom内でターミナルを動作させる。

tablr

CSVエディタ。

preview

プリプロセッサ言語から元言語へコンパイル後の表示。

auto-update-packages

パッケージにアップデートがあったら自動でアップデートする。ちょいちょい自分で確認しなくていいので楽。

busy-signal

ステータスバーに状況表示アイコンをプラス。確かLinterと一緒に入ってくるはず。

custom-title

Atomのウインドウに表示されるタイトルのルールを変更できるようになる。上手く好きなようにファイル名の表示とかにカスタマイズすると地味に便利。

file-icons

ツリービューやタブにファイルのアイコンを表示して視認性を上げる。わりとないと死ぬ。現在もアップデートが盛んでちょいちょい対応アイコン増えてるのがうれしい。

file-types

自動で判別されるファイルタイプのルールをカスタマイズを楽にする。

goto-definition

メソッドの定義元にジャンプできるようになる。

各言語とか用途とか別

Git

gist

GitHubのGistを編集したりアップロードしたり、挿入したり。Gist系はいくつかあったけどこれが一番使いやすかった。

git-blame

行ごとにgitで変更した人を表示する。

git-plus

よく使うgit操作をAtomから直でできる、Atomのコマンド補完が効くので便利、基本的なgit操作はこれだけでいける。わりとないと死ぬ。

merge-conflicts

gitでmergeしようとしてコンフリクトした時の編集サポート。コンフリクトの解消はGitKrakenでやってるけど、一応入れてる。

Markdown

markdown-preview-enhanced

デフォルトのMarkdownプレビューより高機能なプレビュー、TOCやプレゼンモードもあったりする。目次機能もあったり、いろいろと便利。

document-outline

右ドロワーに編集中のMarkdownの目次をページ内リンク付きで表示。

markdown-table-editor

Markdownのテーブル記法編集補助、うまいこと縦のカラム表示を整えてくれる。

markdown-writer

Markdownの全般的な入力補助。とりあえず入れてる。

toggle-markdown-task

Markdownのチェックボックス記法のチェック状態のトグル変換。そんなに使わないけどいちいちキャレットを移動するのが面倒なので。

tidy-markdown

Markdownのテーブル記法の整形や番号付きリスト記法の番号振りなおしなど、フォーマッタ。

language-markdown

デフォルトのものより高機能なハイライタ。

linter-textlint

特に日本語に強い自然言語用のLinter、textlintをAtomで使えるように。Markdown以外でも効く。

JSON

atom-json-color

JSONファイルを階層によってカラーリングを変えて視認性を上げる。

pretty-json

JSONファイルの整形フォーマッタ。

linter-jsonlint

JSON用のLinterアドオン。

Ruby

language-haml

haml用の言語ファイル。

language-slim

Slim用の言語ファイル。

language-rspec

Rspec(Rubyのテストフレームワーク)用の言語ファイル。

language-rabl

Rabl(Ruby用のJSONやxmlに特化したテンプレートサポートGem)用の言語ファイル。

linter-rubocop

Rubocop用のLinterアドオン。

linter-erb

erb用のLinterアドオン。

linter-haml

haml用のLinterアドオン。

linter-slim

slim用のLinterアドオン。

autocomplete-ruby

Ruby用のAutocompleteアドオン。

rubocop-auto-correct

Rubocopルールに従って自動修正。

rufo-atom

Ruby用フォーマッタのrufoをAtomから実行、まだsave時に自動でやってくれたりはしないもよう。JSのprettierな感じになってくれるとうれしいな。

Rails用

autocomplete-rails-partial

Railsのパーシャビュー名のための用Autocompleteアドオン。

rails-db-scheme

schema.rbを参照して自動補完や定義元にジャンプ。

rails-open-rspec

現在開いてるファイルに対応したRspecのファイルを開く。

rspec

Atom上でRspecをrun。

ruby-block

do``if``begenendなどの対になるブロック要素をハイライト。

rails-i18n-plus

Railsのi18n用のAutocompleteとHyperClickアドオンのセット。

rails-snippets

Rails用のスニペット集。

rails-transporter

Model,View,Controllerなど対応するファイル同士を素早く開けるようにする。

JavaScript系(node.jsやメタ言語、フレームワーク含む)

atom-typescript

TypeScriptの言語ファイルか補完や便利機能まで、IDE的サポート。

language-vue

Vue.js用の言語ファイル。

linter-eslint

JavaScript用のLintパッケージであるEslintのAtom-lintアドオン、prettierと連携もできる、ないと死ぬ。

linter-coffeelint

CoffeeScript用のLinterアドオン。

prettier-atom

JSのフォーマッタprettierをAtomから実行、save時に自動実行できる、ないと死ぬ。

aligner-javascript

JavaScript用のalignerアドオン。

js-hyperclick

JavaScript用のHyperClickアドオン。

vue-hyperclick

vue.js用HyperClickアドオン。

vue2-autocomplete

Vue.js用Autocompleteアドオン。

gulp-snippets

gulp用のスニペット集。

jquery-snippets

jquery用のスニペット集。

HTML系(メタ言語含む)

個人的にはPug(Jade)しか書きたくないけど、どうしても使わざるを得ないので他も少々。

language-jade

HTMLプリプロセッサJade用の言語ファイル。

language-pug

JadeはPugになりました。

linter-htmlhint

HTML用Linterアドオン。

linter-pug

Pug用Linterアドオン。

tag

HTMLの閉じタグのショートカットと補完。Pugで書けばいらないんだけどね。

emmet

html,css(プリプロセッサ含む)の強力なスニペット集。

indent-tooltip

Jade(pug)やStylus,Sassのインデントベース記法の環境で現在のキャレットの位置がどの要素のネスト中なのかツールチップで表示。

CSS系(メタ言語含む)

個人的にはStylusしか書きたくないけど、どうしても使わざるを得ないので他も少々。

Stylus

Stylus用の言語ファイルとスニペット集。

linter-stylelint

CSS用のLinterアドオン。

linter-scss-lint

SCSS(SASS含む)のLinterアドオン。

linter-stylint

Stylus用のLinterアドオン。

autocomplete-css-with-stylus-support

Stylus用のAutocompleteアドオン。

PUML

UMLをテキストから表現したもの。細かいレイアウトは難しいもののテキストならgit管理もできるし素早くかけるので覚えてよかった。

language-plantuml

PlantUMLの言語ファイル

plantuml-viewer

PlantUML用のUML図ビューワ

その他の言語系

language-apache

language-nginx

language-lisp

もう入籍から2年半もたってしまったけど結婚式をした。そんな時ぐらい惚気てもいいじゃあないか。

  1. 1. 自己紹介
    1. 1.1. 夫(僕)
    2. 1.2.
  2. 2. で、今さらだけど結婚式した
  3. 3. で、結婚式あげての感想
  4. 4. で、結婚してから思うこと
  5. 5. で、本題
    1. 5.1. 虫を怖がらない、それどころか触りたがる
    2. 5.2. 英語を喋れる
    3. 5.3. 僕の友人にも上手くつきあってくれる
    4. 5.4. ゲームにつきあってくれる
    5. 5.5. 創作趣味がある
    6. 5.6. 自然に詳しい
    7. 5.7. 僕のやりたいことを理解してくれる
    8. 5.8. 酒好き
    9. 5.9. 僕の気がつかないことに気がつく
    10. 5.10. 家事もちゃんとやってくれる
  6. 6. おしまいに

という、題だけどせっかくなのでこの記事は妻・夫を愛してるITエンジニア Advent Calendar 2017 (12/19)の記事にもなってたりします。書いてみて思ったけどあんまりエンジニア的な話とは関係なかった。

自己紹介

アドベントカレンダー経由で見る人もおられると思うので書いておこうと思います。

夫(僕)

  • エンジニアとしてのキャリアは長くない
    • 仕事ではサーバーサイド
    • 趣味はフロントエンド
  • いろいろ全く別の業界での仕事をいくつかしてエンジニアになりました
  • 世界をいろいろ旅をしてました
    • ユーラシア大陸を陸路で横断
    • 南米大陸を陸路で一周
  • 多言語話者
    • 日本語(母語)、英語、スペイン語、広東語
  • 元武道家
  • ゲーム全般が好き
    • アナログは中量級の読み合い重視のゲーム
    • デジタルはアクションゲー、元格ゲーマー
  • 料理好き
  • 革細工もたまにやります

  • 自然系の職業
    • 野外泊は余裕です系?
  • 動物大好き
  • 植物大好き
  • 編みものとか好き
  • 英語喋れる

で、今さらだけど結婚式した

出会った時には僕はもう南米に旅に行くことを決めてた。しかも当時は2年予定。それでも宣言どおり付き合って半年ぐらいで旅立った。一人で。で、まあいろいろあって、僕がパラグアイに居た時に妻さん(当時、彼女)の仕事の都合が1ヶ月ぐらい時間ができたので、合流してブラジルで農業したり、熱帯雨林のほうに行ったり、そんなんでプロポーズして。それでもまた一人で旅を続けて。別の理由から帰国を早めたものの、結局1年ぐらい待たせた。

僕の帰国後すぐ二人で住み込みで冬の山で働き、雪が融けて山を降りてすぐ入籍した。入籍もそれだけで、式もなければ指輪もない。別に二人ともそれに興味がなかったからなんだけど、それから約2年半、つい先日結婚式を挙げた。

入籍当初のまあ写真ぐらいは撮っておこうか、なんて話後回しにした挙句だ。どうせ写真撮るぐらいなら式を挙げてしまえ、と式をした。もっと先伸ばしにしたらきっとやらなくなってしまうだろうと思ったからやった。法律的に結婚してたけど神道的に結婚してないからやった。そんな感じ。

で、結婚式あげての感想

よかった。なんか一つのいい節目になった気がした。喉につかえてた骨がとれた気がした。両親と兄弟だけを呼んだ簡素なもので、披露宴もなく食事会で解散というごくごく小さな結婚式だったけど、すごくやって良かった。入籍して2年半、特に仲違いすることもなく来てるけど改めて縁を結びなおした感じ。

結婚式を挙げることになって、場所を見たり日取りを決めたり、あれやこれや決めたり準備したり、今まで知らなかった事が知れたというのと、やる側の体験をしたっていうのが凄くいい経験になった。大変さがわかった。世間はこれに披露宴とか二次会とか、はては新婚旅行やるのかと思うと尊敬する。それが身に染みて理解できただけでも良い経験になった。

で、結婚してから思うこと

前にも書いたけど、結婚契約書は作って良かったと思う。契約を決めることが良いんじゃなくて、契約を決めるにあたっての暗黙の了解とか勝手に思いこんでる部分に関してちゃんと話しあうきっかけになったのが良かった。

それでもまだまだ意見が合わない部分があるなぁ、と日々思う。が、妻さんじゃなかったらもっと合わないと思う。僕は自分で理屈屋で偏屈な部分があって、自分の決めた意見に関しては強い主張がある人間だと思う。意見が合わないといえども冷静に見れば多分妻さん以上に良い人に巡り会えないだろうと思ってる。そう思ったから結婚したんだけども。

で、本題

じゃあウチの妻さんのここが良いってところを、せっかくのこの節目に挙げていこうと思う。

虫を怖がらない、それどころか触りたがる

僕も虫は刺したりして痒くなったり痛いのが続いたりする奴以外は全然大丈夫。旅の最中で蚊やブヨ、百足にダニに南京虫に比べれば刺さない虫なんてどうということはない。妻さんもそんな感じ。むしろ、そこらにいる虫、バッタや蜘蛛なんかは率先して掴まえにいって可愛がるタイプ。

僕は人が虫嫌いになるのは後天的だと思ってて、小さいころは掴まえたりして遊んでたのに大人になるにつれ嫌いになると思ってる。それは人間社会で嫌うのが常識、みたいになっているがゆえの社会的理由だと思ってる。害はないどころか場合によっては益虫も▽いるのに。

それを、見ただけでキャー!飛んだらキャー!なんてドタバタされるとうるさくてかなわん。虫よりうっとおしい。なんかそういう過剰に拒絶反応する人が僕はとても苦手。わりと女性にそういう人が多い傾向にあると思う。だから女性で虫を苦手じゃないってのはかなり得がたい嬉しいポイント。

英語を喋れる

僕が海外をフラフラしてたので海外の友人がけっこう多い。で、その友人達がたまに日本に遊びにきたりする。そこへ妻さんも同席したりする。もし仮に英語ができなかったら話がまったく入れない、もしくは僕が通訳しなきゃいけない。直接コミュニケーションがとれない、ってのは身振りや雰囲気でつたわるし、カタコト英語でも通じることもあるからどうでもいいんだけど、僕と友人の話に入れないって状況だったら大変だと思う。

僕らの場合、相手が外国人の場合はなるべく僕ら夫婦も英語で会話して友人にも僕らがどういう会話してるかわかるようにしてる。そうするとみんなハッピーでしょ。それが簡単にできるので英語ができる妻ってのは、僕が英語に不自由なくてもかなりありがたい。

僕の友人にも上手くつきあってくれる

海外をフラフラしたたり、職をいろいろ変えたり、ネットで遊んでたり、武道もやってたり、地元の友人がいたり、そんなことをしてたら僕はわりと友人が多いほうだと思う。そんな和なかにも妻さんも入ってきてくれるのがありがたい。誰でも初対面はそれなりに構えるしエネルギー使うし大変だと思う。今ではけっこうな数の僕の友人達が妻さんともちゃんと友人になってくれて、すごく楽しい。

ゲームにつきあってくれる

僕はけっこうゲーマーなんだってことをわりと最近気づかされた。妻さんもちょっとゲームはやるとはいえ、僕ほどガチじゃない。それでも一緒にやったりしてくれるので、楽しいひとときを過ごせている。ガチの対戦系はさすがに年季が違うのか、僕のほうが優勢すぎてやらないけど、それでも僕が好きでやってるゲームに興味をもったりしてくれるのはありがたい。

ゲームをやらない人だとゲームをやってる僕が遊んでばっかり、みたいになってしまうので理解がある妻でほんと良かったと思ってる。

創作趣味がある

僕は常々、趣味は創作趣味と消費趣味を1つづつは最低持つべきだと思ってる。ほんとに余力がないとどんなに好きでも創作趣味が難しい時がある。それで消費趣味が必要なんだけど、かといって消費趣味だけだといろいろとキツい。満足感とかコスパとか。

僕もいろんなものを自分で作りたがりなので、例えば僕がパソコンをカタカタしてたり、革細工をやってる横で編み物してたり、という光景をふりかえると幸せな一時だなぁ、って思う。

自然に詳しい

僕が逆に自然に詳しくないからなんだけど、自然に詳しいことによって僕と妻さんでは見てる景色が明確に違う。二人で外を歩いてるとよく草木を見てる。単に草木の名前を知ってるだけじゃなくて、生息に関する情報を知ってるとなると、同じ木を見て得る情報量が全然違う。

素直に尊敬する。ややもすると羨ましいとさえ思う。自然からそれだけの情報がわかるんだったら楽しいだろうなーって思わせてくれる。自分にはあんまり興味なかったことを気づかせてくれて、教えてくれるのはそれだけで尊い。

僕のやりたいことを理解してくれる

僕は忙しかろうが週末にもジムにいったり、勉強会に参加したり。ゆっくりした日でも夢中でコード書いてたり、なんか作ってたり、ゲームに没頭してたり、ずっと本読んでたり。家のこともそこそこにいろんな事に手を出してる気がする。そんなことを続けてても基本的に咎められないのはありがたいなーと思ってる。

僕は、何か自分にとってやりたい事を決めたら他のことをほっぽってもやるタイプ、自分が多少しんどくても決めたことはやる、向上に繋がることはどんどんやる、というタイプなので容認してくれるのはありがたい。

酒好き

妻さんも僕のお酒飲むのが好き。ほぼ毎晩飲んでる。一人だけで飲むのはつまらない。僕の母は下戸で、僕の父親は晩酌派だったけど、父はいつも一人でちょっと寂しそうに飲んでる。だからこそ一緒に飲む相手と一緒に生活してるってだけで幸せなことだなぁと思う。二人で飲みながらゲームとか最高でしょ。

僕の気がつかないことに気がつく

僕はかなりシングルタスクで、いろんなことに気がつかない、気がまわらないことが多い。そして、気にしないことも多いなあと思う。気にしないことが多いのは利点でもあったりするけど、自分だけで生きられない以上、欠点にもなりうる。そういうときに気にしてつっこんでくれたりする存在がいるっていうのはありがたい。

家事もちゃんとやってくれる

僕は自分で家事も料理もやる。というか、当たり前なんだけど。妻さんも僕以上に家のことやってくれる。世間では家事は妻の仕事とされてるケースも多いと聞くけど、僕の中でそれはない。ありえない。家事は女性も男性も不自由なくできる仕事だから僕の中でやって当たり前の仕事。妻にだけ任せる理由がない。だから妻さんがご飯作ってくれるだけでもありがたいと思ってる。一人暮らしだったら全部自分でやるところ分担してできるだけで僕の中ではありがたいんだよなぁ。

おしまいに

と、まあこんな感じで挙げればキリがない。逆に合わないことも挙げようと思ったらそれなりにあるけど、そこは僕が気にならないからいい。今までの外国人と暮らしたりする経験の中で、そもそも言わなくてもわかる、常識を共有してる、と思うこと自体が非常識な世界で暮らしてきた。なので合わないことがあっても、大したことじゃない。さっきも言ったように、それ以上に合うこと、ありがたいと思うことが多すぎて妻さん以上の人が居ないと思ってるから幸せでしかたがない。

ずっと一人の旅人暮らしをしてきたもんで、自分のことは自分でするのが当たり前。なんだって自分でするように、できるようにしてきた。というかせざるをえなかった。むしろ頼ってたまるかこのやろう、と思ってやってきた。今でも一人でも何の不自由なく暮らしていける自負はある。

そんな昔をベースに考えたら今はいろんな事が助かって仕方がない。家事も食事の用意も分担してできるし、違う国の人との暮らしを考えたら合うところが多くて楽すぎて仕方がない。自然に詳しいし、自然的にハードな環境に強いのは逞しくて頼りになって仕方がない。

妻さんが必要かどうか、という問いがあったとしたら、ドライに答えれば不必要と言えるのかもしれない。僕の妻が、というより妻という存在が、なんだけど。その意識は結婚する前から変わってない。だって一人で身の周りのことができない男なんかカッコ悪いでしょう。そんな男で居ることは僕自信が許せない。

じゃあ妻さんと一緒に居る意味はないのか、というとそんなことは全くなく、むしろ結婚する時に「僕もあなたも一人で何の不自由なく生きていけるだけの強さがあると思う。でもあなたと一緒なら一人で居るより絶対楽しく生きていける自信がある。」と言った気持ちは今も変わってない。

ちなみに入籍をする時も、結婚式を挙げた今も「あなたを幸せにします」とは言ったことがないし、言うつもりもない。幸せになる、ならないは自分の気持ちの持ちようなので、相手の幸せは僕のコントロール範囲外だ。「幸せにします」は嘘になるので言わない、絶対。無責任にそんな約束はしない。逆に僕の幸せを担保して欲しいとも思わない。僕の幸せは僕がコントロールすることであって妻さんに任せてはいけないと思ってる。各々が各々の幸せを自分で上手いことやって、そんな二人が一緒だったらもっと幸せ、という話。

そんなこんななんやかんや結婚に対してネガティブな意見があったりするけど、全然そんなこと思ったことない。一緒に居てありがたくて、楽しくて、幸せな日々を過ごしてる。合うところ合わないところも全部ひっくるめて結婚して良かったなぁ、と思う日々です。

ゲムマ作戦記 2017年秋の陣 2日目

  1. 1. 時系列日記
    1. 1.1. 前日譚
    2. 1.2. 当日オープン前
    3. 1.3. オープン直前
    4. 1.4. オープン後、前半
    5. 1.5. 中盤
    6. 1.6. 終盤
  2. 2. 教訓
    1. 2.1. 前日までの準備
    2. 2.2. 待機準備
    3. 2.3. 参加中
  3. 3. 頒布側がこんな感じならうれしい
  4. 4. 感想
  5. 5. 今回の収穫(順不同 敬称略)
    1. 5.1. 買ったもの(レビューはそのうちできたらいいな)
    2. 5.2. 試遊したりしてめちゃめちゃ欲しかったけど諦めたもの(順不同 敬称略)

さる12月2、3日、東京ビッグサイトでゲームマーケット2017秋が開催された。そこへ行ってきたので早い話、レポートです。ほんとはすぐに書きたかったんだけどいろいろ忙しくてなかなか時間がとれなかった。ちなみに今回が初めて。

時系列日記

前日譚

事前にAmazon経由で買ってあったゲームマーケット地図とTwitterとにらめっこ。というのも、お作法というか状況が初めてゆえに全然読めない。大手が出すものでさえ売り切り再販なしとかざらなので、後悔のないようにしたいという思いが強かった。

Twitterで見かけた初参加者向けのお作法として小銭と千円札を十分に用意してお釣りが出ないように配慮するといい、とあった。ATMで9000円を何回かに分けておろしてきた。(最寄りのATMは10千円で1万円札が出てくる仕様だった)これは実際かなり有用で、ぴったりだすと、本人も受けとる側も、まだかまだかと後ろで並ぶ人もみんなハッピーになれる。

今回の目的、ゲムマに行くと決めたきっかけだったのはCygnusさんが作ってるボドゲ用の道具いろいろ。それ以外にも事前情報を見てみると面白そうなものいっぱいある。せっかくなので楽しみたい、そう思ってゲムマの公式サイトで日曜出展ブースの置いてあるものをかたっぱしからチェック。事前情報はもちろん、土日両日出展ブースはTwitterでも情報をチェック。特に気になったのは「売り切れるのか?いつまでに買えば間に合うのか?」。

そんなこんなで、絶対買う、優先的に買う、試遊してみて面白かったら買う、試遊だけして後日買う候補、などに分けてからお目当てのブースの位置を地図に書きこむ。絶対買う、優先的に買うのに効率的な周りルートを決める。どこで何をいくら分買うか計算しておく(どうせここまでやるならブースごとに分けてお金を用意しておけばもっとスムースだった)。

とめちゃめちゃ準備して気合いれたけど、終わってみて考えるとここまでは必要なかった気がする。

当日オープン前

朝10時にオープンで、待機列の開始は8時とのこと。。8時に最寄り駅の国際展示場に到着。そこからテクテク歩いて会場まで。実は今回の会場はビッグサイトの中でも一番奥な上に、オープン前用の待機列はさらに遠い駐車場になる。結局列に並んだのは8時20分ぐらい。後続で並ぶ人いないなー、おかしいなーと思ってたら実は1列目の最後尾だった。ちなみにここで約200人強。

完全な屋外だったけど寒いといえど日射しが暖く、風も強くなかったので助かった。けっこうみんな地べたに座ってた。100均のミニパイプイス持ってきたらよかったなぁ。そして座れるならmac持ってくれば作業もいろいろできたなぁ。なんて思った。僕は一人だったのだけど、周りは友人どおしゲームで遊ぶひと、地図を見ていろいろ考えるひと、など。でもこれ雨だったらけっこうキツかっただろうね。

ちなみに水分の摂取は抑えめで並ぶ前に行っておいたのでトイレに行くことはなかった。とはいえ列が動くまでは1人でもトイレに行っても大丈夫そうな感じ。

オープン直前

開場まで30分といったところで列が動く。開場前までみんなで移動するようだ。ふと見回すと1列目よりも遥かに長い2列目、3列目が。合計で1000人ぐらいはいそうな感じ。ちなみに待機列からの入場は本ゲートではなく別の入口からになる。時間になってオープン、みんなでチケット代わりの地図をかかげて入場!

オープン後、前半

あたり前だけど開幕ダッシュなんて絶対ダメ。とはいえみんなこころなしか早足になってる。僕もまずは最大のお目当てCygnusブースへ。おそらく5人目くらいかな。地図に書きこんでたリストを読み上げて購入品を伝える。前もって金額も計算してたので素晴しくスムーズ!が、受けとったら予想以上に板が大きくて鞄にしまえない、というアクシデント。ただゆっくりもしていられないし、後ろに並んでるお客さんもどんどん増えていくのでさっさとどいて次のブースへ。

もうこの時点で僕がゲムマに来た目的の7割は完了したに等しいけど、お次は優先的に買うリスト入りしてるブースへ行って買う、の繰り返し。Cygnus板が大きすぎて手持ちがいろいろと不便だったので公式エコバッグを買って入れたらすっきりした。

ひとまず絶対買う、優先的に買うものはやっつけたので試遊して面白かったら買う、もしくは話を聞いて欲しくなったら買うものブースへ。全部のブースが試遊卓があるわけじゃないのでしかたない。試遊してる間に売り切れとか嫌なのでここもなるべく優先準位つけたものから。

中盤


一段落ついたので、ブースを隅々まで回ってみることにした。特に企業系協賛ブースは入口あたりにあるので待機列組で入場場所が違った僕は中盤になって始めて入口まで。いろいろ見たり、話を聞いたり、時に試遊したりして楽しむ。あっという間に2時。

昼食を摂ることに。開場出てすぐのところに軽食系とか焼きそばやロコモコ丼とか売ってたけどイマイチ魅かかれなかったのでパス。ビッグサイトの内部にもいろいろレストランがあって、このころだと待つこともなく普通に入れたのでカレーを食べた。ここで買ったものを整理して大きすぎてエコトートに入れてたものもギリギリバックパックに詰めれた。これで多少身軽に。

終盤

さて、開場に戻ってまたブースを回ったり、話を聞いたり試遊したり。特に開発者の人の話が直接聞けるのが楽しかった。何が楽しいってみんな凄い良い笑顔。ざっくり言えば「ぼくのつくったさいきょうのボドゲ(もしくはお道具)」展覧会なわけで、みんなそれぞれに思い入れとか「このゲームのここが面白いんだぜ」っていうのが伝わってきて、そのパッションがものづくりの一端を担う僕にも良い刺激になったのが一番の収穫。

気になってたゲームのほか、最初に優先的に購入したボドゲも試遊できれば試遊することにした。というのも友人達とやるとき、僕がインストしなきゃいけない。なので説明書を熟読するより、一番詳しい人についてもらいながら1プレイしたほうが理解が早いと思って。

そういえばゲムマ大賞の発表はどこがステージかわからなくて見なかったなぁ。

そんなこんなであれよあれよと言う間に終了。終わってみるとどっと疲れた一日であった。帰ってから買ったゲームのスリーブ入れ作業が待っている。僕はかどまる派なので、どれだけの角をカットしなければならないのか…… そんなことはいったん忘れて、会場のお祭ムードの余韻にひたっておこうと思った。

教訓

ゲムマに参加しての教訓。

前日までの準備

お釣りの出ないように小銭と千円札の準備は本当に良かった。絶対買うものはいくらなのかメモっておくともっとGOOD。販売側はスーパーのように専用レジがあるわけではないし、専門の接客でもないので支払いの手際の良さを求めてはいけない。といっても殺気立つような急ぐ場面もなかったけど。

個人的には逆に開幕並ぶような人がガっと買って「いくらですか?」って万札出した時にはちょっと引いた。自分のためにも相手のためにも紳士のマナーを。

気になるゲームは予習とどこにあるかチェックしておくと良い。会場ではパっと見での情報はそんなに多くない。むしろ事前にルールや紹介動画みたり事前にできることはやっておいたほうが良い。ここはワーカープレイスコーナー、ここはトリテ、などと分かれてるわけでもなく、ブースの場所は完全にバラバラなので好みのゲームぐらいはチェックしておくと吉。

待機準備

外で待つのはやっぱり寒い。ちゃんと防寒具、荷物の容量とトレードオフだけど簡易イスがあってもいいかも。暇潰し用具も忘れずに。

ちなみに地図確認と経路のチェックはここでやっても良いかもしれない。ただ、どんな頒布品がいくらなのか、という情報は地図にはないので事前に見てなければ、ネットで見ることになる。僕は事前にチケット代わりのマップを買ってたけど、当日、待機列でも買うことができた。カタログも売ってた。前日までにマップを買ってなくても安心。

参加中

まず冬ということもあって、乾燥してる。そしてボドゲと接客という喋る要素満載。これは風邪の心配がやばい。飲みもののみ可なので、持ちこんで意識的に摂取しよう。

温度は暑いことはなかった、うっすら寒いかもなぐらい。コートを着て脱ぐには寒いが着てるのは少し暑いかも、ぐらい。マフラーしてたら暑いぐらい。そんな温度。(体感には個人差があります)

運送会社があって、買ったものを預けたり配送できたりしたが僕はしなかった。後から思えば利用しても良かった。もしくは会場外のコインロッカーに預けるなり。とにかくボドゲはかさばるし、重量はそんなにないとはいえやはり一日歩きまわって持ってるのはそれなりに大変。荷物は早めに切り離すべきだったな、と思う。終わった後の疲労度に大きく影響するはずだ。

開始早々売り切れることは滅多にない感じ。思ったのは、焦って開幕に買うより、話聞いたり可能であれば試遊してから買うべきだったなぁと思う。予算にも我が家の収納スペースにも限りがある。当日の限定効果+売り切れるかもという不安は危ない。財布がどんどん軽くなる。危ない。

名作と言われるボドゲでも、面白そうだと思ってプレイしてみて、あ、これ僕の好みじゃないな、ってことは往々にしてあると思う。言わんや出たばかりの同人ゲーだ。限りがないブルジョワジーならともかく。僕のような一般ピープルは吟味して買わなきゃいけない。そう簡単に売り切れないのでどうしても欲しいもの以外は焦らなくていいと思う。

例外的には土日両日で、土曜のぶん、日曜のぶんで分けないで頒布してるところ。今回の僕のように日曜だけ参加の場合、人気によっては日曜開幕の時点ですでに在庫僅少の可能性があるので。そういうところはあんまりなさそうだったけど。

最近ではネット販売もしてたり、ゲームショップやボドゲカフェに置いて委託販売してたりする例も多々あるので本当に焦らなくていいと思う。今回僕は確実にネットで手に入りそうなものは絶対買おうと思ってたものもスルーした。後日買えるので。だけど、当日の熱気が過ぎさって、限定効果も消えれば、試遊してもなお、買うのを様子見しておこうと思うものもあった。

こんなこと言っては作り手側には迷惑かもしれないけど、できれば試遊、最低でも実際に見たりブースの人と話したり、そしてその場でしか手に入らなそうなら、一旦落ちついてから考えてみてそれでも欲しかったら買う、ぐらいのスタンスで良かったかもしれない。買ったけどプレイされないゲームを所有してしまうよりかはよっぽど、自分にもスペースにも財布にもゲームにも優しい気がする。

可能であれば友人と何人かで来れたら良かったなーと思う。試遊するとき、一人だよ4人ゲームをするのに人が来るのを待たなきゃいけない、となるとちょっと尻込みする。4人で来れたら、みんなでやればいいし、2人はプレイしてもう2人は他の人達、仲間のプレイしない2人は他ブースみたりプレイを見てたりと幅広い行動が効率的にとれる。時間は有限だからね。

それに買うものも分散できる。コレクターじゃない限り、ボドゲは仲間で1つあれば事足りるので。今回残念ながら我が友人達はこぞって忙しく不参加だったのはけっこう悔やまれる。

ちなみにリアルカタンという資源を渡されて交換で全種類集めるイベントは、僕の持ってる麦がなんか不人気で木材の人と交換できずに終了。でも知らない人と話す良いきっかけになって楽しかった。

頒布側がこんな感じならうれしい

これは完全に傲慢な意見かもしれないけど、参考になれば。

ブースの場所番号をわかりやすく書いておいてくれるとうれしい。有名なサークルじゃない限り開発者ではなくゲームの名前で覚えてるもので。かといってマップにはゲームの名前ではなくサークル名で出てるわけで。あとは今どのへんに居るのかがわかりやすくなるので。

大まかでも在庫数が分かるとうれしいなー。今即決しなきゃいけないのか、悠長に試遊したり他のブースを見てきても間に合うのか、僅少じゃなくてもどれぐらい決断を後にまわしても良いのかがわかると嬉しいな。一般ピープルなので吟味する時間が欲しいんです。

マーケティング的には当日前に出せる情報はどんどん出してくれたほうが良いように思う。ルールブックが公開されている、されてないで判断材料としては全然違ってくるし、目星もつけやすい。ルール説明動画はもちろん、プレイ動画なんかもガンガンあったほうがいいんじゃないかな、人が楽しそうにプレイしてるだけで注目してしまうよ。

感想

本当にどの出展ブースも同人ゲーと思えないぐらいのクオリティですごいと思った。やっぱりビジュアルで突出してるところは目を引くなぁ、と思った反面、元々DTP畑出身の僕としてはここをこうしたらもっといいのに、と思うこともそれなりにあった。カード効果のフォントサイズが小さかったり、フォントと雰囲気がちょっとあってなかったり、ルールブックのレイアウトがまだまだ追い込みようがあったり。

とはいえ、本当、どれも同人ゲーのクオリティを遥かに越えている気がした。ゲームの作りこみはゲーム作者である以上とことんやるだろうけどそれ以外のできない部分、ビジュアルだったり、装丁だったり。しかも得てして初見ではその部分の作り込みが注目度を分けることも少なくないと思う。

今回、道具は大満足だけどゲームの購入に関しては予算や環境を加味すると様子見できたなぁと思う。正直に言えばちょっと勢いで買いすぎたな。とはいえ沢山のゲームを試遊できるお祭りだし、来年も行きたいなぁと思った。

今回の収穫(順不同 敬称略)

買ったもの(レビューはそのうちできたらいいな)

試遊したりしてめちゃめちゃ欲しかったけど諦めたもの(順不同 敬称略)

  • RAMCLEAR
    • ヘルトウクン
      • めちゃめちゃ面白かったけど、2人プレイ限定なのと2人プレイのメイン相手の妻さんには合わなそうだった
  • グランドアゲームズ
    • キャプテンダイス 第2版
      • 予算切れ+ネットで買えそうだったので。たぶん将来的に買ってしまうぽい。
  • 梟老堂
    • イアルへの道
      • 予算切れ+ネットで買えそうだったので。これもたぶん将来的には欲しい。

そのほかのもたくさんたくさん。お金と置くスペースはいくらあっても足りません!