Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

TechKaigi#1 ~隣のエンジニアが知らなそうなこと~ を社内で開催しました

こんにちは、エンジニアのid:tenmihiです。

この度弊社の社内勉強会の時間を活用して、TechKaigiを開催したので紹介したいと思います。

TechKaigiとは

TechKaigiはモバイルファクトリーのエンジニアがどんな問題を抱え、どう解決してきたかを共有をする勉強会です。
弊社のエンジニアであればチームを問わず誰でも参加できます。

開催ごとに発表テーマを決める予定で、第1回目のテーマは 隣のエンジニアが知らなそうなこと でした。

開催の理由

リモート勤務だと場所を選ばず仕事ができたり通勤時間に縛られなくなる一方で、コミュニケーションなどで辛いところもありますよね。

私は2年ほど前から東京を離れて長崎の自宅からフルリモートで働いていますが、オフィス側との会議や突発的な障害対応などでコミュニケーションの問題を経験しています。

猛威を奮っているコロナウィルスによる影響で弊社も今年の2月頃から原則リモート勤務となり、それから約半年が経つ中でチーム内外でコミュニケーションの問題が露出してきました。

そのひとつに「周りのエンジニアや隣のチームがどういうことをやっているのかわからない」という声がありました。

そこで各チーム・個人の知見共有やコミュニケーションの問題解決のためのエンジニア横串勉強会としてTechKaigiを開催しました。

f:id:tenmihi:20200821182116p:plain:w600
TechKaigi イントロダクション

当日の様子

今回は4名の方にシェル、Android APIやgitなど幅広い技術内容で隣のエンジニアが知らなそうなことを発表していただきました。

また、今年入った新卒にとっては名前を聞いたことしか無いエンジニアもいるのではないかと思い、自己紹介もしていただきました。

f:id:tenmihi:20200821182214p:plain:w600
シェルの1つである Fish についての発表

id:dorapon2000 さんのfishについての発表はこちらにブログ記事としても上げていただいております

tech.mobilefactory.jp

ちょうど開催のタイミングで一部チームが忙しい時期であったものの社内から27名の方に参加していただくことができ、多くの人が知見の共有をできたのではないでしょうか。

終わりに

チームの垣根を超えて社内のエンジニアが各々の知見について発表しあうことができました。

これからもリモート勤務でのエンジニア達の情報の輪を保つための取り組みとしてTechKaigiを続けていければと思っています。

インストールしてすぐ使えるfish shell入門

こんにちは!新卒1年目エンジニアのid:dorapon2000です。最近暑いですね。

さっそくですが、シェルを便利にカスタマイズしたい気持ちはあるけれど面倒だなぁとか、そろそろbash以外のシェルにも手を伸ばしたいという方はいるのではないでしょうか?今回紹介するfishはデフォルトですでに便利なので、入門者であっても導入しやすいですし、設定ファイルをいじりたくない人にもうってつけです。私自身もoh-my-zshを長らく使っていましたが、fishでいいじゃんとなった一人です。一方で、bash構文が使えないことやfish独自の書き方に抵抗がある人は向いていないので注意です。

本記事ではfishの他のシェルにはない魅力的な特徴と使い方をgif付きで紹介していきます。また、コマンドヒストリーの検索が便利になるplugin-pecoも一緒に紹介します。

fish公式:https://fishshell.com/

目次

  • 向いている人
  • fishインストール手順
  • fishの特徴
  • 各特徴説明
  • bashとの違い
  • 使ってみての感想
  • plugin-peco
  • plugin-pecoインストール手順
  • まとめ

インストール手順

# fishのインストール (ubuntu)
sudo apt-add-repository ppa:fish-shell/release-3 # fish 3を入れるために必要
sudo apt update
sudo apt install fish
fish --version

# fishのインストール(mac)
brew install fish
fish --version

# デフォルトシェルにする場合
echo $(which fish) | sudo tee -a /etc/shells
chsh -s $(which fish)

fish

fishのインストールはここまでです。以下は私が使っているテーマのインストール。

# パッケージマネージャfisherのインストール
curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman

fisher git_util
fisher rafaelrinaldi/pure

fishの特徴

fishの公式では6つの特徴をあげています。いくつかピックアップしてみていきましょう。

  • オートサジェスト
  • 今風のスクリプト構文
  • manを使った補完
  • 24ビットカラー
  • ウェブからの設定変更
  • 直感的な操作性

オートサジェスト

過去のコマンド履歴を利用して、入力した文字と一致する最後のコマンドをうっすらと表示してくれます。

f:id:dorapon2000:20200811173232g:plain

実行できないコマンドを入力したときに赤くなるのも嬉しいですね。

f:id:dorapon2000:20200806173135p:plain

manを使った補完・直感的な操作性

fishではmanを読み込んでオプションの補完ができるようになります。gitのコマンドはもちろん、manがあるコマンドであればどれでも補完可能です。

f:id:dorapon2000:20200812170723g:plain

ウェブからの設定

fishではウェブからテーマやプロンプトの設定ができ、環境変数なども見られます。ただし、ブラウザがない環境だとエラーがでます

fish_config  # ブラウザが立ち上がる

テーマの設定

f:id:dorapon2000:20200811180458g:plain

プロンプトの設定

f:id:dorapon2000:20200812164717g:plain

環境変数も見られる

f:id:dorapon2000:20200814170637p:plain

fishスクリプト

fiやesacといったシェルスクリプト独特な書き方から今風の書き方になっています。正直なところ、Unixにデフォルトで入っていないfishでスクリプトを書く気持ちにはなれていません。

function detect_os
    switch (uname)
        case Linux
            echo Hi Tux!
        case Darwin
            echo Hi Hexley!
        case FreeBSD NetBSD DragonFly
            echo Hi Beastie!
        case '*'
            echo Hi, stranger!
    end
end

bashとの違い

bashとは似ているようで、違う部分も多々あります。

同じ

  • パイプ |
  • 条件式 &&, ||, !
  • []
  • 入出力 >, >>, <

違う

  • 設定ファイルの場所は、~/.bashrcではなく~/config/fish/config.fish
  • 環境変数の設定はexportではなくset
    • set -x PATH /path/to/bin $PATH
  • 数値計算はletや(())ではなくmath
    • math 1 + 1
    • mathはfishの組み込み関数
  • コマンド置換は$()から()
    • echo (math 1 + 1)
    • <()も不可、代わりにpsub

以下の記事はbashとの違いについて詳しく書かれていて参考になります。

シェル芸人のためのfish入門 - Qiita

使ってみての感想

普段使っている中では、bashとの違いを意識することは環境変数の設定(set)くらいです。既存のシェルスクリプト自体はbashに渡したり、シェバングを書けば良いので気になりません。たまにパイプでつなげまくるワンライナーを書いてfishで動かないことがありますが、そのときだけbashに切り替えています。fishを使い始の頃はFAQが助け舟になるでしょう。

fishを使っていて困ることは、ググって入力するコマンドが動かないですね。例えば、ssh-agentなんかはつまづきポイントです。

# bash
eval `ssh-agent`

# fish
eval (ssh-agent -c)

plugin-peco

最後に1つだけ、plugin-pecoというプラグインだけおすすめしておきます。plugin-pecoを使うにはpecoコマンドも必要です。

f:id:dorapon2000:20200813173546g:plain

  • Ctrl-Rを押すとコマンドヒストリーが開き、1タイプごとに絞り込める
  • さらにCtrl-Rを押すことで絞り込みの種類を変更できる

fishでも↑↓キーでヒストリーを順に表示できますが、一覧表示されると検索効率がぐんとあがります。

pecoとplugin-pecoのインストール

# pecoのインストール(ubuntu)
sudo apt install peco

# pecoのインストール(mac)
brew install peco

# plugin-pecoをインストール
fisher install oh-my-fish/plugin-peco
vim ~/.config/fish/config.fish

# 以下を書き加える
function fish_user_key_bindings
    bind \cr peco_select_history
end

# シェル再起動

まとめ

  • 強力な補完
  • 導入コストも学習コストも低い
  • pecoと組み合わせてらくちんヒストリー検索

ここまで読んでくださりありがとうございました。 この記事をきっかけにfishの魅力に気づいて、fishを使う人が増えることを期待します!