開発の小ネタ劇場

こんにちは、id:eitoball です。

この記事は、Misoca Advent Calendar 2017 の24日目の記事です。

今日は、クリスマス・イブですね。明日は、ruby 2.5.0 のリリースが予定されています。もう少し気の利いたことが書くといいのですが、さらっと始めます。

今回は、様々なMisocaのメンバーにエディタやシェルの使い方などといった主に開発に関する小ネタ(ティップス)を紹介してもらいます。

RubyMine で Neovim を使う

by id:eitoball

先日、RubyMine を使うようになったという記事を書きましたが、まだ、vi 系のエディタを使いたいときがあります。RubyMine の「ターミナル」から起動してもいいのですが、ANSI エスケープを正しく処理できないなど若干の問題があるので、正しく処理する iTerm 2 などのターミナルプログラム上で起動する方が快適に編集ができます。

そこで、RubyMine の "External Tools" neovim-remote を使って、快適に Neovim を使うようにします。設定方法は以下のようになります。

  1. このページ で説明されているように neovim-remote を設定します。
  2. RubyMine の "External Tools" で neovim-remote を起動するようにする。以下は設定例です。

screenshot.png (139.1 kB)

これだけになります。後は、ターミナルを開いて NVIM_LISTEN_ADDRESS=/tmp/nvimsocket nvim のように Neovim を事前に起動しておいて、RubyMine でファイルを開いておいて、メニューから "External Tools" -> "neovim" を指定すれば、 Neovim でファイルを開きます。"Keymap" にてショートカットを割り当てておくと便利です。僕の場合は、Shift-Ctrl-Command-V を割り当てています。

Neovim で変更する場合は、RubyMine で自動的に反映されます。RubyMine で変更する場合は、 Neovim では、:e で再読み込みをして反映します。

test.gif (1.1 MB)

注意するのは、事前に Neovim を開いておく必要ことです。開いておかないと RubyMine で「Vim: 警告: 端末への出力ではありません」のようなメッセージが出ます。この場合は、一旦、プロセスを止めて(Stop Process)、NVIM_LISTEN_ADDRESS で指定したファイルを削除してからやり直すようにして下さい。

Happy Editing with RubyMine and Neovim !!!

マルチカーソルLOVE

by id:mugi_uno

普段VSCode/SublimeText/Atomの全てを使っていますが、全てに共通して使える機能であるマルチカーソルが無いと、もう生きていけない体になっています。 (マルチカーソル = カーソルをたくさん作れる機能と思ってください)

例えば、jsonの値を全て初期化時にインスタンス変数に持ちたいな〜みたいなコードを書こうと思った時、こんなことができます。

cap.gif (159.5 kB)

あっ、やっぱキーの名前全部 item_ から始まるんだったわ!みたいなケースでも、検索・置換を行うことなく、サクッと行えます。

cap2.gif (90.2 kB)

使いこなせると手放せなくなるので、使ったことの無い人はぜひお試しください!

AtomのTeletypeで爆速リモートペアプロ

by renyamizuno_

先月末頃にTeletype for Atom というAtomプラグインがでました。 GitHubが「Teletype for Atom」リリース。開発者向けエディタ「Atom」でも、複数プログラマが同時にコード編集可能 - Publickey 複数人でコードを一緒に編集出来るようになりました。 このため、キーボード配列が違うとか、キーバインドが違うから…とかそういった問題でペアプロが難しいといった問題から解消されます。 最高。 主にテストを書く時に、「こういうテストがいるよねー」ということを言いながら雑にテストコードを書いている時に、 ペアがすでに必要なパラメータ等を準備してくれていて、瞬間でテストコードが仕上がる。という事案が何度も発生して、脳が追いつきませんでした。 とても新鮮で不思議な体験だと思うので、みなさんも味わってください。

完全食COMP

by 洋食

皆様、昼食はどうしていますか?Misoca名古屋オフィスは名駅近くにあるので、ランチには事欠きません。が、逆にドコで何を食べるかを考える必要があります。距離と時間(店の行列・料理が出てくるまでの時間・食べる時間)から最適解を求める必要があります。贅沢な悩みではありますが、ちょっと考えるのが面倒になってきました。そこで、完全食COMPです。プロテインみたいなもので、好きな飲み物で溶かして飲むだけです。味はほぼ豆乳と同じです。私は、カフェインを摂取したいので、コーヒーで溶かしています。朝にCOMPを作って、水筒に入れて持っていっています。ドコで何を食べるかを考える必要もなく、お弁当を用意する必要もない。私の趣味は読書ですが、昼休みがまるまる空くので、本とか論文が読み放題です。流石に夕方にお腹が空いてきますが、Misocaは残業しない主義なので、帰宅して夕食たべればOKです。最高です。

RubyMineでもマルチカーソルが使えるぞ〜

by ころちゃん

こんにちは、RubyMine(IntelliJ)勢です。記事上のほうで、Sublimeおじさんがマルチカーソルを絶賛していますが、RubyMine でもマルチカーソルは使えます。

Shift + Alt + Click または Alt + Alt 押しながら↑↓ です。

実は前者だけ知っていて、クリックするの面倒だな〜って思ってたけど後者があればマウス使う頻度も減りますな。あと同じ単語にマルチカーソル生やすときは、Ctrl + g でいけます。

普段、息を吸う用にShift + Shiftサーチ(Search Everywhere)してましたが、Alt + Altがあるとは思いませんでした。。灯台下暗しでしたね。ちゃんと覚えよう。

最後にさらっとRubyMineを使う際の知見/感想を書いておくと

  • IdeaVim等を入れると、デフォルトのショートカットと競合するので、Vimキーバインドを使うのをやめた。
  • ショートカット数が膨大なので、慣れるまではデフォルトをおすすめする。
  • 画面分割した際のSplitter間の移動ショートカットがデフォルトで設定されてないので、Tab to Next Splitterを入れると良い。
  • 外観が気に入らない貴方は、Material Theme UI を入れると気にいるかも。
  • ボクはMaterial Themeは行間がちょっと広くて気に入らなかったので、アイコンだけカッチョ良くしたくて Atom File Icons IDEAを入れてます。

みたいな感じです。参考にしてみてください。

コマンド履歴を検索する

by @kosappi_

bashzshCtrl + R を打つと、コマンド履歴を検索できます。 もはや常識のように感じてますが、無いと困る、という機能。 ss.gif (1.6 MB)

anyenvでいろんな言語の環境を一括管理

by @kokuyouwind

Rubyの環境はrbenvで管理してる人が多いと思います。 同じようにNode.jsの環境管理にndenv、Pythonはpyenv……と、この手の実行環境管理ツールは言語ごとに増えていきますね?

そうなると…… まぁ、.bashrcなどの初期化スクリプトはこうなりますよね。

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# ndenv
export PATH="$HOME/.ndenv/bin:$PATH"
eval "$(ndenv init -)"

# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

はい。 初期化スクリプトが汚れるだけではなく、環境更新もいちいち個別にGit Pullが必要です。

こんなときにanyenvを使うと、*envを一括して管理してくれます。

# .bashrcには以下の2行だけを書けばいい
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

# *envコマンドをinstallできる
$ anyenv install rbenv
$ anyenv install ndenv
$ anyenv install pyenv

# プラグインを入れると、*envをまとめて更新できる
# (anyenv自身も含む)
$ anyenv update

ちなみに、現在入れられる*envは以下の通りです。

$ anyenv install -l 
Available **envs:
  crenv
  denv
  erlenv
  exenv
  goenv
  hsenv
  jenv
  luaenv
  ndenv
  nenv
  nodenv
  phpenv
  plenv
  pyenv
  rbenv
  Renv
  sbtenv
  scalaenv
  swiftenv

これだけ色々な言語(と一部ビルドツール)が簡単に入れられて、バージョンも切り替えられるのは便利ですね。 brew派のみなさんも、試しに使ってみてはいかがでしょうか。