ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

vscodeでgoの設定をしてlspを動かしてみた

vscodegolangの開発環境を構築にあたってgocodeではなくlsp*1を使う設定をやってみて動いてみたのでまとめます

なぜvscodeを使わないのかというのは以下の記事を見たのと、lspすごいという個人的な期待感です

mattn.kaoriya.net

インストール

とりあえずvscodevscode-goをインストールします

github.com

インストール自体は他の拡張と同じように"go"とかで絞り込むと表示されると思いますので、それをインストールします。

設定

インストールしたら設定は自分の環境だと以下の感じ*2
(setting.jsonからじゃないと設定できないっぽい項目があるのでjsonを編集しました)

"go.gopath": "/home/yuzu/develop",
"go.goroot": "/home/yuzu/.goenv/versions/1.11.4",
"go.useLanguageServer": true,
"go.languageServerExperimentalFeatures": {
    "format": false,
    "autoComplete": true,
    "rename": true,
    "goToDefinition": true,
    "hover": true,
    "signatureHelp": true,
    "goToTypeDefinition": true,
    "goToImplementation": true,
    "documentSymbols": true,
    "workspaceSymbols": true,
    "findReferences": true
}

設定をしたらctrl + shift + p等でコマンドパレットを開き「go: Install/Update Tools」を実行し、go-langserverにチェックを入れてOKを押すとgo-langserverがインストールされます

github.com

実行されることを確認する

"autoComplete": trueを設定したので補完されることを確認します。自分は以下のようなコードを書いて、fmt.をタイプした時にPrintlnが候補として表示されるかで確認できると思います*3

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Happy Aura")
}

*1:Language Service Protocol

*2:gorootの指定がversion変えるたびに変更したいので納得いってない

*3:けやきちゃんのハッピーオーラなんか好きです

ghq + peco on fishデビューしました

ghq使ってないとか人生損してるということを年末年始に某ブログで言われていたので入れてたの思い出して、入れてみたら思ったより便利だったのでgoの調査するにあたって全部goのディレクトリ構成に移した。

何ができるようになったのか

ghqとpecoを組みあわせると何ができるようになるのかとかは別のブログでもあるので、雑に言うとghqで管理しているリポジトリをpecoで絞り込んでそのディレクトリにビュンと移動できる

導入に当たって苦労したこと

ghqはgoのリポジトリ管理のディレクトリ構造でgithubからいい感じにプロジェクトをcloneしてくれる

そもそもプロジェクトを全部~/developにプロジェクト名でディレクトリ作るっていうgoの階層が浅くなっただけみたいな雑な管理をしていたので特に苦労しなかった。
結局~/developGOPATHに設定して、$GOPATH/src/localに元々あったローカルにだけあるコード群をmvした

唯一ちょっと躓いた点としてはghqとpecoを組み合わせて使用する関数の定義がよくわからなかった。最終的に以下の感じで設定した。

function repo_peco
  ghq list | peco | read select_dir

  if [ $select_dir ]
    cd (ghq root)/$select_dir
  else
    echo "Not selected project"
  end
end

導入後

ショートカットキーをbindしたのでショートカットを押せばpecoが起動して、選んだプロジェクトにcdできる

f:id:yuzu441:20190129162144p:plain

(決定するとghqをcloneしたディレクトリに移動する)

割と便利だけどghq listで出てくるのはghq root以下のgitで管理されているものなので、ghqでインストールしていない自分で作ったプロジェクトが出てこないのだとgit initを実行し忘れてるのだと思う

導入難しくないし、割と便利だったのでみんなが記事書いてるわけですね

LastPassからBitwardenに移行した

パスワードマネージャー移行

LastPassの無料プラン使ってたけど「携帯電話で生成されたパスワード」っていうよくわからないものが意図せず同期されていたり、ブラウザから開いた場合にパスワードのコピーが面倒だったり、ちょっと動作がもっさりしてる感があったので移行先を探しすことにしました。 いくつか悩んだけどBitwardenというアプリに移行しました。

bitwarden.com

そもそも何を求めてるのか

ざっくり以下の感じ

  • UIが綺麗
  • オフラインでも見ることはできる
  • バイスで同期できる
  • Linux(Ubuntu)でも使用できる
  • PW以外の指紋等で開けれる

なぜBitwardenに?

クライアントがMac,Win,Linuxで用意されてるようで、求めてたものがFreeプランでもちゃんと実装されていた。

公式でサポートしているブラウザがよくあるもの以外のBraveなどもサポートしていたのも気になった。

技術的な話をするとOSSで作られていてCLIで操作することもできるし、サーバーのホストをDockerを利用して自分で立てることが可能な所が面白いと感じた。
諸事情で触れないC#で作られているけど、クライアントはnode.jsだし許容した。

候補だったもの

決定したBitwarden以外にもbuttercupというものを見ていた

Buttercup

javascriptでできていて、いろんなデバイスで使用することができる。 Dropbox等を使用することによりデバイス間で同期することが可能。逆にいうと公式がクラウド用意してないので自前で用意しないといけないのでほんのちょっとハードルがある。

Dropboxのアカウントが使ってないから削除するぞって言われるくらい使ってなくてLastPass使い始める前に作成したものなのでパスワードもわからないし、再度アカウント取得するの面倒だなって気持ちから今回は採用を見送った。

セキュリティ考えるのなら全部自分でやったほうがいいとは思うのでアリだと思う。オフラインでの動作確認したらRead-onlyで見ることはできた。

最後に

使い始めたばかりでまだ駄目な所はっきりわかってないけど、UIもなかなか綺麗なのでしばらくBitwarden使ってみようと思います。

もし気に入らない部分が目立ち始めたら、1passwordに課金するかと思ってるのでtwitterで1password使い始めてたら察してください。