-
[Golang + Docker]GinをDocker上で試してみる
![[Golang + Docker]GinをDocker上で試してみる](https://wordpress.aizulab.com/wp-content/uploads/2019/07/go-docker00.png)
先日、社外のエンジニアと話す機会がありました。その中でGo言語の話になり、Go言語に対しての良い印象を受けたのでそろそろバックエンド開発をGo言語にシフトしようかな、と思いました。 私はGoほぼ未経験ですので今回はDocker上にGo言語環境を容易し、Webサーバで「HelloWorld」を返す程度のものを作成してみようと思います。 ディレクトリ構成 ディレクトリの中身は以下の2ファイルのみです。それぞれ見ていきましょう。 docker-compose.yml Dockerイメージとしてgolangの最新版を使用します。 これだけでGo言語環境が使用できます。 ポートフォワードの設定は8080、コンテナ名は任意ですが今回はgo_containerとしました。 また、ディレクトリ直下のファイルをすべてコンテナ内の/go以下に配置しています。 実装はローカルのVim上で行い、実行をDockerコンテナ内で行う形で進めます。 main.go main.goを実装していきます。 その前に今回使用するGoパッケージをインストールします。 まず以下のコマンドでDockerコンテナを起動してアタッチします。 無事コンテナに入ることができたらGoのWebアプリケーションフレームワークのGinをインストールします。 インストールが完了したらmain.goを実装していきます。 git.Defaultでrouterを作成し、 routerにGETの/helloAPIを追加します。レスポンスは「Hello World!!」とします。 最後にポート8080を指定して起動します。 起動が確認できたらブラウザでlocalhost:8080/helloにアクセスしてみます。 レスポンスが確認できました。 まとめ Dockerを利用することで環境構築に時間をかけずにGo言語へ入門することができました。まずはGinを利用してCRUDのAPI開発を行なってみて少しずつGo言語での開発に慣れていきたいと思います。
-
[translate-shell]コマンドラインからGoogle翻訳を使う
![[translate-shell]コマンドラインからGoogle翻訳を使う](https://wordpress.aizulab.com/wp-content/uploads/2019/06/trans_banner.png)
私はvimを使ったり、gitのCLIを使ったり、ターミナルで作業することが多いのですが、関数名に使用する英単語が合っているか調べたい時があります。 Google翻訳で確認したいのですが、それだけのためにブラウザを起動するのは億劫なのでコマンドラインから翻訳できるtranslate-shellを使うようにしています。 https://www.soimort.org/translate-shell/ インストールと使用方法 MacではHomebrewでインストールできます。 インストールが完了したらtransコマンドが使用できます。 transコマンドはオプションとして言語と単語が指定してGoogle翻訳を行います。 試しに会津ラボの「ラボラトリー」という単語を翻訳してみましょう。 {en=ja}とすることで英語から日本語への翻訳になります。もちろん逆も可能です。 まとめ 長文の翻訳はできませんがスペルのチェックなどのちょっとした用途にはブラウザを開く手間が減るので使い勝手が良いです。普段ターミナルで作業している方はぜひ試してみてください。
-
[Mac]便利なopenコマンドをご紹介
![[Mac]便利なopenコマンドをご紹介](https://wordpress.aizulab.com/wp-content/uploads/2019/06/open_banner.png)
Mac固有のopenというコマンドをご存知でしょうか? このコマンドは汎用性が高く便利なコマンドですのでご紹介します。 フォルダ、ファイルを開く まずはフォルダについて、cdコマンドでフォルダを移動して作業している中で、「このフォルダをFinderで表示したい」という時があります。せっかくターミナルでその作業フォルダに居るのにFinderを開いてフォルダを掘り下げていくのは二度手間です。そんなとき、openコマンドが役に立ちます。 以下のように作業フォルダ、もしくはフォルダのパスを指定してopenコマンドを実行するとFinderで開くことができます。 さらにopen対象をファイルにすれば適切なアプリケーションでファイルを開くことができます。 URLを開く フォルダ、ファイルでも十分便利ですが、URLも開くことができます。 URLを指定すればブラウザを起動し、そのページを開きます。私はあまり使いませんが一応ご紹介まで。 アプリケーションを開く 前述の通り、txtファイルを指定することでテキストエディタで開くことは出来ましたが、「別のエディタで開きたい」ということもあると思います。 その際はopenコマンドに-aオプションを指定することでアプリケーションを開くことができます。 エイリアスを設定する コマンドラインからCotEditorでテキストファイルを開くことはできましたが、毎回CotEditorのパスを入力するのは手間ので、エイリアスを設定しましょう。 ホームディレクトリにある.bashrcにエイリアス設定を追加します。 これでエイリアスの設定ができましたのでcotコマンドでCotEditorを開くことができます。 まとめ いかがだったでしょうか。私はマークダウンエディタで開くためにTyporaのエイリアスを設定したり、VSCodeのエイリアスを設定したりしています。非常に便利ですのでMacをお使いのユーザーはぜひお試しください。
-
JWT(JsonWebToken)を使った認証付きGraphQL APIを作る

以前にGraphQL+MongoDB+graphql-composeという構成のGraphQL APIの実装についてご紹介させていただきました。 この構成のGraphQL APIにユーザ認証が必要になりましたのでJWT(JsonWebToken)を使った認証機構を追加しました。 JWT認証を作る JWTのパッケージをインストールします。 auth.jsを作成しJWT認証を実装していきます。 内容を見ていきます。まず、/login以外のURLで認証が必要になるように設定します。 JWTをリクエストヘッダに含んだ状態でアクセスしてもらうのでヘッダにトークンが存在しない(もしくはフォーマットが違う)場合はフォーマットエラーを返します。 ヘッダにトークンが含まれていればトークンをチェックして、可否を返します。今回は”secret”をシークレットワードとしています。 server.js server.jsを修正します。 先ほど実装したauth.jsをimportしましょう。 /loginをPOSTで設定し、リクエストパラメータ(user_id, password)を受け取って認証します。 今回はサンプルなので固定値でチェックし、ログインできればJWTを作成して返却します。 authentication(app)をgraphqlの前に追加することで/graphqlはログインが必要となります。 サーバを起動しPostmanからログインAPIを叩いてみますが・・・。 パラメータが取得できません。。。 bodyParser 毎回忘れるのですが、bodyParserのurlencodedを設定しないとパラメータ取得ができません。以下をserver.jsに追加します。 もう一度Postmanで試します。 これでログイン認証に成功し、JWTを取得することができました。 取得したJWTをヘッダに設定してGraphQLのQueryをPOSTしてみます。 無事、データを取得することができました。 ヘッダを設定しない場合は以下のようにエラーとなりますので、これで認証付きGraphQL APIの完成です。 まとめ GraphQLにアクセスする前にログインAPIを叩くのではなくGraphQLで認証する方法もあるようです。 そちらについても機会があれば検証を行い、記事にしてみたいと思います。 今回使用したコードはこちらです。 https://github.com/aizulab-igarashi/graphql_compose_auth
-
ログインShellをfishにして作業効率を改善する

こんにちは、ソリューションの五十嵐です。 ログインShellとしてzshを使用しているのですがイマイチzshを使いこなせておらず、bashと比べても作業効率が良くなっているようには思えませんでした。 そんな中fishの記事を拝見して興味を持ったので試してみました。 ちなみにGoogleでfishについて調べるとfishがなんとなく良いものだとわかります。 インストール 私はMac環境ですのでHomebrewでインストールします。 ログインShellに設定できるように/etc/shellsの末尾に/usr/local/bin/fishを追加します。 以下のコマンドでログインShellに設定します。 ターミナルを開いてfishになっていればOKです。 プラグイン管理 プラグイン管理のためFishermanをインストールします。 他にoh-my-fishというプラグインマネージャもありましたが、zshの時に使用していたoh-my-zshがイマイチ使いこなせていなかったので似た名前のこちらは選択肢から外しました。oh-my-zshとの関係性は無いと思いますが名前が受け付けなかったので。。。 テーマ変更 デフォルトでも良いのですがせっかくなのでテーマを変更します。 テーマは以下のページから選びましょう。 https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md 選んだテーマをfishermanでインストールします。 デフォルトでPowerlineフォントが有効になっているので以下のように表示が崩れます。 Powerlineフォントをインストールしても良いのですが元々使用していたRictyフォントを使用したかったのでPowerlineフォントを無効にします。 このままでは再起動時に元にもどってしまうので.config/fish/fish_configに追加しましょう。fish_configが存在しない場合には作成してください。 テーマについては以下のコマンドを実行することでブラウザから変更することもできます。 使用感 fishはコマンド入力中に履歴から補完してくれる機能があります。試しに以下のような階層ディレクトリに対してcdコマンドを実行してみます。 cdのパスに対しての補完でしたがコマンドのオプションなども補完してくれるので以下のようにdockerコマンドのオプションも補完してくれます。dockerコマンドにシンタックスハイライトが効いているのもポイントですね。 このシンタックスハイライトは以下のようにコマンドが正しいかどうか実行前に判断することができます。 まとめ 実際にfishを使ってみてかなり良い印象を受けました。bashやzshよりも情報が少ないので設定でつまづくかな、と思ったのですがそもそも設定しなくても使えるほど優秀なので杞憂でした。 POSIX互換が無いというところで問題なることがあるかもしれませんがzshよりは使いやすい印象ですので、しばらくはfishをログインShellとして使ってみようと思います。
-
[Mac]環境変数PATHを削除する
![[Mac]環境変数PATHを削除する](https://wordpress.aizulab.com/wp-content/uploads/2019/05/PATH.png)
こんにちは、ソリューションの五十嵐です。 普段はMac純正のターミナルアプリを使用していますが、Hyperというターミナルアプリがおしゃれで気になっていました。 https://hyper.is/ 試しにインストールしてみましたが、Hyper上で起動したvimが重い。。。 調べたところによると「.bash_profileで不要なexportが多くなるとlsコマンドが遅くなる」との記事を発見。 これが原因かも、と思いPATHを確認・・・ こ、これは・・・ ちょっと試してみようと思ったGoやらScalaやらRustやらNimやらのPATH一度だけ使ったAndroidSDKのPATH何故か残っているrvmのPATHなどなど、明らかに不要なPATHがひしめき合っていました。 これが原因とは断定できませんが気持ち悪いので一旦すべてクリアしようと考えました。 まずは.bash_profileでexportしている部分をすべてコメントアウト。再度source .bash_profileして結果を確認します。 まだ少し残っていますね。 Rustのcargo、ImageMagick、Mono、Wireshark、そしてrvm /etc/paths.dを参照してみます。 git以外は必要なさそうなので削除。 さらに/etc/manpaths.dも同様に。 再度確認。 cargoとrvmが生き残り・・・。 Rust Rustをアンインストールして確認 まだ残っているので.bash_profileに以下を追加してPATHを初期化 Rustは消えましたがrvmが残りました。。。 rvm まずは.rvmを削除してみることに。 まだ残っているので、「アンインストール時に不備があり、PATHだけ残ったのでは?」と考えました。そこで、もう一度rvmをインストールしてからアンインストール。 変わらず。。。 もう一度.bash_profileを見返してみました。 ・・・これは? 完全に見落としていました・・・。.profile内を完全に削除して再度確認。 やっとPATHが初期化されました。 まとめ PATHを掃除してみましたがHyperの動作についてはあまり変化がありませんでした。それでもPATHが綺麗になったのでひとまずは満足といったところでしょうか。今後はDockerでそれぞれ開発環境を用意し、ホスト環境を汚染しないようにしようと思います。 今回記事にまとめたPATHについては私が入社した当初、知識も経験も無い状態でネットの情報をそのまま.bash_profileにコピペしたりexportコマンドを実行したことが原因です。 黒い画面が苦手で、とりあえずコマンドをコピペしている方もいると思いますが、私のようにPCが汚れていくことになりますのでexportに限らず、コマンドを理解した上で実行しましょう。
-
[Mac]デスクトップ整理で仕事効率UP!一瞬で片付ける魔法のコマンド
![[Mac]デスクトップ整理で仕事効率UP!一瞬で片付ける魔法のコマンド](https://wordpress.aizulab.com/wp-content/uploads/2019/05/Mac一時的にデスクトップを真っさらにする方法.png)
こんにちは、ソリューションの五十嵐です。ブログの記事を書く際に画面のスクリーンショットを撮影する事がありますが、外部に漏らしてはいけない情報を写さないように気をつけて撮影しています。 中でもデスクトップのスクリーンショットを撮影する際には、デスクトップにある書類を退避してから撮影するなど手間になります。。。 ところが、Macユーザーであればこの手間を軽減することができます。 defaultsコマンド Macにはdefaultsというコマンドが用意されています。このコマンドはシステムの設定値を取得、変更するコマンドなのですが、その設定値の1つにデスクトップのアイコンを表示するか否かの設定があります。 こちらがコマンド実行前の私のデスクトップです。 ではdefaultsコマンドで設定値を変更してみましょう。 設定値を変更することができましたがFinderを再起動しないと設定は反映されません。 以下のコマンドで設定を反映しましょう。 これでデスクトップが真っさらになったと思います。 元に戻す場合は以下で設定値をtrueにしましょう。 Finderの再起動も忘れずに。 コマンドが長い・・・ コマンドでデスクトップを綺麗にすることはできましたがご覧の通り、コマンドが長いです。。。毎日切り替えるわけでもないので、いざ使おうと思う時にはコマンドを忘れてしまっています。 そこで、この手順をShellScriptにしてみます。さきほどの設定値はreadオプションを指定することで0,1で取得できます。 これを判定して設定を逆転するようにします。 desktop_clear.sh 現在の設定を見て、設定を逆転しFinderを再起動するShellの完成です。 ShellScriptはchmodコマンドで権限を変更しないと実行することができません。 以下のように755権限に変更しましょう。 エイリアス化 私はShellScriptを~/Shells以下にディレクトリを作って保存していますので、今回のShellScriptのパスは~/Shells/DesktopClear/desktop_clear.shとなります。 つまりデスクトップをクリアするためのShellScript実行コマンドは以下の通りです。 コマンドが長いのでShellScriptにまとめたはずが、結局呼び出しコマンドが長くなってしまっています。 そこでこのShellScriptをエイリアスとして登録したいと思います。 .bashrcを開いて以下の通りにエイリアスを追加しましょう。 .bashrcを変更したら$ source .bashrcで変更を反映します。これでエイリアス設定ができましたのでdclearコマンドでデスクトップアイコンの表示を切り替えることができます。 まとめ 今回はデスクトップアイコンの非表示を方法をご紹介しました。 後半にご紹介したShellScript化、エイリアス設定はデスクトップアイコンの表示に限らず様々な便利機能を設定することができます 普段使用していて、もっと手軽に実行できるようにならないかな。と思っているコマンドがあれば、試してみてはいかがでしょうか。
-
[gibo] Gitの無視ファイルgitignoreを一瞬で作る方法
![[gibo] Gitの無視ファイルgitignoreを一瞬で作る方法](https://wordpress.aizulab.com/wp-content/uploads/2019/05/gibo_banner.png)
みなさんは普段どのようにgitignoreを作成していますか? 手作業で設定したり、GitHubのテンプレートから持ってきたり、前に使ったものを流用したりなど、様々な方法があるかと思いますが、 もしこのような方法で作成している方には「gibo」というツールをオススメします。 https://github.com/simonwhitaker/gibo インストール Mac環境であればHomebrewでインストールできます。 使い方 gibo listを実行すると対応する言語、フレームワークが表示されます。 だいたいの言語やメジャーなフレームワークであればリストに含まれているかと思います。 gitignoreを作成するにはdumpコマンドを使います。 以前はdump無しで良かったのですがアップデートで変更されたようです。 gibo dump NodeとするとNode.jsのgitignoreを出力します。 Railsであればgibo dump Railsのように使用する言語、フレームワークを指定しましょう。 これを.gitignoreファイルに書き込みます。 これでNodeの.gitignoreファイルが作成できます。 まとめ giboは https://github.com/github/gitignore を参照してgitignoreを作成しているようなのでgitignoreの内容も問題ないと思います。 私は以前から使用していたのですがあまりメジャーではないようでしたので紹介させて頂きました。 今まで手作業でgitignoreを作成していた方は、ぜひ使用されてみてはいかがでしょうか。
-
【GraphQL+MongoDB】graphql-composeで簡単にGraphQL APIを実装する

こんにちは、ソリューションの五十嵐です。 MongoDB + GraphQLでデータを提供する案件に携わりました。 その際に使用したgraphql-composeというライブラリが素晴らしかったので記事にまとめます。 GraphQLとは GraphQLはクライアントとサーバでのデータのやりとりに使用するクエリ言語です。 欲しいデータを過不足なく取得できるほか、学習コストが小さいなどのメリットがあります。 デメリットとしてサーバサイドの実装が難しいという情報が多いですが、 graphql-composeを使用することで簡単にCRUD機能を有するGraphQL APIを実装できます。 https://graphql-compose.github.io/ 構成は以下の通りです。 Node.js Express MongoDB Mongoose GraphQL Express まずは必要なパッケージをインストールし、Expressのアプリケーションを作成します。 メインとなるserver.jsを実装していきましょう。 server.jsを実行し、http://localhost:8080/helloにアクセスするとHello Worldが表示されます。 MongoDB MongoDBとの接続を行います。 Mongooseを使用したいので、以下のコマンドで必要なパッケージをインストールしましょう。 次にutilsディレクトリを作成し、その中にDBとの接続を行うdatabase.jsを作成します。 utils/database.js database.jsをimportし、DB.connect()を実行することでMongoDBに接続されるようになりました。 GraphQL GraphQLを実装していきます。 まずはGraphQL関連の必要パッケージをインストールします。 スキーマとモデルのディレクトリを作成します。 今回はサンプルとして本のタイトルと著者のデータとします。 タイトルと著者をString型として定義したモデルを作成します。 models/book.js さらにスキーマも作成します。 ここで本記事の主役であるgraphql-composeを使用します。 graphql-composeはGraphQLのスキーマを作成するToolkitとのことで、 簡単にスキーマを作成することができます。 schemata/book.js これだけでCRUDのGraphQL APIになります。 最後にserver.jsを修正してGraphQLを有効にします。 server.js 再度server.jsを実行して以下のURLを開いてみましょう、GraphQLの実行環境が表示されます。 http://localhost:8080/graphql DBにデータが存在していないのでGraphQLでデータを新規登録してみます。 【GraphQL+MongoDB】graphql-composeで簡単にGraphQL APIを実装する実行環境の左上に以下のmutationを入力します。 さらに左下のQUERY VARIABLESの部分に以下を入力し実行しましょう。 作成されたデータのIDがレスポンスとして返却されます。 データが作成できましたのでGraphQLでデータを取得してみます。 実行環境の左上に以下のqueryを入力して実行してみます。…
-
Macのターミナルで連番のテストデータを作る

実務の中で以下のようなテストデータが必要になりました。 このようなデータを手作業で作成するのは非合理的なので、ターミナルから簡単に作成してみます。 テストデータの作成 まずディレクトリを作成します。 mkdirコマンドは-pオプションを指定することでディレクトリが存在しない場合に自動的に作成してくれます。 今回のケースではDataディレクトリを作成し、TextDataディレクトリを作成し…という形です。 その後はcd $_で作成したディレクトリに移動しますので、 $ cd Data/TextData/2019/0501のようにわざわざパスを指定して移動する手間がなくなります。 テスト用のテキストファイルを作成するためにtruncateコマンドを使用します。 Macではデフォルトでは使用できませんのでbrewでインストールしましょう。 truncateコマンドをインストールできたらサイズを指定してファイルを作成します。(とりあえず10kbのテキストとします。) このテキストファイルが50件欲しいので連番でコピーします。 printf “%02d”とすることで2桁のゼロ埋めした数値となります。 同じようにディレクトリも連番コピーします。 これで最初に提示した構造のテストデータが作成できました。 手順さえ覚えれば何千件、何万件のデータでも作成できますので覚えておくと役に立つかもしれません。