indilog

Ruby/Rails/React/Goなどに関して自分が勉強したことなどを投稿しています

Shrineでdelete_rawプラグイン使用時に元の画像を削除せずにseedデータを作成する

seed_fuを利用し、

Model.seed do |s|
  s.image = File.new(image_path)
end

としてseedデータ登録時にShrineを用いて画像を登録するようにしていたら、 seedデータ作成時にdelete_rawのプラグインを入れていたため、元のファイルが削除される形になってしまっていた

そこでここを参考に Shrine(2.7.0) is destroying my source file, when using it with rspec · Issue #193 · shrinerb/shrine · GitHub

Model.seed do |s|
  s.image = StringIO.new(File.binread(image_path)
end

と奇術師、StringIOのオブジェクトを渡してあげることによって、元のデータを保ったままデータがアップロードできるようになった🎉

Heroku PostgreでStagingのデータをReview Appsにimportする方法

herokuのreview appsを使っていて、review appsでstagingにあるデータをそのまま使ってデータがある状態で検証を行いたいと思い、とりあえずインポートする方法を探してみたところ、以下の方法でできた💡

手順

  1. Stagingのherokuの管理画面からOverview⇨Heroku Postgres f:id:indigo-lain:20180628095239p:plain

  2. Durabilityタブ内のBackupからDownload f:id:indigo-lain:20180628095308p:plain

  3. DownloadしてきたファイルをDropbox等外からアクセスできる場所にアップロードする

  4. Review AppsのHeroku PostgresからImport先のDBの名称を確認 f:id:indigo-lain:20180628095333p:plain

  5. 以下コマンドを実行する ここ 参照

heroku pg:backups:restore <"DropboxにあげたファイルのURL"> <Import先のDB名> <appの指定など>

peco+historyで便利なhistory

設定

brew install peco でpecoをインストール

~/.zshrc で以下を追記

function peco-select-history() {
  BUFFER=$(\history -n -r 1 | peco --query "$LBUFFER")
  CURSOR=$#BUFFER
  zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

使い方

Ctrl+r でpecoを使ってインクリメンタルに history から検索、実行ができて便利 ✨

みんなのGo言語 Day3

今日もつらつらと読んだことをメモ的に書いていく📝

Goを始める

学習方法

プロジェクトを始める時に気をつけること

  • リポジトリ名は小文字にする
  • リポジトリディレクトリ構造は $GOPATH/src/{レポジトリのドメイン}/{レポジトリのパス} の形にする
    • 例えば、githubなどにホストする場合は github.com/indigolain/myprojなどにする
    • 配置は $GOPATH/src 以下にする
  • ディレクトリ名はパッケージ名と同一にする
  • testdataやアンダースコアで始まるディレクトリはgoのパッケージとして見なされない
  • サブパッケージはサブディレクトリを切って作る
    • 基本的にはあまりサブパッケージを作ることはない、ロガーのパッケージなどはあり得る
      • 他のプロジェクトから使えるような形を維持できるようにすることを考える
    • コンポーネントはtypeを定義して、typeごとにファイルを分けるのが良い
  • サブパッケージはインポートする際に絶対パスで指定する
    • go getなどで取ってくる時に絶対パスである必要がある

外部パッケージの依存管理について

  • goにはvendoringという依存管理の機能がついている
    • プロジェクト配下に vendor/ 以下にパッケージを配置すれば、GOROOTや$GOPATHよりもそちらを優先して読み込むようになっている
  • これに加えてglideを入れると、bundlerのGemfileやGemfile.lockなどと同じようなglide.ymlとglide.lockというファイルが生成され、これをコミットしておくことによって同じバージョンの外部パッケージが、他の環境でもインストールできるようになる github.com
    • また、テストなどであるパス以下のディレクトリを対象にしている際に ./... などとするが、vendoringを使用している場合、vendor以下のディレクトリに対してもテストが行うことになってしまうが、 go test $(glide novendor) などとすると、それを無視してテストを実行できる

Makefileをタスクランナーとして使う

  • rubyのrakeのように、makeを使うことで、初期のsetupやその他のテストをここに定義しておく
  • 複雑なタスクになってくる場合は、 _tools/ などにシェルスクリプトを配置して、呼び出すようにする

みんなのGo言語 Day2

エディタと開発環境

今回はgoで開発する際に使われるlint系のツールやエディタでよく使われているツールの紹介だった👀

vetとgolint

vetはエラーの可能性がある箇所を指摘してくれるツール

vet - The Go Programming Language

golintはスタイルなどを指摘してくれるツールみたい

golint - GoDoc

overcommitとかと組み合わせると捗りそう

もちろんCIなどに設定しても良いけど、gitのコマンドをフックして色々やってくれるovercommitみたいなものを使えばもっと捗りそうだと思った💡

PreCommitのタイミングで走らせればコミットされる前にチェックができて良さげ。 github.com

vetとgolintに対応してるみたいだった https://github.com/brigade/overcommit#precommit

みんなのGo言語 Day1

1.1 開発環境の設定

Goのインストール

  • 前やった時にここら辺のインストールは終わってた

$GOPATHの設定

  • ここの設定も前やった時に実施済みだった
  • でもよくあるGOPATHの設定場所とかが載ってるの地味に嬉しいと思う。正しいものとかはないかもだけど、ベストプラクティスがあるんじゃないかとちょっと不安になるしね ☺️

go getを試してみる

  • go getで$GOPATH配下に外部パッケージをインストールできるって丁寧な説明があるの嬉しい☺️

GoのREPLであるgoreを使う

  • gore -autoimport でgoreを起動してみる
    • autoimportオプションは
      • formats and adjusts imports automaticallyとある👀
      • fmtをimportせずに使えてるということは多分importを省けるやつっぽい?
  • goreを終了させる時は control+d
  • 他にもここら辺を入れておく

github.com pretty print良い。作者k0kubunさんだ 👀❗️


github.com

godoc.org ドキュメンテーションツール✨


こちらの補完ツールはvimを使っているため、代わりにvim-plug経由でvim-goを入れてみる github.com github.com

$GOPATH管理のためにghqを導入する

pecoで簡単にリポジトリ間の移動を行う

  • 出たpeco👀❗️
    • このツールはだいぶライフチェンジングなやつや
    • historyと組み合わせて自分が実行していたコメンドを検索して取ってくるやつとか定義してて、結構便利☺️
  • pecoってgoで書かれてたのか💡

Go製ツールのインストールについて

  • 確かにpecoとかがgoで書かれているのであればgo getすれば良いけど、安定板とかを探してダウンロードしてくる必要がある
    • なのでものによっては他のパッケージ管理ツールにダウンロードを任せるのが良い!全部go getで良いじゃんと思ったけどなるほどそういう違いが出てくるのか💡
  • でもhomebrewとかのパッケージ管理ツールでは取り扱われていないツールなどは取ってくることができないので、github releaseから取得できるようにするためのツールを作っているらしい✨ github.com

みんなのGo言語 Day0

RailsとReactをただひたすら書き続けるのに疲れ、刺激を求め何か新しいものにチャレンジしたく、 A Tour of Go を一度さらっとやってみた後に表紙のGopherに惹かれこちらの本を買ってみた📕

スローペースな感じになりそうだけど、とりあえず記録のためにそれぞれのセクションで思ったこととかを書いていけたら良いなと思ってる💭 とりあえず今回ははじめにを読んで気持ちを高める💪

はじめに

メモリ管理やコンパイル速度など、前にC++をやっていた時に色々考えなきゃいけなかったものから解放されつつ、パフォーマンスが良かったり、かっちり型を指定できたりというところがすごく楽しみなところ。 別に動的型付けが嫌だというわけではないし、むしろ一度C++からrubyにいって動的型付けすげーって感動したんだけど、やっぱりあのかっちりした感じも良いよね☺️

あとスタイルについて矯正してくれるの良いよな、と思った。もちろんlinterとかを入れてチェックすれば良いは良いんだけど、色んなlinterがあったり、好みによって設定ファイルを書き換えたりする必要があったりで、戦争になったりする時とかもあるもんね。

コマンドラインツールの開発も楽しみ☺️どんなものが紹介されるんだろうか💭