みるべあのエンジニア日記

勉強したことについてTwitterとガチブログの中間くらいのスタンスで書く日記

jest を実行すると「Command failed with signal "SIGSEGV".」エラー

前提

  • M1 Pro
  • macOS Monterey 12.0.1
  • Node.js 16.14.2
  • Next.js 12.1.0
  • React 17.0.2
  • Jest 27.2.0

症状

Next.js のプロジェクトで jest を実行したらエラーが発生しました。

% jest --env=jsdom --verbose
Command failed with signal "SIGSEGV".

解決方法

このエラーメッセージでググってみたところ、 jest の実行ではないものの似たような症状を見つけました。

github.com

どうやら Node.js のバージョンに依存したようなエラーのようなので、バージョンを切り替えて検証してみることにしました。
Node.js のバージョンは nodenv で切り替えるようにしています。

  • 16.15.0 -> ❌
  • 17.9.0 -> ❌
  • 18.0.0 -> ❌

ダメでした。 どうにもこうにもならないので、秘技 "PC再起動" !

...まさかの解決!!

『プロを目指す人のためのRuby入門 改訂2版』のプレゼント企画に当選しました!

f:id:milkybear814:20211230101936p:plain 2021年12月2日に発売された『プロを目指す人のためのRuby入門 改訂2版』ですが、
なんと!発売前の見本誌のプレゼント企画に当選者として選んでいただきました!🎉

blog.jnito.com

たくさんの応募があったかと思いますが、3名のうちの1名に選んでいただいて大変嬉しかったです。
私は第1版を持っているので、どこがどのように変わったのか比較しながら読んでいます。 変更箇所の詳細はぜひ伊藤さんのブログをご覧ください。

blog.jnito.com

解説充実

まず、本の厚みからして内容が充実したことが感じられます。 パターンマッチの章が追加されたとはいえ、解説に図が加わったり、サンプルコードが増えたりしてページ数が増えています。

例えば、「10章 yieldとProcを理解する」では、
yieldを使ってブロックの処理を呼び出すときの実行フローが図解されています。

当時、第1版を読んでいた私は「ん?ん?どんな処理の流れだ??」状態で、
何度も見返して理解していた記憶があります。

2版ではこういった理解しにくいところの解説が改良されているように感じました。

コラムも充実

コラムも侮れません。
また10章の話になりますが、2版ではyieldやProcの使いどころについてのコラムが追加されています。
「使い方はわかったんだけど、使いどころがわからん」というのが第1版を読んでいたときの率直な感想でした。
Railsを学び始めると使いどころが少しわかるのですが、
第1版の「Railsをやる前にRubyを知ろう」という表紙のメッセージにあるように、大体の人はRubyを先に学びますよね。
でも、このコラムを読んでRailsで実際に出くわしたらまたコラムを読み返して復習できると思います。

おわりに

まだまだ全部の内容を読みきれていませんが、丁寧にアップデートされていることが感じられる1冊となっています。
最近Rubyの知識が停滞気味だった私のための再復習にも役立ちましたし、
パターンマッチング、debug.gemによるデバッグなどなど、新しいインデックスをインプットできました。
ありがとうございます!

Hasura でマイグレーションとシードデータを管理する

f:id:milkybear814:20211003115230p:plain Hasura を使えば API を自分で実装する手間が省けて、フロントエンドの開発に注力できるのでは?
ただでさえなかなか進まない個人開発なので、やらなくてもいいことは極力やりたくない。
ということで、ここ最近は Hasura を触ってイイ感じに個人開発を進められないか試していました。

hasura.io

Hasura CLI のインストールと config.yaml の作成

コマンドライン上から Hasura を操作することが多々あるので下記のページを参考にインストールします。

hasura.io

次に、Hasura CLI を使えるようにするための設定ファイル config.yaml を作成します。
hasura init コマンドを使うと config.yaml を含めてディレクトリやファイルが生成されます。
この辺のこともドキュメントに書いてあるので調べてみてください。

hasura.io

ひととおり終えると👇のディレクトリ構成になっているはずです。
f:id:milkybear814:20211003014617p:plain

Docker 環境の準備

Hasura が docker-compose.yml のサンプルを提供してくれているので、そのまま使わせてもらいます。
下記のページを参考にすれば Hasura コンソール画面の起動と PostgreSQL との接続が簡単にできます。

hasura.io

マイグレーションファイルの作成

マイグレーションファイルの作成も簡単です。
起動した Hasura コンソール画面からテーブルやカラムを作成するとマイグレーションファイルが自動生成されます。
もしすでに DB にテーブルやカラムはあるけれどマイグレーションファイルが生成されていない場合でも、下記コマンドを実行すれば生成できます。

hasura migrate create "出力したディレクトリに付ける名前" --from-server

f:id:milkybear814:20211003093722p:plain

中身はテーブルやカラムを作成するためのSQLが書かれています。 f:id:milkybear814:20211003093601p:plain

例えば今まで、Hasura Cloud と Heroku の PostgreSQL で試していたけど、ローカル環境で開発を始めようとなった場合に、
1. Heroku の PostgreSQL からバックアップをダウンロード
2. Hasura コンソールと接続されているローカル環境の DB にリストア
3. マイグレーションファイルの出力

を実行すれば良いですね!

マイグレーションファイルがあれば、共同開発者にも開発環境を共有でき、デプロイもスムーズにできるでしょう。
マイグレーションファイルの適用方法ですが、メタデータと一緒に適用します。

Hasura needs 2 pieces of information to recreate your GraphQL API, the underlying PG database schema and the Hasura metadata which is used to describe the exposed GraphQL API.

適用方法は hasura migrate applyhasura metadata apply コマンドを実行します。

マイグレーションメタデータの詳細に関しては下記ドキュメントに書かれています。

hasura.io

シードデータの作成

アプリの初期データとして投入するシードデータの作成も簡単です。
全てのテーブルに保存されているデータを出力することもできますが、テーブルごとに出力することも可能です。
テーブルごとに出力した方が1ファイルあたりのサイズが大きくならずに済みますし、1ファイル1テーブルで分かりやすく管理できますね。

下記のように hasura seed create コマンドを実行すると seeds/DB名 ディレクトリ配下にSQLファイルが生成されます。

hasura seed create 出力されたファイルに付ける名前 --from-table テーブル名

f:id:milkybear814:20211003092819p:plain

中身はシードデータを投入するためのSQLが書かれています。

f:id:milkybear814:20211003093030p:plain

マイグレーションファイルを同様、共同開発者に共有したりデプロイ時のデータ投入もスムーズにできるでしょう。
シードデータを適用するときは hasura seed apply コマンドを実行するだけです。

まとめ

Hasura を使えば簡単/迅速に GraphQL サーバーを構築できますし、DBやAuth0などの認証サービスとの連携もスムーズに実装できます。
マイグレーションファイルやシードデータの管理も簡単にできるので、複数人での開発や CI/CD もやりやすい印象です。
何より自分でイチからAPIを作らなくて済むので、フロントエンドの開発に注力できるのは大変助かります。

チュートリアルも提供してくれているので、興味があればぜひ試してみてください。

hasura.io

Flutterの環境構築 ~ flutter doctor all green まで ~

モバイルアプリを作れるようになりたい!
ということでFlutterの環境構築に挑戦してみました。

前提

Flutterのインストール

日本語のドキュメントがあるので素直に従ってインストールできました👍

flutter.ctrnost.com

私は zsh を使っているので .zshrc に以下記述してパスを通しました。

# Flutterディレクトリ配下にインストールしたため下記のとおり
export PATH="$PATH:/Users/myname/Flutter/flutter/bin"

Flutter実行環境の確認

flutter doctor コマンドで不足しているFlutterの実行環境を調べてくれます。

% flutter dctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.2.3, on macOS 11.4 20F71 darwin-x64, locale ja-JP)
[✗] Android toolchain - develop for Android devices
    ✗ Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, please use
      `flutter config --android-sdk` to update to that location.

[✗] Xcode - develop for iOS and macOS
    ✗ Xcode installation is incomplete; a full installation is necessary for iOS development.
      Download at: https://developer.apple.com/xcode/download/
      Or install Xcode via the App Store.
      Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
        sudo xcodebuild -runFirstLaunch
    ✗ CocoaPods not installed.
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the
        Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To install see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.
[✓] Chrome - develop for the web
[!] Android Studio (not installed
[https://developer.android.com/studio?hl=ja:embed:cite]

)
[✓] VS Code (version 1.58.2)
[✓] Connected device (1 available)

! Doctor found issues in 3 categories.

不足しているのは2つですね。

Android Studioのインストール

  1. Android Studio をダウンロード
  2. Android Studio を起動してセットアップウィザードを実行

簡単にできそうだね♪
ここでもう再度 flutter doctor を実行します。

▼ エラー部分抜粋

[!] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

素直に flutter doctor --android-licenses を実行します。

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 5 more

うわぁ〜〜〜...これ苦戦しそうな予感(´・ω・`)
ググるしかない!

ドンピシャの記事を発見🔎 zenn.dev

もういっちょflutter doctor --android-licenses を実行!

% flutter doctor --android-licenses
Android sdkmanager tool not found (/Users/myname/Library/Android/sdk/tools/bin/sdkmanager).
Try re-installing or updating your Android SDK,
visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions.

なんでーーーーーーーー!!!!!!😱😱😱😱😱

対処したこと

ググりにググってとりあえず対処できました。

cd /Applications/Android\ Studio.app/Contents/jre
ln -s ../jre jdk
ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk

再び flutter doctor --android-licenses を実行すると下記のように質問されるので全部 y です。

f:id:milkybear814:20210808130049p:plain

しんどかった。。

Xcode の対応

Xcode については sudo gem install cocoapods を実行すればクリアです。

f:id:milkybear814:20210808124945p:plain

できましたーーー٩(๑´3`๑)۶

31歳ITエンジニア初めての民間企業への転職活動

今回は技術でもギターの話でもなく、私が転職活動をしていろいろ感じたことを長々と書きます。

Wantedly経由での転職活動もよく聞きますが、私は転職エージェントを利用しました。

「エージェントを使うのもアリかもな」と思ってもらえるかもしれません。

私の経歴

本題に入る前に私の経歴について紹介させてください。

*************************************************************

2012年 4月:システム開発(客先常駐)会社 入社

2012年 9月:退職

2012年末頃:公務員試験の勉強開始

2013年10月:地元の自治体で地方公務員として入庁

2018年3月:退職

2018年4月:自社Webサービス(社員は私1人)会社 入社

2021年2月:退職

2021年3月:自社Webサービス会社入社(今回の転職)

*************************************************************

面接を受けるたびに「異色の経歴ですね」と言われました。

まぁそうですよね(^_^;)

転職を考え始めた理由 ~ もっとエンジニアリングしたい ~

そもそも公務員から転職した理由はエンジニアとして働きたかったからでした。

自社サービスを立ち上げてからある程度の期間は、エンジニアとしての開発業務が中心でしたが、徐々に自社サービスの運営に比重が寄ってきました。

運営はサービスを利用してくださる方々と直接的にコミュニケーションがとれるので、やりがいや楽しいこともあったのですが、やはりエンジニアリングを行っているときの自分がイキイキしているのは事実で、ここ最近は技術的なスキルの成長という面において速度が落ちてきているのは感じていました。

とはいえ社員は私一人しかいないので、なかなか運営業務の大半は切り離せず現在置かれている環境に危機感を持ってました。

転職活動でやったこと

転職エージェントの登録と相談

キャリアアドバイザーさんに相談したかったのでエージェントに登録しました。

自分の現在の状況や転職したい理由、希望年収を話したところ、
「ぜんぜん現実的な話なので活動してみてもいいと思いますし、活動してみた結果今の会社に残るという選択でもいいと思いますよ」

というアドバイスをいただきました。

営業臭は全く感じませんでしたね。

自己分析・面接対策

これは改めて「自分はこの先何をしていきたのか」を考えるいい機会でした。

 ちょうど社内でストレングスファインダーをやっていたので、その結果も踏まえつつ過去の自分を振り返ったり、他人からよく言われることや持たれる印象を思い出しながら今後どうしていきたいかまとめていきました。

面接でよくある質問に対する回答文章をキャリアアドバイザーさんに添削してもらいました。

職務経歴書の作成 

 職務経歴書は転職サイトの見本を見ながら作成し、こちらもキャリアアドバイザーさんに添削をしてもらいました。

それと、これに関しては自分なりに工夫したのですが、職務経歴書にこのブログにアクセスできるQRコードを掲載しておきました。

少なくとも今働いている会社では見てもらえて、「ブログを見て技術面では問題ないという判断だった」と言ってもらいました。

Wantedlyのアップデート

Wantedlyを使って転職活動は考えていませんでしたが、もしかしたらプロフィールを見られるかもしれないなと思い、自己分析を踏まえて恥ずかしくないくらいにはアップデートしておきました。

案の定、選考を受けた企業の社員の方やCTOの方の足あとがついていたのでやっておいて良かったです。

書類通過率は◯%

キャリアアドバイザーさんから前もって転職市場感について説明を受けました。

コロナの影響を多少なりとも受けているらしく、選考通過率については次のように言われました。

書類通過率:10%

面接通過率:30%

 

予想以上に書類通過率が低いと感じたので、これは丁寧に求人を見るより少し気になったら即応募することにしました。

結果、50社ほど応募して面接に案内いただいたのが5社でしたのでちょうど10%ですね。

 

エージェントを使って良かったこと3つ

キャリアアドバイザーさんが親身に相談に乗ってくれた

前述したとおり「You転職活動しちゃいなよ!」みたいに一方的な対応は一切ありませんでした。むしろ、「考えてみて、もし転職活動するのであればサポートしますので連絡ください」という言葉をいただきました。

面接の日程調整をイイ感じにやってくれる

面接の日程調整でこんなことありませんか?

書類選考が複数社通過して面接の調整が可能な日を伝えるときに 、「◯日と△日が空いている」と伝えるともしかしたらバッティングしてしまうかも...。

かといって◯日しか空いていないと伝えたら企業の方も調整が難しくなるのではないだろうか...。

ですが、エージェントを使ったら担当の人がいい感じに調整してくれました。

 

例えば、A社とB社の面接日程調整をする必要がある場合に、担当の人がどちらから調整したいか伺ってくれました。

なので、志望度順に調整できたりします。

 

内定後の他社の辞退連絡をやってくれる

辞退の連絡って気持ち的に億劫ですよね。内定を承諾した時点で担当の人が他社に辞退の連絡を入れてくれます。

ただし、キャリアアドバイザーさんから紹介された求人に限ります。

 

最後に ~ 就職・転職はやっぱり自己分析・面接対策が大切! ~

今回の転職を振り返って、面接対策に力を入れて本当に良かったと感じています。

ブレないために自己分析して自分の軸を決めておいたことで、余裕を持ってハキハキと面接で話すことができました。

 

余談ですが、新卒のときの就職活動は本当に苦労していました。

学生時代はサークルにも入らず、フツーに勉強してフツーにバイトしていたので話のネタが本当になかったんですよね。

逆に、今回の転職活動は社会人経験もあってネタはあったので、学生時代と比べて相当余裕を持てました。

gemの比較ができるAwesome Rubyが良さげ

Railsで開発していてライブラリを探すときに、

  • 他に似たようなgemないかな
  • 似たようなgemがあるけど、どっちのgemがいいんだろう?

みたいなことありますよね。

 

先日、DraperActiveDecoratorどっちがいいんだろう?

と思って調べていたらたまたま行き着いたのがAwesome Rubyでした。

画像

Awesome Rubyの概要

Draperのページを見ると、右サイドバーのPopular Coomparisonsに、似たような機能を備えるgemとの比較ページへの導線があります。

f:id:milkybear814:20210218194701p:plain

vs ActiveDecoratorのページに行ってみると...

f:id:milkybear814:20210218194047p:plain

画像

GitHubのStar数、Last Commitの日、さらには人気度の動向がグラフで一目瞭然です。

Code QualityはLumnifyというサイト(?)から提供されているコードの質の格付けらしいのですが、Lumnifyのサイトが保護されたページではなかったので見るのはやめました。

とりあえず格付けされていてレベルが高ければ安心かなくらい?

 

メルマガ・RSSお好きな方で購読

メルマガとRSS配信もしているのでお好きな方で設定しておくのが良さそうです。

私はメルマガあまり見ないのでFeedlyに登録して、興味のある記事だけ購読しています。

 

 

 

31歳の男が保険適用で顎変形症の治療を本格的に始めました

私は顎変形症です。

もう中学生になる前かなったくらいのときに「自分の噛み合わせってなんかおかしくね?」って気付いていました。

それに気付いておちょくってくる人間もいましたが、そんな奴に対してはガン無視を決め込んで、なんとかいじめられずにかわしてきました。

 

もちろん気になってはいたものの、学生当時はお金がかかるからまあいっかで済ませていました。

一時期調べたことはあったのですが、保険適用になり得るというところまではたどり着かず、今まで放置してきました。

 

ただ、公務員からITエンジニアに転職してリモートワークになり、Zoomで自分自身の喋っている姿とか見る機会が増えると、どうしても気になってきました。

そこで、改めて調べてみたりカウンセリングを受けた結果、治療を受けることに決めました。

顎変形症とは

顎変形症とは上あご(上顎骨)や下あご(下顎骨)の形や大きさの異常、両者のバランスによる咬み合わせの異常(咬合不正)と顔の変形などの症状を示すものです。

引用:

顎変形症|その他|形成外科で扱う疾患|一般の方へ|一般社団法人 日本形成外科学会

 

私の顎変形症

私の場合はいわゆる「受け口」という下顎が前に出ている(下顎前突)状態です。

上顎骨:やや後方位

下顎骨:著しく前方位

 

私の下顎前突具合はけっこうひどい部類に入ると思います。

もし抵抗なければ噛んだときの画像がこちらから見られるので見てみてください。

噛み合わないにも程がありませんか?笑

前歯で食べ物なんて噛めたもんじゃありません。

 

検査の結果、手術の併用が必要な顎変形症と診断され、保険適用の治療が受けられることとなりました。

 

保険適用の顎変形症治療はどの矯正歯科でもできるの?

結論から言うと、どこの矯正歯科でもできるわけではありません

厚生労働大臣が定める施設基準に適合しているものとして地方厚生(支)局長に届け出た保険医療機関(顎口腔機能診断施設)のみです。

 

どうやって探すの?

施設基準届出受理医療機関名簿 〇〇」(〇〇はお住まいの都道府県名)で検索すると、地方厚生局のページが上位に出てくるはずです。

▼ 例として関東信越厚生局のページをどうぞ。

保険医療機関・保険薬局の施設基準の届出受理状況及び保険外併用療養費医療機関一覧

 

このページから探したい都道府県の歯科のPDFを開いて「顎診」と検索してみてください。

ヒットした歯科は保険適用の矯正をやっているであろう医療機関です。

 

気になった歯科は個別にWebサイトを見て、保険適用の矯正をやっているのか調べてみると良いでしょう。

 

今日までの治療の流れ

今日、初めて矯正器具を装着したのですが、初めて矯正歯科に行ってカウンセリングを受けてから約4ヶ月経っています

 

今までやってきたことは下記のとおりです。

  1. カウンセリング
  2. 検査
  3. 都内医療機関で手術の説明
  4. 検査
  5. 抜歯
  6. セパレーション*1装着
  7. 矯正器具の型取り

 

 全体の治療方針

最後に私の治療方針を紹介して終わります。治療期間は3~3.5年の予定です。

 

  1. 上顎両側4番目抜歯 ✔
  2. 上顎にリンガルアーチ装着 ✔
  3. 下顎にW型拡大装置装着 ✔
  4. 上顎と下顎にマルチブラケット装置装着
  5. 術前矯正(2年程度)終了後、都内医療機関の口腔外科にて手術
  6. 術後矯正治療(半年~1年)

 

今度は装置を付けての生活で感じたこととか書こうかな。

*1:矯正器具をはめる空間を作るために歯と歯の間に詰めるゴム