画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

mysql2のbundle installに失敗する時

mac上でbundle installした時に、以下のようなエラーが出て失敗する事がある

Fetching mysql2 0.5.3
Installing mysql2 0.5.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.


    current directory: /Users/mapyo/tmp/mysql2_sample/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/ext/mysql2
/Users/mapyo/.anyenv/envs/rbenv/versions/2.6.4/bin/ruby -I /Users/mapyo/.anyenv/envs/rbenv/versions/2.6.4/lib/ruby/2.6.0 -r ./siteconf20200113-35739-1ltnc8d.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
checking for -lmysqlclient... no
-----
mysql client is missing. You may need to 'brew install mysql' or 'port install mysql', and try again.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.


Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/Users/mapyo/.anyenv/envs/rbenv/versions/2.6.4/bin/$(RUBY_BASE_NAME)
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysql-config
        --without-mysql-config
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysqlclientlib
        --without-mysqlclientlib


To see why this extension failed to compile, please check the mkmf.log which can be found here:


  /Users/mapyo/tmp/mysql2_sample/vendor/bundle/ruby/2.6.0/extensions/x86_64-darwin-17/2.6.0-static/mysql2-0.5.3/mkmf.log


extconf failed, exit code 1


Gem files will remain installed in /Users/mapyo/tmp/mysql2_sample/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3 for inspection.
Results logged to /Users/mapyo/tmp/mysql2_sample/vendor/bundle/ruby/2.6.0/extensions/x86_64-darwin-17/2.6.0-static/mysql2-0.5.3/gem_make.out


An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.


In Gemfile:
  mysql2

対応方法としては、--with-mysql-config のオプションを指定して、bundle configを実行してあげればよかった。。(パスは各自適切な場所になおしてください)

bundle config --local build.mysql2 "--with-mysql-config=/usr/local/opt/mysql@5.7/bin/mysql_config"

オプションは、これを1つだけ指定しないとうまくいかなかった。  最初はwith-mysql-dir などを雑につけてみて試してみていたのだが、それだとbundle installは成功するがその後実際に使う場所でエラーが出てしまった。。。

mysqlの最新のバージョンじゃないものをbrewで入れていて、それを使いたかったからこういうエラーが出てしまうのかもしれない。

というか、READMEをよくみてみるとちゃんと説明が書いてあったので、それを読めばすぐわかったのかもしれない。。

参考文献

2019年振り返り

既に年明けてしまったけど、今年をざっくり振り返る

2019年の振り返りはこちら

mapyo.hatenablog.com

Android

1〜3月くらいはスポット的なプロジェクトでやってた。 このタイミングだけやったけど、めっちゃ変わってるなぁと思った。 変化のサイクルが非常に早い。

Go

そこそこは書けるようになってきたと思うけど、Goらしさとは何かがちゃんとわかってない気がする。 もっとガシガシコード書いて、他の人のコードを見て修行する必要がありそう。

GCP

めっちゃ使うようになった。 以前よりは詳しくなった気がするけど、まだまだという感じ。

何か新機能を作るときには、GCPにどういうサービスがあるか把握しつつ、 適切にサービスを選択しながら開発を進めていくスキルが必要だと思う。

Googleのカンファレンスで発表される情報を随時キャッチアップして、 今後の動向を見据えつつ選択が出来るとよさそう。

Androidやってる時はGoogleの動向に気を配りつつキャッチアップしていく必要があったけど、 サーバサイドやったとしても、引き続きGoogleの動向に気を配っていく必要がありそう。

GKE、Kubernetes

そこそこわかってきたような気もするけど、深くはわかってない気もする。 いろいろと理解するのは難しかったけど、わかってくると楽しい。

requiredDuringSchedulingIgnoredDuringExecution みたいな設定値があって、めっちゃ長いやんという気持ちになった。

 Deployment Manager

嗜む程度に使ってる。微妙に理解したような気がするけど、まだまだ使いこなせてないと思う。

Redis

Redis Streamsとか使ってた。XREADGROUPとか、XACKとか。

gRPC、gRPC-Web

使ってる。便利。ブラウザからもgRPCが使えるようになるといいのになぁ。

ブログ

2019年は3件しか書いてなかった。年々アウトプットが減っている。。。 雑なアウトプットだとしても継続的に書いていかないとなぁ。。。

まとめ

振り返ると、2019年もいろいろとやった気がする。新しい技術もいろいろと触れて楽しかった。 一方で、深く理解できたかといわれるとまだまだ足りないなという感じ。 使っていく以上は胸を張って使いましたといえるレベルになりたい。

技術的にはいろいろと楽しかったのだけど、もっと根本的なエンジニア力みたいなものが上がっていないな。という気がする。 そもそも、それって何なのだろうか?方向性として、自分はどういうところにいきたいのだろうか? というところも含めて2020年はそれを考えていく1年になりそう。 RPGでいうと、武器や防具を購入して攻撃力や守備力は上がったけど、ステータスとしてのちからや、みのまもりは上がってない感じ。

他の人がどういうキャリアを辿ってきたのか、それぞれの節目に何を考えてどう行動したのか。に興味があるから、機会があればその辺の話を聞いてみたい。

ktlintをAndroid Studio上で自動で実行してフォーマットしてくれるようにする

モチベーション

ktlintいいのだけど、pushしてからCIが回ってコメントついてから修正するよりも、事前に手元でわかるのであればわかるようにしたい。

とはいえ、毎回手元でktlintを実行するのはちょっとだるいので出来れば自動でいい感じになおして欲しい。 理想はAndroid Studioの方でktlintに沿ってないコードを書いた時に警告が表示されて、option + enterで自動でなおってほしい。しかし、そんなプラグインは現状調べた限りではなさそう。

やること

File Watchersを導入してktlintコマンドを使って定期的に実行する。

1. ktlintコマンドのインストール

brew tap shyiko/ktlint && brew install shyiko/ktlint/ktlint

2. File Watchersをインストール

pluginの部分で、 File Watchers と検索してインストールするだけ

3. File Watchersの設定

以下のように設定する。

f:id:mapyo:20190204103006p:plain

ポイントはAdvanced Optionsのところのチェックをすべて外すとよいかもしれない。

一番上の Auto-save edited files to trigger the watcher の部分にチェックが入っていると、ファイルを編集してauto saveが発動されたタイミングでktlintが実行されてしまう。

これはちょっと修正して考えている間に勝手にファイルがフォーマットされてちょっとうざいのと、ktlintが発動してフォーマット中にファイルを編集すると、メモリ上にあるやつと、フォーマットした結果のファイル、どっちが正しいの?というダイアログが毎回出てきてつらい。

弱点

この方法は完璧ではない。

  • ktlintが発動して、完了するまでが長い。6秒くらいかかる。一瞬で終わって欲しい。
  • 僕はターミナルからgit commitするからいいのだけど、IDEでCommit Changesしてる人は、command + kで出したタイミングでktlintが発動するので、コミットした後にフォーマットされてしまう。ターミナルからでも6秒くらいかかるので、一瞬でgit commitしてしまうと、commit後にフォーマットになってしまう。
  • ktlintのコマンドインストールしないといけない。そもそも、Android Studioでいい感じにやってほしい気持ち。

その他

やってもよさそうなこと

https://github.com/shyiko/ktlint#option-1-recommended

こちらにのっている、おすすめの設定の適用をする。

ktlint --apply-to-idea-project --android

以下のファイルが生成されるため、これをgit管理しとくといいかもしれない。

./.idea/codeStyles/codeStyleConfig.xml
./.idea/codeStyles/Project.xml
./.idea/inspectionProfiles/profiles_settings.xml
./.idea/inspectionProfiles/ktlint.xml
./.idea/workspace.xml

しかし、codeStyleConfigなどはすでに設定してたりするとバッティングしそう。

やってもいいかなと思ったけど、僕はやる気になれなかった事。

ktlint --install-git-pre-commit-hook

これでpre-commitに追加してくれて、commit前にチェックしてくれる。 しかしながら、これはcommitする時にちょっと処理が遅くなりそうなのと、エラーを出すだけで、自動でformatしてくれなかったのでやめた。 もうちょい様子をみて、やるかどうかは考える。

所感

もうちょっといい感じにAndroid Studioが何かしてくれたらいいなぁと思いつつ、自分で出来そうな事を考えてみた。 Androidアプリ開発は基本的にはAndroid Studioを使って開発する人が多いと思うので、それ前提で考えられるのがいいな。もっといい方法をご存知だったらどなたか教えてください。

ktlint、jvmで動いてそうだから実行が遅いのかな?

参考資料

2018年を振り返る

去年の年末〜今までにかけて、久しぶりに風邪をこじらせてしまって1週間くらい長引いていて、年末年始は殆ど何もしなかった。。。 今更だけど、振り返ってみる。

さて、2018年の目標はなんだっけかとブログを見返してみたのだけど、特に目標は立てていなかった。

参考までに、2017年の振り返りはこちら

mapyo.hatenablog.com

ざっくりいろいろと振り返ってみる

 DroidKaigi 2018での発表

Usb接続するアプリを開発した時に試行錯誤した事

USBのネタで発表した、しかし最新のOSではまた変わっている気がする。 去年はこれでしか外には発表していない。 何気に3年連続で発表できてた事が自慢だったのだけど、 今年はサーバサイドな人間なので今回はCFPを出すこともしなかった。

転職

去年で一番大きな出来事。 Androidエンジニアからサーバサイドエンジニアになった。 USBとか、BLEとか割とニッチなことやってて、やめてしまうのはもったいない感もあったのだけど、スパッとやめてサーバサイドに。 たまにKotlinのコードが恋しくなることもある今日このごろです。

Golang

ガッツリやることになるだろうかと思ってたけど、微妙に嗜むくらいしかやらなかった。 初級者なので、この辺は引き続きガッツリかけるようになりたい。

Node.js

ひょんなことから、Golangよりもこちらをガッツリ触るようになっていた。 Kotlinでずっと慣れてた自分にとっては型が欲しい気持ちが溢れていたが、ある程度慣れてくるとそこまでは思わなくなった。 しかし、ちゃんとテスト書かないとすぐ壊れそうな不安感はある。

雰囲気で書いている。

今までの僕はレスポンス作るためのクラスに一旦マッピングするのが普通だと思ってたけど、 オブジェクトから簡単にjsonが生成できるので、その特徴は生かしてコードを書いていった方がよいような気もしていた。 この辺は割とブレながら書いていたと思う。

今回はJavaScriptで書いてたけど、今度Node.jsで作る時はTypeScriptを使って書いてみたい。

クラウドサービス

AWSGCPを使うようになった。この辺もまだまだ初級者な感じがするので引き続き頑張っていきたい。

昔はベンダーにロックインしないように作る事が正義だと思っていた自分があるけど、 ちゃんとそのサービスの特性を理解して、寄り添う感じで使うのであれば全然ありなんじゃないかなとも思ってきた。 新しく何か作る時はむしろそっちが推奨されそう。 ただ、大きめのサービスになってくるとロックインされないようにするのも必要なのかもしれない。 その辺もうまく含めてマイクロサービス化して作っておくのもいいのかもしれない。

Androidやってて、技術の移り変わりが早いし、ベンダーの意向にめっちゃ左右されるなと思ってたけど、 サーバサイドになったらなったで、クラウドサービスを提供しているベンダーの意向に左右されるし、技術の移り変わりも激しいので、 どこへ言っても一緒という感じ。

 Elasticsearch

雰囲気で使えるくらいにはなってきた。 位置情報検索とか、普通のテキスト検索とかで使ってた。

なんとなくだけど、サービスの立ち上げ期にはこれでがっと作っといて大きくなってきたら別のものに置き換えていくのかなぁという感じがしている。

 AWS IoT エンタープライズボタン

誰でも簡単に使えるけど、使ったり、嗜んだりした。 こういうのを使って、自分ちをめっちゃ自動化したい気持ち。

POっぽい何か

途中、自分では作らないけどアプリの仕様を決める立場も経験した。 ひたすら、文章かいたりしてる時期が続いてた。コードは殆ど書いてなかった。 たまに、Googleスライド編集したり、めっちゃ簡単なアプリのプロト作ったり、調整的なこともしてた気がする。

ブログ

2018年は13件しか書いてなかった。2017年は29件で、段々と減少傾向にある。 今年は少なくとも50件くらいは書きたい。

体調

去年の年末までは殆ど風邪を引かなくて、、年末に久しぶりに風邪を引いてこじらせて今に至る。 インフルエンザになってないのがせめてもの救いだけど、全然風邪を引かない人になりたい。

iPhoneXを購入した

Androidエンジニアということもあってか、Android端末しか使ってこなかったので、iPhoneというものを使った事がなかった。 今は立派なiPhoneユーザ。もしGoogle Pixel 3がもっと早く日本で発売されていれば、そっちにしてたかもしれない。

モバイルSuicaを初めて使ったけど、今ではこれなしでは生きられない体になってしまった。

最後に

という感じで2018年を振り返ってみた。 2017年もいろいろと変化が多かったけど、2018年もいろいろと変化が多かった気がする。 さて2019年はどういう年になるのだろうかー

寝ながらPC作業が出来る環境を作った話

きっかけ

何ヶ月か前に、腰が痛くなったり肩こりからくる頭痛がひどい期間がありました。 家に帰って何かPC作業をやろうと思った時にこのおかげであまりやる気になれず、悲しい気持ちになってしまっていました。

こういう時には普通に休むのが一番ですが、寝転がりながらスマホを触る事は全然苦ではなく、腰痛・肩こりもそこまで感じる事はありませんでした。 なので、寝ながら快適に作業出来る環境が準備できれば最高なのでは?眠くなったら寝れるし。という軽い気持ちでやりはじめました。

寝ながらの作業に求める条件

簡単に片付けたり出したり可能な事

お金をあまりかけずに作り上げられる事

お金をあまりかけずに作れるというのは大事っちゃ大事なのですが、自分専用の部屋などはないので、簡単に片付けたり出したりする事が一番重要です。優先度高。

その1

https://www.amazon.co.jp/gp/product/B00C0LT0LW

とりあえず、あんまり考えず折りたたみ可能な台を買って作業してみようと思いました。 寝転がり、台の上にPCを置いて作業するスタイルです。

しかしながら、キーボード操作のために腕を上げなきゃいけないのが辛いのと、キーボード操作する時に画面がグラグラしてこれでは使えないなと思い断念しました。

動画を見るなどリードオンリーな環境ではお手軽に出来るかもしれません。

その2

qiita.com

枕と布団で頭を少し高くして、膝の上にPCを置いて作業するスタイルです。

そもそも何も新しく買う必要がなくて、これが出来れば最高じゃないか?と思って試してみました。しばらくは問題なかったのですが、個人的にはどうも首の角度が曲がってしまって首周りが窮屈な感じになってしまったのと、若干体を曲げた状態になるので、どうも腰に負担がかかってしまって、椅子に座る時程ではないですが、痛みを感じるようになりました。

やはり、理想は普通に寝た状態で作業出来るのが完璧なのではないか?と思うようになってきました。

その3

https://www.amazon.co.jp/gp/product/B01M6Y3RLIwww.amazon.co.jp

寝ているような姿勢で作業が出来てすごい良さそう!と思って購入しました。

最初はそれなりにいい感じかと思ったのですが、メガネを通してPC画面を見ると文字がどうも小さい。 エディタの文字の大きさを大きくして作業していましたが、毎回大きくしたり元に戻したりする作業がどうもめんどくさかったです。

また、微妙に枕よりも頭の位置を高めに設定しないといけなくて、「その2」で感じていた時と同じ問題を感じるようになって来てしまいました。

それなりによかったですが、ちょっと使いにくいなぁという事で断念。

その4(現在)

多少お金かかってもいいやという事で、以下のものを購入しました。

100均で大きめの洗濯バサミ ec.cando-web.co.jp

分割式キーボードのBarocco MD600 RGB(英字配列・青軸) www.biccamera.com

MD600についてくるのキーボードとキーボードを繋ぐ配線が固くて幅を広げにくかったので長めのケーブル
https://www.amazon.co.jp/gp/product/B0088EIC6O

USBハブ
https://www.amazon.co.jp/gp/product/B00Y27DEVO

マウスを寝ながら動かせるように、トラックボール式のマウス
https://www.amazon.co.jp/gp/product/B00E19UYO8

大きめの洗濯バサミが必要な理由は「その1」で購入したスタンドに角度をつけた時に、PCが倒れてこないようにするためです。 PCを固定できるスタンドがあればそれを購入すればいいと思います。

いい感じに作業するために分割式キーボードを探していたら、危うくキーボードの沼に落ちていきそうになりました。 普段キーボードは英字配列で使っているので、英字配列のMD600をAmazonで購入しようとしたら異様に高い値段で売っていたため、 定価で買えるサイトを探してなんとか見つけました。 しかし、今現在確認したところ、僕が購入した物は既に在庫切れになってしまっているようです。 MD600のRGBはキーボードをキラキラ光らせる事が出来るので最高です。今はOFFにしています。

マウスは普段から会社で使っているものをもう1台購入したのですが、 寝ながら作業するためやはりトラックボール式のマウスが手首を動かさずに出来るので楽な気がします。

これにて、快適に寝ながらPC作業が出来るようになりました。満足です。 作業中に眠くなっても目をつむればいつのまにか眠り、起きれば眠っていた事を忘れたかのように作業を再開できます。 なんかヤバそうですね。

しかし、弱点もいくつかあります。

  • 布団の上で使おうとするとグラグラして心もとないため、床の上で枕だけ使って作業する事が多い。
  • MD600でたまに間違ったキーを押してしまうと、プログラミングモード?になってしまい、解除するために特別なキー操作をしなければならず、作業がストップしてしまう。
  • MD600自体に矢印キーが存在しておらず、別のキーと組み合わせて押す必要がある。かなり押しにくいため、Karabinerを使って別のキーと組み合わせて押すように配置した。
  • ずっと同じ体勢で作業してるので、横向きになって作業したくなる。
  • 準備するのがひと手間かかるので、ちょっとめんどくさい。

などを感じていますが、今の所概ね満足して使えています。 唯一の心残りは、分割式キーボードでMD650が既に出ている事を知らずにMD600を購入してしまったので、もうちょっと検討してから購入すればよかったかもしれません。

このような感じで普段使っています。

f:id:mapyo:20181211095315p:plain

事情をよく知らない人がこれを見ると完全にやばい人ですね。。。

最後に

僕が自宅で快適に作業出来るようにいろいろと試したお話を書いてみました。 人によって自分にあった作業環境は違ってくるため、何か一つでも参考になれば幸いです。

ただ、準備するのが多少めんどくさいので、最近はたまにしか使わなくなってしまいました笑

参考資料

寝ながらPC作業が出来るメガネを買った

まだ使い始めて20分くらいしかたっていないけど、めっちゃいい気がする。

腰が痛くなってきたので、寝ながら作業出来る環境を探していた。

最初にやっていたのはこちら。

https://qiita.com/YumaInaura/items/2cab7c3dd9d6700e4df9

何も道具はいらなくてそれなりにいいのだが、どうも首が痛くなってしまっていた。 なるべく首を曲げずに作業が出来る環境が必要だった。

理想は寝ながら作業出来てなおかつ簡単に片付けが可能な環境を整える事だ。

https://kakakumag.com/pc-smartphone/?id=12144

これが出来れば理想てきなかなぁと思ったけど、分割キーボードをいろいろと悩んでいるうちに時間がたってなかなかきまらなかった。

とりあえず、使いだして30分過ぎてきたけど、なれないせいか、目がシュパシュパしてきた。後は腕をちょっと上げてプログラミングする必要があるので、手が疲れてきた。。。。 そんな今日このごろ。