<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[rss all]]></title><description><![CDATA[フリーランスエンジニアのブログです。フリーランス、プログラミング、旅行について「ブログ書け、コード書け」というテーマでやらせてもらってます。]]></description><link>https://ver-1-0.net/blog</link><generator>GatsbyJS</generator><lastBuildDate>Tue, 09 Jun 2026 06:37:43 GMT</lastBuildDate><item><title><![CDATA[2024 年版 開発時のエディタ周りの環境設定(Neovim, tmuxなど)まとめ]]></title><description><![CDATA[最近コーディングの配信を行ったりしているのですが、結構 Vim に関してコメントを頂くことが多く、ちょっと今自分の状況を振り返ってみると 設定したのが昔すぎてうまく説明できない Neovim を使っているが、Vim Script でそのまま設定してたので、lua…]]></description><link>https://ver-1-0.net/blog/2024/10/21/devenv-2024</link><guid isPermaLink="false">https://ver-1-0.net/blog/2024/10/21/devenv-2024</guid><pubDate>Mon, 21 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近コーディングの配信を行ったりしているのですが、結構 Vim に関してコメントを頂くことが多く、ちょっと今自分の状況を振り返ってみると&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;設定したのが昔すぎてうまく説明できない&lt;/li&gt;
&lt;li&gt;Neovim を使っているが、Vim Script でそのまま設定してたので、lua で設定したい&lt;/li&gt;
&lt;li&gt;そろそろ古くなっているプラグインや知らないけど便利なプラグインがあるかもしれない&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;などなどがあったのでこの度 Neovim の設定を lua に移行しつつ使用プラグインの見直しを行いました。
プラスで自分の環境周りも整理したかったので備忘がてら記事にまとめてみました。&lt;/p&gt;
&lt;h2 id=&quot;エディタ周りの環境&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E5%91%A8%E3%82%8A%E3%81%AE%E7%92%B0%E5%A2%83&quot; aria-label=&quot;エディタ周りの環境 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;エディタ周りの環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Mac&lt;/li&gt;
&lt;li&gt;モニタ2台(Display Menu)&lt;/li&gt;
&lt;li&gt;tmux&lt;/li&gt;
&lt;li&gt;Alacritty&lt;/li&gt;
&lt;li&gt;Neovim&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;エディタ周りの環境は上記のようになっています。&lt;/p&gt;
&lt;h3 id=&quot;PC周り&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#PC%E5%91%A8%E3%82%8A&quot; aria-label=&quot;PC周り permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PC周り&lt;/h3&gt;
&lt;p&gt;開発には長年 Mac を使用していて、 モニタ2台で開発していることが多いです。モニタの解像度変更ようには&lt;a href=&quot;https://apps.apple.com/ca/app/display-menu/id549083868?mt=12&quot;&gt;Display Menu&lt;/a&gt; というアプリを使っています。
(大きい方のモニタでコードを書いて、小さい方のモニタでブラウザを開いていることが多いです)&lt;/p&gt;
&lt;h3 id=&quot;ターミナルアプリケーション&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&quot; aria-label=&quot;ターミナルアプリケーション permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ターミナルアプリケーション&lt;/h3&gt;
&lt;p&gt;またターミナルアプリケーションは &lt;a href=&quot;https://alacritty.org/&quot;&gt;Alacritty&lt;/a&gt; を使用しています。ターミナルは可能な限りサクサク動いて欲しいので早いという評判の Alacritty を使っています。
今の所そんなに不満はないのですが、&lt;a href=&quot;https://sw.kovidgoyal.net/kitty/&quot;&gt;kitty&lt;/a&gt; が良いというのもちょこちょこ聞くのでいずれ試してみたいところです。ターミナルアプリは真剣に比較していないので暫定的なものです。&lt;/p&gt;
&lt;h2 id=&quot;Tmux-周りの設定や使い方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Tmux-%E5%91%A8%E3%82%8A%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%84%E4%BD%BF%E3%81%84%E6%96%B9&quot; aria-label=&quot;Tmux 周りの設定や使い方 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Tmux 周りの設定や使い方&lt;/h2&gt;
&lt;p&gt;tmux はターミナルの分割を行うために使用しています。
tmux を使いこなしているとは言い難いのですが、自分が一番重宝している機能はこれかなという感じです。&lt;/p&gt;
&lt;p&gt;tmux を知ったのは結構遅かったと思うのですが、&lt;a href=&quot;https://youtu.be/sSOfr2MtRU8?si=ODpWkFP4qYoo8VMY&amp;#x26;t=269&quot;&gt;Inkdrop 作者の Takuya さんの動画&lt;/a&gt;がきっかけでtmuxを使い始めて動画の説明と同じようにtmuxを使っています。
コマンドベースで最初に開く window の枚数や配置・サイズを指定できるので一瞬で自分の好みのレイアウトを立ち上げられるのが便利です。&lt;/p&gt;
&lt;h3 id=&quot;作業時のウィンドウのレイアウト&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BD%9C%E6%A5%AD%E6%99%82%E3%81%AE%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AE%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88&quot; aria-label=&quot;作業時のウィンドウのレイアウト permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;作業時のウィンドウのレイアウト&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2024/10/20241021_devenv-2024/devscreen.png&quot; alt=&quot;実際の作業時のウィンドウスクリーンショット&quot;&gt;&lt;/p&gt;
&lt;p&gt;自分は多くの場合、この画像のような上1枚、下4枚のレイアウトで作業しています。下4枚はターミナル用の window で、上が Neovim 用 Window です。
下4枚では左2枚が大体 フロントとバック用のサーバをたちあげてログを流す画面になっています。右2枚はスペアで簡単なコマンドを試したり別ディレクトリのものを触りたくなったりした時に使います。&lt;/p&gt;
&lt;p&gt;多くの場合はエディタ開きっぱなしなのですが、たまにPCを立ち上げ直したあとなどは用意したスクリプトを叩いて必ずこのウィンドウの状況を再現するようにしています。
(tmux のセッションを永続化することも可能なのようなのでそれでやるのも良いと思います。)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token shebang important&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt;

tmux split-window &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-l&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;%
tmux split-window &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-l&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;%
tmux split-window &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-l&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;%
tmux select-pane &lt;span class=&quot;token parameter variable&quot;&gt;-L&lt;/span&gt;
tmux select-pane &lt;span class=&quot;token parameter variable&quot;&gt;-L&lt;/span&gt;
tmux split-window &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-l&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;%
tmux select-pane &lt;span class=&quot;token parameter variable&quot;&gt;-U&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;tmux のセッションを開いた後にこれを打てばウィンドウ再現できるかと思います。&lt;/p&gt;
&lt;h3 id=&quot;キーバインド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89&quot; aria-label=&quot;キーバインド permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;キーバインド&lt;/h3&gt;
&lt;p&gt;後にも説明しますが、ペーンの移動は Vim の中での移動とtmux 内での移動の両方があるのでそれぞれキーバインドが衝突しないように設定を行っています。
tmux.conf の中の設定でいうと下記のように設定しています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;bind&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; C-h select-pane &lt;span class=&quot;token parameter variable&quot;&gt;-L&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;bind&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; C-j select-pane &lt;span class=&quot;token parameter variable&quot;&gt;-D&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;bind&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; C-k select-pane &lt;span class=&quot;token parameter variable&quot;&gt;-U&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;bind&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; C-l select-pane &lt;span class=&quot;token parameter variable&quot;&gt;-R&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;キーバインド&lt;/th&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + h&lt;/td&gt;
&lt;td&gt;左のPaneに移動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + j&lt;/td&gt;
&lt;td&gt;下のPaneに移動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + k&lt;/td&gt;
&lt;td&gt;上のPaneに移動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl + l&lt;/td&gt;
&lt;td&gt;右のPaneに移動&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Vim 内での移動は Space + hjkl で行うので、ターミナル内での移動は Ctrl + hjkl で行うようにしています。&lt;/p&gt;
&lt;h2 id=&quot;Neovim-の基本設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Neovim-%E3%81%AE%E5%9F%BA%E6%9C%AC%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;Neovim の基本設定 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Neovim の基本設定&lt;/h2&gt;
&lt;p&gt;さて、続いては Neovim の設定についてです。
こちらはリポジトリで公開しているので、興味がある方はご確認ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/nvimconf&quot;&gt;version-1/nvimconf&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;ディレクトリ構成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90&quot; aria-label=&quot;ディレクトリ構成 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ディレクトリ構成&lt;/h3&gt;
&lt;p&gt;ディレクトリ構成は下記のようになっています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;├── README.md              
├── init.lua               # 最初に読み込まれる設定ファイル
├── install.sh             # LSP など依存しているライブラリのインストールをまとめたスクリプト
├── lazy-lock.json         # lazy のロックファイル
└── lua                    # 設定ファイルを分割して書いているディレクトリ
    ├── base.lua           # 基本の設定
    ├── config
    │   └── lazy.lua       # lazy の設定
    ├── keymaps.lua        # プラグインに依存しないキーバインドの設定
    └── plugins            # lazy で読み込むプラグインの設定
        ├── cmp.lua        # cmp 補完プラグインの設定
        ├── formatter.lua  # formatter の設定
        ├── lsp.lua        # lspconfig の設定
        ├── lualine.lua    # lualine の設定
        ├── plugins.lua    # その他設定なしで読み込めるプラグインをまとめたもの
        ├── tree.lua       # nvim-tree の設定
        ├── treesitter.lua # treesitter の設定
        └── whichkey.lua   # whichkey の設定&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Neovim では、init.lua に設定を書いておくと Neovim 起動時に設定を読み込んでくれるのでここに様々な設定やプラグインの読み込みを書いています。
とはいえ、全部の設定を一つのファイルにかくと見通しがわかりにくくなるので、上記の表のように設定を分割しています。&lt;/p&gt;
&lt;h3 id=&quot;基本設定baselua&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%9F%BA%E6%9C%AC%E8%A8%AD%E5%AE%9Abaselua&quot; aria-label=&quot;基本設定baselua permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;基本設定(base.lua)&lt;/h3&gt;
&lt;p&gt;元々の Neovim 組み込みの設定は base.lua に記述しています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;lua&quot;&gt;&lt;pre class=&quot;language-lua&quot;&gt;&lt;code class=&quot;language-lua&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;-- https://neovim.io/doc/user/quickref.html#option-list&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;encoding &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;number &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smartindent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;clipboard &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;unnamedplus&quot;&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;expandtab &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;tabstop &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;shiftwidth &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;wrap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;false&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;termguicolors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;wildmenu &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ruler &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smartcase &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;showmatch &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;

vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mapleader &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos; &apos;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;-- Leader に Space を割り当てる&lt;/span&gt;
vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;maplocalleader &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;\\&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コメントにもありますが、Neovim の設定項目は
&lt;a href=&quot;https://neovim.io/doc/user/quickref.html#option-list&quot;&gt;https://neovim.io/doc/user/quickref.html#option-list&lt;/a&gt;
ここを見ると書いてあります。&lt;/p&gt;
&lt;h4&gt;Leader について&lt;/h4&gt;
&lt;p&gt;一応言及しておくべきは Leader と言って Vim を操作する際にキーバインドの先頭につけるキーをSpaceに割り当てています。
これはVim の操作をする上で最重要なキーバインドになるので、自分の使いやすいリーダーに割り当てられると良いと思います。
自分は、Vimを使い始めた当初にMedium でSpaceが使いやすいと言っている記事(記事の所在は忘れました・・・)を見つけたのでそれ以来 Space を使っています。&lt;/p&gt;
&lt;p&gt;今回記事を書くのとVim周りの設定をluaに移行するにあたり色々な人の vimconfig をみているのですが割と Space に Leaeder を設定している方が多そうです。
参考にした &lt;a href=&quot;https://nvchad.com/&quot;&gt;Nvchad&lt;/a&gt; も Space に Leader を設定しているので、割と一般的な設定にも思えます。&lt;/p&gt;
&lt;h3 id=&quot;基本のキーバインドkeymapslua&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%9F%BA%E6%9C%AC%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89keymapslua&quot; aria-label=&quot;基本のキーバインドkeymapslua permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;基本のキーバインド(keymaps.lua)&lt;/h3&gt;
&lt;p&gt;プラグインによらないキーバインドは keymaps.lua に記述しています。
Vim上でのウィンドウの移動や分割、ターミナルの開閉などのキーバインドをここに書いています。
ここで &lt;Leader&gt; と書いているものが先ほどの base.lua で設定した Space になります。&lt;/p&gt;
&lt;p&gt;luaへの移行前は、コメントの ON/OFF をプラグインでやっていましたが、&lt;a href=&quot;https://neovim.io/doc/user/various.html#_3.-commenting&quot;&gt;Neovimではデフォルトで gcc と入力すれば使える&lt;/a&gt;のが分かったのでキーバインドを変えて使っています。
自分は Ctrl + -(ハイフン) でコメントアウトができるようにしています。&lt;/p&gt;
&lt;p&gt;自分はコードを書いている際に頻繁に window 分割したり移動を行うので、Space + jklh でウィンドウの移動、Space+s or Space + v でウィンドウ分割をしています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;lua&quot;&gt;&lt;pre class=&quot;language-lua&quot;&gt;&lt;code class=&quot;language-lua&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;local&lt;/span&gt; map &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;api&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nvim_set_keymap
&lt;span class=&quot;token comment&quot;&gt;-- move window&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;j&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-w&gt;j&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; silent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;k&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-w&gt;k&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; silent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;l&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-w&gt;l&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; silent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;h&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-w&gt;h&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; silent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;-- split window&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;s&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;:&amp;lt;C-u&gt;sp\n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;v&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;:&amp;lt;C-u&gt;vs\n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;-- close window&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;w&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;:&amp;lt;C-u&gt;w\n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;q&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;:&amp;lt;C-u&gt;q\n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;wq&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;:&amp;lt;C-u&gt;wq\n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;-- open terminal&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;tt&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;:terminal\n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;i&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-k&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Up&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;i&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-j&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Down&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;i&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-h&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Left&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;i&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-l&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Right&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;-- show diagnostics&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;Leader&gt;d&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;:lua vim.diagnostic.open_float()&amp;lt;CR&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;-- rebind embeded command&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-_&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;gcc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;false&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;v&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;C-_&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;gc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; noremap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;false&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;NeoVim-のプラグイン周りpluginslua&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#NeoVim-%E3%81%AE%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E5%91%A8%E3%82%8Apluginslua&quot; aria-label=&quot;NeoVim のプラグイン周りpluginslua permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;NeoVim のプラグイン周り(plugins/*.lua)&lt;/h2&gt;
&lt;p&gt;プラグインの設定は plugins ディレクトリ以下に分割して書いていて、個別に設定が必要ないものは plugins/plugins.lua に書きそうでないものは専用のファイルを作って管理しています。&lt;/p&gt;
&lt;h3 id=&quot;パッケージマネージャ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3&quot; aria-label=&quot;パッケージマネージャ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;パッケージマネージャ&lt;/h3&gt;
&lt;h4&gt;lazy &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;repo&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;プラグインの読み込みは lazy を使っています。lazy を設定すると plugins 配下のファイルを読み込んで plugin をセットアップしてくれます。&lt;/p&gt;
&lt;h3 id=&quot;補完シンタックスチェック&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A3%9C%E5%AE%8C%E3%82%B7%E3%83%B3%E3%82%BF%E3%83%83%E3%82%AF%E3%82%B9%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF&quot; aria-label=&quot;補完シンタックスチェック permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;補完・シンタックスチェック&lt;/h3&gt;
&lt;h4&gt;nvim-lspconfig &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig&quot;&gt;repo&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/lsp.lua&quot;&gt;plugins/lsp.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;補完やジャンプ、定義の確認、シンタックスチェックにLSP必要なので言語別にサーバを設定できるプラグインです。&lt;/p&gt;
&lt;h4&gt;nvim-cmp &lt;a href=&quot;https://github.com/hrsh7th/nvim-cmp&quot;&gt;repo&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/cmp.lua&quot;&gt;plugins/cmp.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;補完プラグインです。LSP と連携して補完を行うことができます。&lt;/p&gt;
&lt;h4&gt;nvim-treesitter &lt;a href=&quot;https://github.com/nvim-treesitter/nvim-treesitter&quot;&gt;repo&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/treesitter.lua&quot;&gt;plugins/treesitter.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;シンタックスハイライトやシンタックスチェックを行うために入れています。
構文解析のためのツールである treesitter と nvim-treesitter を良い感じに繋げるプラグインという理解です。
(ちょっと使い始めて日が浅いので雑な説明になっていますすみません）&lt;/p&gt;
&lt;p&gt;普段使う言語の Parser だけ使うように設定しています。&lt;/p&gt;
&lt;h4&gt;copilot.vim &lt;a href=&quot;https://github.com/github/copilot.vim&quot;&gt;repo&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/plugins.lua&quot;&gt;plugins/plugins.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;言わずもがな Github Copilot のVim用プラグインです。これでだいぶ補完が効く様になるのですが、そこまで使い方深堀できていないのでまた時間のある時に使い方を調べてみたいです。&lt;/p&gt;
&lt;h3 id=&quot;ファイルエクスプローラ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9&quot; aria-label=&quot;ファイルエクスプローラ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ファイルエクスプローラ&lt;/h3&gt;
&lt;h4&gt;nvim-tree &lt;a href=&quot;https://github.com/nvim-tree/nvim-tree.lua&quot;&gt;repo&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/tree.lua&quot;&gt;plugins/nvim-tree.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ファイルエクスプローラ用のプラグインです。ほぼ一般的なエディタについてるファイルエクスプローラと同様に使えます。
元々はNerdTree を使っていたのですが、lua 移行にともなって移行しました。
&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;nvim-web-devicons&lt;/a&gt;もインストールすれば他のIDEと同等の見た目になり、ファイルの情報もみやすくなるのでおすすめです。&lt;/p&gt;
&lt;p&gt;エクスプローラの開閉は Space + e で行うようにしています。こういったプラグインのコマンドを実装するためのキーバインド設定は keymaps.lua でやらずここでやっています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;lua&quot;&gt;&lt;pre class=&quot;language-lua&quot;&gt;&lt;code class=&quot;language-lua&quot;&gt;keys &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;leader&gt;e&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;cmd&gt;NvimTreeToggle&amp;lt;cr&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; desc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;TreeToggle&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;デフォルトのキーバインドでは、Enter でファイルを開くときにいちいちどの Pane で開くか聞かれるのが嫌だったのでマッピングを変えています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;lua&quot;&gt;&lt;pre class=&quot;language-lua&quot;&gt;&lt;code class=&quot;language-lua&quot;&gt;  vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;keymap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;CR&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;open&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;no_window_picker&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; opts &lt;span class=&quot;token string&quot;&gt;&quot;Open: No Window Picker&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  vim&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;keymap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;O&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;open&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;edit&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; opts &lt;span class=&quot;token string&quot;&gt;&quot;Open&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;検索&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%A4%9C%E7%B4%A2&quot; aria-label=&quot;検索 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;検索&lt;/h3&gt;
&lt;h4&gt;ファジーファインダー &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim&quot;&gt;telescope&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/plugins.lua&quot;&gt;plugins/plugins.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;高機能なファジーファインダープラグインです。ファイル検索や文字列でインクリメンタルサーチができます。
正直エディタにこれがないと辛いですよね。CUIベースのエディタとは思えないくらいリッチなUIを持っているので非常に便利です。&lt;/p&gt;
&lt;p&gt;キーバインドは下記の様な形で頻繁に使うのですぐに使える様にしています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;キーバインド&lt;/th&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Space + p&lt;/td&gt;
&lt;td&gt;ファイル検索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Space + g&lt;/td&gt;
&lt;td&gt;文字列検索&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;フォーマッタ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%82%BF&quot; aria-label=&quot;フォーマッタ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フォーマッタ&lt;/h3&gt;
&lt;h4&gt;フォーマッタ &lt;a href=&quot;https://github.com/stevearc/conform.nvim&quot;&gt;conform.nvim&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/formatter.lua&quot;&gt;plugins/formatter.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;フォーマッタプラグインです。他のプラグインなどと同様にファイル保存時に自動でフォーマットをかけることができます。
フォーマッタは言語ごとに設定可能で自分は、gofmt, goimports, prettierd 等々を設定しています。
こちらもフォーマットをかける際のキーバインドはconform用の設定ファイルで書いています。&lt;/p&gt;
&lt;p&gt;コードを書きながら手動でフォーマットをかけるのを好むので手動のフォーマトコマンドを設定しています。
conform では若干設定が必要なので下記の Recipe に従ってコマンドを作ってそれを呼び出す形で使っています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/stevearc/conform.nvim/blob/master/doc/recipes.md#format-command&quot;&gt;Format command&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;見た目系&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A6%8B%E3%81%9F%E7%9B%AE%E7%B3%BB&quot; aria-label=&quot;見た目系 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;見た目系&lt;/h3&gt;
&lt;h4&gt;ステータスバー &lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim&quot;&gt;lualine&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/lualine.lua&quot;&gt;plugins/lualine.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ステータスラインをカスタマイズするプラグインです。ステータスライン変えるだけでもかなりこなれた感じになるので試してみてみると良いと思います。
前は設定が悪かったのかステータスライン系のプラグインを入れると重くなってしまっていたので、自前で設定していましたが lualine は問題なさそうです。&lt;/p&gt;
&lt;h4&gt;カラープレビュー &lt;a href=&quot;norcalli/nvim-colorizer.lua&quot;&gt;nvim-colorizer&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/plugins.lua&quot;&gt;plugins/plugins.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;カラーコードをプレビューしてくれるプラグインです。CSSを書く際にかなり便利です。
カラーコードの上に乗っかる形でプレビューされるのですが、自分的にはカラーコードの横に色を表示させたい（文字色などによって見辛くなるので)というのは多少あります。&lt;/p&gt;
&lt;p&gt;プラグインの自作にもトライしたいので、時間がある時に作ってみたいなーなんて思っています。&lt;/p&gt;
&lt;h3 id=&quot;その他&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%9D%E3%81%AE%E4%BB%96&quot; aria-label=&quot;その他 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;その他&lt;/h3&gt;
&lt;h4&gt;キーバインドヘルプ &lt;a href=&quot;https://github.com/folke/which-key.nvim&quot;&gt;which-key&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/whichkey.lua&quot;&gt;plugins/whichkey.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;キーバインドのヘルプを表示してくれるプラグインです。自分で設定したキーバインドがわからなくなった時に便利なのでおすすめです。
また自分で設定したキーバインドが効いているかも確認できて非常に便利です。移行の際に知ったプラグインですが嬉しい発見の一つでした。&lt;/p&gt;
&lt;h4&gt;囲み文字編集 &lt;a href=&quot;https://github.com/kylechui/nvim-surround&quot;&gt;nvim-surround&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;設定 &lt;a href=&quot;https://github.com/version-1/nvimconf/blob/main/lua/plugins/plugins.lua&quot;&gt;plugins/plugins.lua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらは移行の際の調べ物で見つけたプラグインです。動画で紹介しているものを見つけて便利そうなので入れてみました。
まだ使えこなせてはいないのですが、Vim で囲み文字を追加する際に便利そうなので使ってみようと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/NJDu_53T_4M?si=H2mCYhO5M83oPu8A&amp;#x26;t=36&quot;&gt;nvim-surround | 5 Neovim Plugins To Improve Your Productivity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;ds&quot;&lt;/code&gt; の様に入力するだけでワード周りのダブルクォーテーションを削除できたり、丸括弧、波括弧、角括弧なども少ないキーストロークで入力が行えるので非常に便利そうです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回 lua に移行したのですが、その過程で Neovim をはじめとしたドキュメントを読み漁りました。
自分が知らないプラグインやNeovimの機能が結構あることに気づいたので、やはり定期的に設定を見直すのは必要な様です。&lt;/p&gt;
&lt;p&gt;neovim 内で :terminal とするとターミナルが開くのですが、これを使うとターミナルとエディタ間の移動がいらなくなるので、もしかしたら tmux も使わなくて済むのかもしれないです。
今のところは慣れているtmux+neovimで運用していますが、意外とneovim だけでやっていけるのかもしれません。
(tmuxには他の機能もあるのと、vim内のターミナルの操作がどの程度使いやすいかがあるのですぐに移行はできなそう）&lt;/p&gt;
&lt;p&gt;いずれにせよ、ここに書いたのは現時点での環境ですぐに変わることはないと思いますが徐々に変わっていくことになるかと思うので今回の様な変更があればまた記事を書きたいと思います。
また、もう少し普段 vim を使わない方向けにも記事を書いてみたいと思うので、今回の作業を違った角度から記事にもできればなと思っています。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2024/10/20241021_devenv-2024/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Implementing Ruby's methods Method in JavaScript]]></title><description><![CDATA[Suddenly, isn't Ruby's methods method handy? When writing code, it lists all the methods and properties available for an object and allows…]]></description><link>https://ver-1-0.net/blog/en/2024/07/29/ruby-methos-method-on-js</link><guid isPermaLink="false">https://ver-1-0.net/blog/en/2024/07/29/ruby-methos-method-on-js</guid><pubDate>Mon, 29 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Suddenly, isn&apos;t Ruby&apos;s methods method handy? When writing code, it lists all the methods and properties available for an object and allows you to search through them, which is very useful for debugging.&lt;/p&gt;
&lt;p&gt;Besides that, it is also effective for checking methods specific to frameworks like Rails, aiding in code reading and understanding libraries. While it&apos;s good practice to refer to official documentation or source code, the methods method is quite helpful for libraries where you don’t need to dive deeply or when you have vague memories of method names.&lt;/p&gt;
&lt;h2 id=&quot;Rubys-code-classlanguage-textmethodscode-Method&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Rubys-code-classlanguage-textmethodscode-Method&quot; aria-label=&quot;Rubys code classlanguage textmethodscode Method permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Ruby&apos;s &lt;code class=&quot;language-text&quot;&gt;methods&lt;/code&gt; Method&lt;/h2&gt;
&lt;p&gt;To briefly introduce Ruby&apos;s methods method, it looks like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ruby-doc.org/3.2.2/Object.html#method-i-methods&quot;&gt;Object#method&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Returns a list of the names of public and protected methods of obj. This will include all the methods accessible in obj’s ancestors. If the optional parameter is false, it returns an array of obj’s public and protected singleton methods, the array will not include methods in modules included in obj.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words, it returns an array object of the properties and methods accessible from the receiver.&lt;/p&gt;
&lt;p&gt;This method is implemented in the Object class, which is the ancestor of all classes that inherit from Object, so it can be used in any class inheriting from Object.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sample Code&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt;
  attr_accessor &lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;bar&lt;/span&gt;&lt;/span&gt;
    puts &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

puts &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;methods     &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:bar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:hash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:singleton_class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:dup&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
puts &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;grep &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;fuga&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As shown in the example, it returns an Array object, so you can also search through the list of methods using the grep method, which is very convenient.&lt;/p&gt;
&lt;p&gt;So, I thought about whether this could be done in JS and gave it a try.&lt;/p&gt;
&lt;h2 id=&quot;Implementation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Implementation&quot; aria-label=&quot;Implementation permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Implementation&lt;/h2&gt;
&lt;p&gt;Below is the actual code.&lt;/p&gt;
&lt;p&gt;The class name can be anything, but I’m naming it PropertyFinder for now.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PropertyFinder&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;receiver&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; receiver
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;regexp&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; res &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; regexp &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;string&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;regexp&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;regexp &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RegExp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; regexp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;detect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getOwnPropertyNames&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;it&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;detect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;it&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; list
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; ancestors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PropertyFinder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;detect&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;ancestors&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I’ll explain the code later, but let’s start with how to use it.&lt;/p&gt;
&lt;p&gt;Once the class is defined, you can add a method to the Object class&apos;s properties as follows:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;methods&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PropertyFinder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;By doing this, you can use the methods method on instances of classes inheriting from Object. However, please be aware of the caution note below and use this at your own risk.&lt;/p&gt;
&lt;p&gt;Here are some example executions:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;fuga&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;fuga&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// =&gt; [&apos;constructor&apos;, &apos;constructor&apos;, &apos;__defineGetter__&apos;, &apos;__defineSetter__&apos;, &apos;hasOwnProperty&apos; ...]&lt;/span&gt;
console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;           &lt;span class=&quot;token comment&quot;&gt;// =&gt; [&apos;length&apos;, &apos;length&apos;, &apos;constructor&apos;, &apos;at&apos;, &apos;concat&apos;, ...]&lt;/span&gt;
console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;fuga&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// =&gt; [&apos;fuga&apos;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;Safety-Introduction&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Safety-Introduction&quot; aria-label=&quot;Safety Introduction permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Safety Introduction&lt;/h2&gt;
&lt;p&gt;**This code is not recommended for use in production environments **&lt;/p&gt;
&lt;p&gt;Adding properties to higher-level classes through monkey-patching is an anti-pattern and could lead to problems with future changes in JS specifications. Use it with caution and at your own risk.&lt;/p&gt;
&lt;p&gt;Reference : &lt;a href=&quot;https://www.audero.it/blog/2016/12/05/monkey-patching-javascript/#the-cons-of-monkey-patching&quot;&gt;The cons of monkey patching&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;Code-Explanation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Code-Explanation&quot; aria-label=&quot;Code Explanation permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Code Explanation&lt;/h2&gt;
&lt;p&gt;Now, let&apos;s move on to explaining the code.&lt;/p&gt;
&lt;p&gt;The most important method in PropertyFinder is the find method. This method traverses the prototype chain of the given object, searches for accessible properties, and returns them as a list.&lt;/p&gt;
&lt;p&gt;The toString and grep methods simply use find, so they don&apos;t need further explanation.&lt;/p&gt;
&lt;h3 id=&quot;Prototype-Chain&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Prototype-Chain&quot; aria-label=&quot;Prototype Chain permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Prototype Chain&lt;/h3&gt;
&lt;p&gt;The prototype chain might be unfamiliar to some, but it’s the inheritance of properties from the Object class.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain&quot;&gt;Inheritance and the prototype chain | MDN &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The details are covered in the MDN documentation, but JavaScript&apos;s inheritance mechanism is supported by the prototype chain.&lt;/p&gt;
&lt;p&gt;Although it&apos;s not always obvious, when referring to some property, the process involves:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Checking if the receiver itself has the property.&lt;/li&gt;
&lt;li&gt;Checking if the parent class instance has the property.&lt;/li&gt;
&lt;li&gt;Checking if the property exists in the parent class’s instance&apos;s parent class.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This process continues up the chain until a match is found, which is then returned.&lt;/p&gt;
&lt;h3 id=&quot;What-the-code-classlanguage-textfindcode-Method-Does&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#What-the-code-classlanguage-textfindcode-Method-Does&quot; aria-label=&quot;What the code classlanguage textfindcode Method Does permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What the &lt;code class=&quot;language-text&quot;&gt;find&lt;/code&gt; Method Does&lt;/h3&gt;
&lt;p&gt;Given the above, the find method in PropertyFinder implements this mechanism, allowing you to get a list of properties by recursively exploring &lt;code class=&quot;language-text&quot;&gt;__proto__&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here&apos;s the implementation that achieves this by exploring &lt;code class=&quot;language-text&quot;&gt;__proto__&lt;/code&gt; recursively to get the list:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;detect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getOwnPropertyNames&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;it&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;detect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;it&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; list
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; ancestors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PropertyFinder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;detect&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;ancestors&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;That concludes the explanation of PropertyFinder.&lt;/p&gt;
&lt;h2 id=&quot;Wrap-up&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Wrap-up&quot; aria-label=&quot;Wrap up permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Wrap up&lt;/h2&gt;
&lt;p&gt;That wraps up the explanation of the code and what I’ve tried.&lt;/p&gt;
&lt;p&gt;This was more of an experimental or playful exercise, but since it involved some knowledge and techniques, I hope you find it useful or inspiring for your own applications.&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2024/07/20240729_ruby-methods-method-on-js/thumbnail.png</thumbnailUrl><language>en</language></item><item><title><![CDATA[Ruby のmethods メソッドをJavaScript で実装する]]></title><description><![CDATA[突然ですが、ruby のmethos メソッドって便利ですよね。
コードを書いているときにそのオブジェクトで呼ぶことができるすべてのメソッドやプロパティを
羅列してくれて検索までできるので、デバッグの時に重宝しています。 それとはまた別に、Rails…]]></description><link>https://ver-1-0.net/blog/2024/07/29/ruby-methos-method-on-js</link><guid isPermaLink="false">https://ver-1-0.net/blog/2024/07/29/ruby-methos-method-on-js</guid><pubDate>Mon, 29 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;突然ですが、ruby のmethos メソッドって便利ですよね。
コードを書いているときにそのオブジェクトで呼ぶことができるすべてのメソッドやプロパティを
羅列してくれて検索までできるので、デバッグの時に重宝しています。&lt;/p&gt;
&lt;p&gt;それとはまた別に、Rails などフレームワーク独自のメソッドを調べるときにも有効なのでコードリーディングやライブラリの理解の手助けにもなります。
正規のルートではドキュメントを読んだり、ソースコードを参照するのがよいですが、そこまで深入りする必要のないライブラリや
記憶があやふやなメソッド名を調べる時にはかなり役立ってくれます。&lt;/p&gt;
&lt;h2 id=&quot;Ruby-のmethods-メソッドとは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Ruby-%E3%81%AEmethods-%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A8%E3%81%AF&quot; aria-label=&quot;Ruby のmethods メソッドとは permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Ruby のmethods メソッドとは&lt;/h2&gt;
&lt;p&gt;ということで簡単にRuby のmethods メソッドを簡単に紹介すると下記のようになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ruby-doc.org/3.2.2/Object.html#method-i-methods&quot;&gt;Object#method&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Returns a list of the names of public and protected methods of obj. This will include all the methods accessible in obj’s ancestors. If the optional parameter is false, it returns an array of obj’s public and protected singleton methods, the array will not include methods in modules included in obj.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;要はレシーバーからアクセス可能なプロパティやメソッドをArrayオブジェクトで返却してくれるものです。&lt;/p&gt;
&lt;p&gt;このメソッドは オブジェクトの始祖であるObject クラスで実装されているので Object クラスを継承したすべてのクラスで使用することができます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;サンプルコード&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt;
  attr_accessor &lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;bar&lt;/span&gt;&lt;/span&gt;
    puts &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

puts &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;methods     &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:bar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:hash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:singleton_class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:dup&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
puts &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;grep &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;fuga&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:fuga&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例のように Array オブジェクトが返ってくるので grep メソッドでメソッドの一覧を検索することも可能で非常に便利です。&lt;/p&gt;
&lt;p&gt;ということで、これと同じことが JS でできないか考えてやってみました。&lt;/p&gt;
&lt;h2 id=&quot;実装&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%9F%E8%A3%85&quot; aria-label=&quot;実装 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;実装&lt;/h2&gt;
&lt;p&gt;下記が実際のコードです。&lt;/p&gt;
&lt;p&gt;クラス名はなんでも良いのですが、一旦 PropertyFinder と命名しています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PropertyFinder&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;receiver&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; receiver
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;regexp&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; res &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; regexp &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;string&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;regexp&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;regexp &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RegExp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; regexp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;detect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getOwnPropertyNames&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;it&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;detect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;it&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; list
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; ancestors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PropertyFinder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;detect&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;ancestors&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コードの解説はあとにして一旦使い方から&lt;/p&gt;
&lt;p&gt;クラスが定義できたら下記のようにして、Object クラスのプロパティに関数を差し込みます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;methods&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PropertyFinder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これをすることで Object クラスを継承するクラスのインスタンスで methods メソッドを使用できるようになります。
ただ、こちらに関しては後に注意を書くのでそちらにご留意の上、自己責任でお使いください。&lt;/p&gt;
&lt;p&gt;下記がその実行例です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;fuga&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;fuga&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// =&gt; [&apos;constructor&apos;, &apos;constructor&apos;, &apos;__defineGetter__&apos;, &apos;__defineSetter__&apos;, &apos;hasOwnProperty&apos; ...]&lt;/span&gt;
console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;           &lt;span class=&quot;token comment&quot;&gt;// =&gt; [&apos;length&apos;, &apos;length&apos;, &apos;constructor&apos;, &apos;at&apos;, &apos;concat&apos;, ...]&lt;/span&gt;
console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Hoge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;fuga&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// =&gt; [&apos;fuga&apos;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;使用上の注意&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BD%BF%E7%94%A8%E4%B8%8A%E3%81%AE%E6%B3%A8%E6%84%8F&quot; aria-label=&quot;使用上の注意 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;使用上の注意&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;こちらのコードはプロダクションのコードで採用するには、おすすめされないコードになっています。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;上位のクラスにプロパティを追加するモンキーパッチというアンチパターンで、将来的な JS 側の仕様変更の際にトラブルになる可能性があります。
用法・用量を守ってご使用ください。&lt;/p&gt;
&lt;p&gt;参考: &lt;a href=&quot;https://www.audero.it/blog/2016/12/05/monkey-patching-javascript/#the-cons-of-monkey-patching&quot;&gt;The cons of monkey patching&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;コードの解説&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A7%A3%E8%AA%AC&quot; aria-label=&quot;コードの解説 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コードの解説&lt;/h2&gt;
&lt;p&gt;コードの解説に移っていきます。&lt;/p&gt;
&lt;p&gt;PropertyFinder のメソッドとして一番重要なメソッドは &lt;code class=&quot;language-text&quot;&gt;find&lt;/code&gt; メソッドになります。
このメソッドが与えられたオブジェクトのプロトタイプチェーンを遡り実行可能なプロパティを検索し、リストとして返却してくれます。&lt;/p&gt;
&lt;p&gt;あとの&lt;code class=&quot;language-text&quot;&gt;toString&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;grep&lt;/code&gt; はそれを使うだけのメソッドなので特に解説は行いません。&lt;/p&gt;
&lt;h3 id=&quot;プロトタイプチェーン&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3&quot; aria-label=&quot;プロトタイプチェーン permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;プロトタイプチェーン&lt;/h3&gt;
&lt;p&gt;プロトタイプチェーンは聞きなれない方もいるかもしれませんが、 Object クラスから脈々と受け継がれてきたプロパティの遺伝子です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/JavaScript/Inheritance_and_the_prototype_chain&quot;&gt;継承とプロトタイプチェーン| MDN &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;詳しい話は、MDNのドキュメントに譲りますが、実は、JavaScript の継承という仕組みがプロトタイプチェーンによって支えられています。&lt;/p&gt;
&lt;p&gt;普段意識はしないですが、なにかしらのプロパティを参照する際には&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;レシーバー自身にそのプロパティがあるか？&lt;/li&gt;
&lt;li&gt;親クラスのインスタンスにそのプロパティがあるか？&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;の親クラスのインスタンスにぷろぱてぃがあるか？&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というように先祖を遡りながらプロパティを検索し、ヒットすればそれを返却するというしくみになっています。&lt;/p&gt;
&lt;h3 id=&quot;find-メソッドでやっていること&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#find-%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A7%E3%82%84%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8&quot; aria-label=&quot;find メソッドでやっていること permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;find メソッドでやっていること&lt;/h3&gt;
&lt;p&gt;上記をふまえて、その仕組み自体を PropertyFinder に実装すると参照できるプロパティのリストが得られます。&lt;/p&gt;
&lt;p&gt;こちらがその実装で親のプロパティを参照するには、&lt;code class=&quot;language-text&quot;&gt;__proto__&lt;/code&gt; プロパティを参照すればよいので下記のように、&lt;code class=&quot;language-text&quot;&gt;__proto__&lt;/code&gt; を再帰的に探索してリストを得ています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;detect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getOwnPropertyNames&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;it&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;detect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;it&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; list
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; ancestors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PropertyFinder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;receiver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;detect&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;ancestors&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、PropertyFinder の解説は以上です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;これでコード等々や試してみたことの説明は終わりになります。&lt;/p&gt;
&lt;p&gt;今回は実験的というかお遊びみたいなものなのですが、多少知識が必要なものなどもあったので参考にしたり応用してみていただけるとうれしいです。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2024/07/20240729_ruby-methods-method-on-js/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[2022年。ふりかえり]]></title><description><![CDATA[日本では一足お先に年越してしまっているみたいですね。去年は振り返り書いてなかったみたいですね。
今年は簡単に振り返ります。 本業 Influitiveでやっていることの振り返りです。（フルタイムの仕事を本業と読んでます。） あと数ヶ月で勤続…]]></description><link>https://ver-1-0.net/blog/2022/12/31/recap-2022</link><guid isPermaLink="false">https://ver-1-0.net/blog/2022/12/31/recap-2022</guid><pubDate>Sat, 31 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;日本では一足お先に年越してしまっているみたいですね。去年は振り返り書いてなかったみたいですね。
今年は簡単に振り返ります。&lt;/p&gt;
&lt;h2 id=&quot;本業&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%AC%E6%A5%AD&quot; aria-label=&quot;本業 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;本業&lt;/h2&gt;
&lt;p&gt;Influitiveでやっていることの振り返りです。（フルタイムの仕事を本業と読んでます。）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;あと数ヶ月で勤続2年&lt;/li&gt;
&lt;li&gt;チームの中ではすでに中堅くらいの長さ&lt;/li&gt;
&lt;li&gt;技術スタック的には変わらず JavaScript, Ruby, Go のバックエンド寄り。&lt;/li&gt;
&lt;li&gt;入社して数ヶ月からはじまった Go + GraphQL のバックエンドのプロジェクトがようやくプロダクトで使われ始めている。&lt;/li&gt;
&lt;li&gt;新規モジュールみたいなのが多くなかったので、割とフロントエンドの結合周りの修正多め&lt;/li&gt;
&lt;li&gt;週休2.5日制の開始&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3月から働き始めたので、来年3月で2年というです。&lt;/p&gt;
&lt;p&gt;仕事自体は昨年のプロジェクトの引き続き続けていたのですが、新規のものは割と落ち着いてきたのでエンドポイントのインタフェースを作る、Rubyで書かれたモジュールをGoでゴリっと書き直すみたいなのは多分なかったです。
ただ、まあプロジェクト終盤になるにつれて詳細を詰める必要があったので最初にざっくり作っていた頃に比べて違った難しさありました。あとは本丸がRailsなのでそちらの修正に狩り出されていた期間もあったりしていたので、2,3週間Ruby書いてGo戻ってみたいなのを割と繰り返してました。
一昨年は、プルリクに複数日とか1週間かかるのもあった気もするのですが今年は小さい単位でポンポン出してた感じでした。&lt;/p&gt;
&lt;p&gt;昨年は、職位が上がったりしたのですが今年はそういったことも特になく据え置きという感じです。ただ、ワークもサポートしてもらえて LMIA も無事通過したので本当に職場には感謝しかないです。
パフォーマンスレビューでも継続的にアウトプットできてるのでindiviualコントリビューターとしては評価されている気はするのですが、それ以外のところがまだまだなのでそれ以外が改善されればまた昇進できそうです。
どうしても昨年よりはましになったとはいえ、英語のコミュニケーションがネックになっているのでなんとかしたいないうところではあります。
メンバーの入れ替わりは思ってたより早く結構馴染みのメンバーが抜けてしまったりしていてるので、2年も経たずに勤続年数で言う中堅くらいになっていてるのでまぁそろそろ存在感出していきたいところです。&lt;/p&gt;
&lt;p&gt;会社としては、ほとんどのメンバーがリモートで週休2.5日制みたいなものを導入していて月に二回月曜日が会社の休みになります。背景としては、ビックテックみたいに高給はやはりどうしても払えないのでそういったところでリクルーティングに差別化しようとのことみたいです。
これは多分カナダの中でも割と珍しく就活していたときに似たような制度にしている会社は一社あったくらいです。
個人的にある程度ユーザがついて安定してきている会社では週5日一つの会社で働くよりは週4日にして他の会社のプロジェクトなり個人の活動したりした方が個人としても会社としてもメリットなのでこちらには大いに賛成ですし、単純に休みが多いので嬉しい制度です。
日本での働き方に関してもかなり議論されていますが、北米圏での働き方のスタンダードも結構変遷があるみたいなのでリモートワーク以外にもこういう週5日労働みたいな所も色々な考え方ができるようになると良いのかなと思います。&lt;/p&gt;
&lt;p&gt;まとめとしてそろそろもう2年も経つので個人のアウトプットとしては内外である程度の信頼はしてもらえるようになったかと思うので、よりチーム・全体レベルの貢献を増やしていけると良いなと考えています。
そのためには既存システムの理解度、メンバーとの連携、英語諸々やっていくこと多いので引き続き頑張っていきたいです。&lt;/p&gt;
&lt;h2 id=&quot;副業&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%89%AF%E6%A5%AD&quot; aria-label=&quot;副業 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;副業&lt;/h2&gt;
&lt;p&gt;今年は、引き続き頼まれているアプリの開発・保守とMENTA、Techpitの執筆の方やってました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アプリ開発では、Objective C + Java のアプリを React Native でリプレイスしたアプリが安定してきた&lt;/li&gt;
&lt;li&gt;AWS周りのサービスを整理したら、月の利用額が半分ほどになった&lt;/li&gt;
&lt;li&gt;MENTAの方では、受講者は割と落ち着き気味&lt;/li&gt;
&lt;li&gt;昨年同様、数名程度エンジニアとして就職された方(カナダ企業も含め）をサポートできた&lt;/li&gt;
&lt;li&gt;過去にMENTA経由で就職された方から生徒さんを紹介頂けた&lt;/li&gt;
&lt;li&gt;一昨年リリースしたTechpitの教材も年間通してご利用頂けたよう&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;副業はこれまで同様色々なことができました。開発、執筆、メンタリングと色々な種類の仕事ができて満足です。&lt;/p&gt;
&lt;p&gt;アプリの開発の方では、React Native + Rails(ちょっとGo) みたいなスタックでできているのでこちらでは本業とはまた違う学びを得ることができました。
昨年アプリを Objective C と Java でできた古いネィティブアプリを React Native に置き換えましたそちらのリプレイスがだいぶ落ち着き安定してきて、
今年はインフラ部分の方でも作業を行えて、結果的にAWSの月額料金を半分にできました。長くメンテできていないシステムだったので、インスタンスタイプを最新にしたり、
S3の不要なファイルを消したり、オートスケールを正しく設定して必要な時にだけ必要なインスタンスが立ち上がるように設定しました。
インフラ専門の方からすると割と通常のことかもしれないのですが、インフラ専任の方がいないシステムでは割とできていないことのような気もするのでまずはそこを正常化した形です。
個人的には、AWSのインスタンスタイプを新しくするだけで割と料金が減るのを知りました。割と周知のことかもしれないのですが、個人的にこの作業で学んだことでした。&lt;/p&gt;
&lt;p&gt;MENTAでも引き続き学習者さんをサポートさせて頂きました。昨年に比べると受講者数も落ち着きましたが、今年はカナダにいる方などから相談をもらえることが多かったような気もしており個人的に嬉しかったです。
実際に未経験でカナダの企業に就職された方もいたりしてそれは本当に嬉しかったです。また、以前受講していた方から生徒さんをおすすめして頂けたこともありました。
おすすめして頂けたこと自体嬉しかったのですが、以前教えていた生徒さんが現場でバリバリ活躍してステップアップしている近況が聞けたのも同時に嬉しかったです。
こういったことがあるので長く続けると言うのも大事なのかなと最近では思えてきましたし、2023年も引き続き続けていきたいと思っています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://menta.work/plan/1608?ref=mentor_profile&quot;&gt;MENTA&lt;/a&gt;上で関わった生徒さんもすでに200人弱にのぼり（単発の生徒さんも含む）色々な学習者さんをみている中で&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;公式のドキュメントが読める&lt;/li&gt;
&lt;li&gt;エラーメッセージが読めて正しい手順でデバッグができる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;と言うのがやっぱり一番大事だなと言うのを日々感じています。
「HTML/CSSがー、JSがー、Reactがー」などに囚われがちですが、公式のドキュメントを読める知識・経験量とそれを正しく実行できているか確認できる「エラー解析・デバッキング」の力が自走できる一人前のエンジニアになるには本当に必要だと実感しています。
メンタリングでもこれをどうすれば効率よく教える（メンティーさんができるようになる）にはどうすれば良いか考えながら教材を作ったりメンタリングをしています。
来年はこれを念頭においたコンテンツなども作っていきたいですね。&lt;/p&gt;
&lt;p&gt;また、昨年 Techpit さんで出させていただいた&lt;a href=&quot;https://www.techpit.jp/courses/127&quot;&gt;Hooks API のオンライン教材&lt;/a&gt;ですが、一昨年リリースですがまだボチボチ利用されているようでした。
今年は新しい教材を執筆していたのですが、諸々の事情であまり時間が取れず年末の休暇などを利用してコツコツ執筆を進めています。
来年上半期のどこかで出せれば良いなと思っているのでまた時期がきたら記事書ければと思います。&lt;/p&gt;
&lt;p&gt;相変わらず色々な副業していきますが、 2023年も引き続き頑張っていきたいと思います。副業では本業でできないことが色々できるので楽しみながら色々なことにチャレンジできればと思っています。&lt;/p&gt;
&lt;h2 id=&quot;プライベート&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88&quot; aria-label=&quot;プライベート permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;プライベート&lt;/h2&gt;
&lt;p&gt;今年は一年通してよく遊んだと言うかお金使った一年だった気がします。&lt;/p&gt;
&lt;p&gt;コロナに関する国家間の移動がかなり緩和したので、その反動で色々と旅行にいきました。といっても、アメリカ二回の日本二回の二国だけですが、、&lt;/p&gt;
&lt;p&gt;シアトルには、大谷の観戦に一回、PLL (アメリカのラクロスのプロリーグ）の試合の観戦にいきました。
大谷は 3 回くらいスタジアムで見ているのですが、相変わらず見にいきたくなる選手なので見に行けて良かったです。特に、今回は友達含めてそれなりの人数でワイワイ見れたのが良かったです。
また、ずっと見たかったアメリカのプロラクロスリーグの試合を見に行けたのも良かったです。
学生の頃から見ていた選手を生でみれた感動もデカかったですし、PLLのインフルエンサー的な RJ を間近で見れたのも嬉しかったです。
普段 Youtube で見てる人なんで生 RJ は割と感動しました。来年は自重しようかなという思っているのですが、またシーズンがくるとどこか行こうかなーとなるかもしれないですね。&lt;/p&gt;
&lt;p&gt;その他で言うと、まぁもっぱら家で過ごすことが多いのですが最近家でゲームする時間が明らかに増えました。
カナダ来る前のフリーランス期、カナダ就活期に働き過ぎたのかその反動で仕事終わりにゲームすることが多く、もっぱらApexなどをして過ごしています。&lt;/p&gt;
&lt;p&gt;ゲーム自体は全然良いのですが、必然的にずーっと椅子に座り続けることになってしまうのでうまく運動する時間などもも設けたいところです。
特に、日本で受けた健康診断の結果があまりよくなかったので（日々の飲酒が完全に数値に出てます。）これらも含めてちょっと2023年は生活習慣見直したいです。&lt;/p&gt;
&lt;h2 id=&quot;総括&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B7%8F%E6%8B%AC&quot; aria-label=&quot;総括 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;総括&lt;/h2&gt;
&lt;p&gt;早いものでカナダ生活も3年たち、2023年にはかねての目標だったカナダ永住権も視野に入ってきます。今年一年は、あまり目標を定めずに流れるように過ごしたのですが、2023年はもう少しキッチリラインなど決めながらやっていきたいなと考えています。
永住権にも仕事でのキャリアアップにも必要な英語力の強化や多少落ち着きつつある副業の新しい展開など何か変化のある一年にしていきたいなと思っています。2022年お世話になった方々ありがとうございました。2023年もよろしくお願いします。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2022/12/20221231_recap-2022/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[プログラミング学習のスケジューリングについて]]></title><description><![CDATA[こんにちは、初めましてJiroです。 こちらはMENTAのアドベントカレンダーの記事です。 カナダでJS/Ruby/Goあたりのスタックを使いながらフルスタックエンジニアをしています。
MENTAは 2020年3月のちょうどコロナが流行り初めてきた頃にはじめて、これまで10…]]></description><link>https://ver-1-0.net/blog/2021/12/21/scheduling-for-programming</link><guid isPermaLink="false">https://ver-1-0.net/blog/2021/12/21/scheduling-for-programming</guid><pubDate>Tue, 21 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;こんにちは、初めましてJiroです。&lt;/p&gt;
&lt;p&gt;こちらは&lt;a href=&quot;https://qiita.com/advent-calendar/2021/menta&quot;&gt;MENTAのアドベントカレンダー&lt;/a&gt;の記事です。&lt;/p&gt;
&lt;p&gt;カナダでJS/Ruby/Goあたりのスタックを使いながらフルスタックエンジニアをしています。
MENTAは 2020年3月のちょうどコロナが流行り初めてきた頃にはじめて、これまで100人以上のメンティーさんに相談を頂いています。&lt;/p&gt;
&lt;p&gt;みっちり学習プランという&lt;a href=&quot;https://menta.work/plan/1608/4274&quot;&gt;HTML/CSSからJSの基礎、Reactを学習してエンジニアとしてエントリーレベルの実力をつけるコース&lt;/a&gt;をメインに提供し、
フロントエンドの技術を学びたい方の日々の業務でのつまずきポイントをチャットベースで解決したり、オリジナルアプリの開発の相談サポートなどを行っています。&lt;/p&gt;
&lt;p&gt;よかったらこちらにプランが乗っていますので興味がある方はこちらご確認ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://menta.work/plan/1608&quot;&gt;MENTA 提供プラン一覧&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;嬉しいことに、サポートさせて頂いた方でも業界未経験からエンジニアとして見事にキャリアをスタートさせている方々もいらっしゃるのですが、
一方で学習が思い通りにうまく進まない、途中で挫折してしまうといった方もいるのでこの記事ではそこの違いといったところをある程度言語化できたらなということで
プログラミング学習のスケジューリングについてをメインのトピックに書きはじめています。&lt;/p&gt;
&lt;h2 id=&quot;なぜプログラミング学習で挫折するのか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%AA%E3%81%9C%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AD%A6%E7%BF%92%E3%81%A7%E6%8C%AB%E6%8A%98%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8B&quot; aria-label=&quot;なぜプログラミング学習で挫折するのか permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;なぜプログラミング学習で挫折するのか？&lt;/h2&gt;
&lt;h3 id=&quot;プログラミングを難しくしている要因&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E9%9B%A3%E3%81%97%E3%81%8F%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E8%A6%81%E5%9B%A0&quot; aria-label=&quot;プログラミングを難しくしている要因 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;プログラミングを難しくしている要因&lt;/h3&gt;
&lt;p&gt;ここはまぁ割とよく話されているかと思うのですが、前提を合わせるためにも簡単に触れていきます。&lt;/p&gt;
&lt;p&gt;ざっくりまとめるとプログラミング学習を難しくしている要因はこの辺りにあるのかなと思っています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;必要な知識量の膨大さ&lt;/li&gt;
&lt;li&gt;非エンジニアリングにはない独特の概念・文化への適応の難しさ&lt;/li&gt;
&lt;li&gt;膨大な知識量をカバーするための計画と実行の難しさ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;いくつか要因は上げましたが、本当にゼロから始めた場合極論1週間とかそこらで修得できる物でもなく、
エントリーレベルのエンジニアになるまでに必要な知識量の大さが1番の要因になっており、
その知識量をなんとかするためのソフトウエアエンジニアの文化への慣れとか長期に及ぶ勉強期間をどう管理していくかみたいな問題が付随してやってくるという形です。&lt;/p&gt;
&lt;h3 id=&quot;エンジニアになるために必要な知識&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E7%9F%A5%E8%AD%98&quot; aria-label=&quot;エンジニアになるために必要な知識 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;エンジニアになるために必要な知識&lt;/h3&gt;
&lt;p&gt;知識が膨大だみたいな話をしていても具体性がないので、じゃあ例えばどの辺りのことを理解しておく必要があるの？となるとおもうのですが、僕がMENTAで教えているフロントエンドのコースでは、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ITの基礎・・・webの仕組み、ハードウェアの仕組み、ネットワークなど&lt;/li&gt;
&lt;li&gt;HTML/CSS・・・数ページの静的なwebページが作れるくらい&lt;/li&gt;
&lt;li&gt;JavaScript・・基礎的な文法などなど、フォームバリデーションなどなど&lt;/li&gt;
&lt;li&gt;サーバーサイド・・node.js,ruby, pythonなど何でも良いのでCRUDができるweb APIがつくれる。&lt;/li&gt;
&lt;li&gt;Linux・・コマンドライン操作、linuxのファイルシステム、ディレクトリ構造などについて&lt;/li&gt;
&lt;li&gt;バージョン管理・・git の使い方、ブランチ運用&lt;/li&gt;
&lt;/ol&gt;
&lt;aside&gt; ※1 1. は基本情報技術者試験などで求められるコンピュータの構造、IPアドレスなどなどITリテラシー的な知識です。&lt;/aside&gt;
&lt;aside&gt; ※2 5. はまとめ方難しいのですが、サーバ作業やローカルの環境構築を念頭においた前提知識やコマンドラインの知識のことです。 &lt;/aside&gt;
&lt;p&gt;あたりの知識をベースに、+α Reactなどのフロントエンドフレームワークを使えるようになると良いというようなことを案内させてもらっています。&lt;/p&gt;
&lt;p&gt;みてわかるようにそれぞれ1項目を倒すだけでも結構時間が必要になるのとそれぞれの知識は繋がっているようで、
各項目ごと違った癖があったりで日々勉強をしているメンティーさんを見ると本当に頑張ってるなと感じます。&lt;/p&gt;
&lt;h2 id=&quot;解決策-スケージューリングにこだわる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A7%A3%E6%B1%BA%E7%AD%96-%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AB%E3%81%93%E3%81%A0%E3%82%8F%E3%82%8B&quot; aria-label=&quot;解決策 スケージューリングにこだわる permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;解決策: スケージューリングにこだわる&lt;/h2&gt;
&lt;p&gt;ここまでエンジニアになるためには膨大な量3ヶ月〜半年くらいは少なくともしっかり計画たててコツコツ勉強しないといけなく、一筋縄にはいかないことがわかったと思います。
で、ここからが本題なのですが、日々メンティーさんの勉強の様子だったり、相談を受けた時に「計画段階で結構失敗しているなぁ」という印象を受けることがあります。&lt;/p&gt;
&lt;p&gt;僕自身最初のメンタリングでは、学習の計画について聞くことがあるんですが、計画を聞くとだいたい6ヶ月後を目処に転職したいみたいな時期感は出てくるのですが、その目標を達成するために「自分がどうなっていれば良いのか？どういう知識を得ていればよいのか？」みたいな所の解像度粗いというのがよくあります。&lt;/p&gt;
&lt;p&gt;転職までの期間が6ヶ月だとするとインプット重視の基礎を整えられる時間は、ポートフォリオの作成期間や面接を受ける期間でだいたい最初の3か月くらいかと思うのですが、その中で上のような知識を網羅しようとなるとかなり忙しいですし本当に土日返上+平日は勉強しないと間に合わなかったりするはずです。
なんですが、ここがあまり明確に意識できておらず1日に十分な勉強時間が確保できておらずどんどんスケジュールが後ろに倒れていってしまい、いつしか熱も冷めてしまい・・となりがちです。&lt;/p&gt;
&lt;p&gt;と言った形でここまでが問題提起です。少なくない数の学習者さんがここのスケジューリングを改善すれうばもっとよくなる気がしたので今一度計画を見直すキッカケになればと思います。&lt;/p&gt;
&lt;h2 id=&quot;勉強の計画の立て方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8B%89%E5%BC%B7%E3%81%AE%E8%A8%88%E7%94%BB%E3%81%AE%E7%AB%8B%E3%81%A6%E6%96%B9&quot; aria-label=&quot;勉強の計画の立て方 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;勉強の計画の立て方&lt;/h2&gt;
&lt;p&gt;スケジューリングの大切さを語ったところで、ざっくり下記がそのステップになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;転職する時期を決める&lt;/li&gt;
&lt;li&gt;面接で聞かれる内容、アピールする内容をイメージする&lt;/li&gt;
&lt;li&gt;ポートフォリオで作るものを決める(求人を参考にする)&lt;/li&gt;
&lt;li&gt;テーマ毎の粒度で中期の勉強計画をたてる&lt;/li&gt;
&lt;li&gt;1日に必要な勉強時間・勉強内容をきめる&lt;/li&gt;
&lt;li&gt;1日単位・週単位で振り返りを行い計画を修正する。(時期が迫ったら機能をドロップする短期で補える方法を模索する)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;面接でアピールする内容を先に決めておく&lt;/strong&gt;、&lt;strong&gt;1日に必要な勉強時間・勉強内容をきめる&lt;/strong&gt; あたりがポイントかと思っていますが、
目標を明確にししてそれを1日の具体的なアクションに落とし込む、適宜進捗を見ながら軌道修正を行うあたりが大切になってきます。&lt;/p&gt;
&lt;h3 id=&quot;1-転職する時期を決める&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-%E8%BB%A2%E8%81%B7%E3%81%99%E3%82%8B%E6%99%82%E6%9C%9F%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B&quot; aria-label=&quot;1 転職する時期を決める permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. 転職する時期を決める&lt;/h3&gt;
&lt;p&gt;言葉通りですが、 全くのゼロから始めるのであれば少なくとも6ヶ月くらいのタイムスパンは必要かと思います。3ヶ月とかなると元々やってなかったりするとかなりキツイとは思うので、半年程度が妥当なラインかと思います。&lt;/p&gt;
&lt;h3 id=&quot;2-面接でアピールする内容を決める&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-%E9%9D%A2%E6%8E%A5%E3%81%A7%E3%82%A2%E3%83%94%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E5%86%85%E5%AE%B9%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B&quot; aria-label=&quot;2 面接でアピールする内容を決める permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. 面接でアピールする内容を決める&lt;/h3&gt;
&lt;p&gt;転職を考えている方は、面接で話す内容を学習開始段階から考えておけると良いでしょう。&lt;/p&gt;
&lt;p&gt;転職活動を始める時の前の期間はプログラミング自体の勉強やポートフォリオ作成などを行う準備期間になると思いますが、ここで何をやっておく必要があるのか？ということを明確にするためにも面接でアピールする内容を決めておけると良いでしょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;面接で語る内容を具現化したものがポートフォリオで、そのポートフォリを作るための知識を日々の学習で身につける。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;という考え方が根幹になります。&lt;/p&gt;
&lt;p&gt;アピールと言っても100人に1人しか出来ないみたいな事をアピールする必要はなく、各社選考の基準は違うかと思いますがだいたい「webアプリのバックエンドからフロントエンドをざっくり作った経験があり仕組みを理解しているまたは入社後にキャッチアップできる」という部分を納得させられる程度のアピールができれば良いのであまり難しく考える必要はないです。
あとは自分の中で目指したいエンジニア像みたいな物があればそれがアピール出来るようにその要素を自分のポートフォリオに盛り込めると良いでしょう。&lt;/p&gt;
&lt;p&gt;このアピールする内容を決めるというのは限られた期間で「何をする必要があり、何をやらないのか」を決める所がゴールです。裏を返すと、面接で語る必要のないことはあまりやる必要がないです。
（将来的に現場で必要な可能性もありますが、短期的に効率よく成長するためにはいち早く現場の経験を詰めることが第一と考えているので、面接時点で不要な知識は一旦据え置きます）&lt;/p&gt;
&lt;h3 id=&quot;3-ポートフォリオで作るものを決める&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%AA%E3%82%AA%E3%81%A7%E4%BD%9C%E3%82%8B%E3%82%82%E3%81%AE%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B&quot; aria-label=&quot;3 ポートフォリオで作るものを決める permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. ポートフォリオで作るものを決める&lt;/h3&gt;
&lt;p&gt;ポートフォリオを作る時に考えるべきことは&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;面接あるいは書類選考でアピールするための機能が揃っているか？&lt;/li&gt;
&lt;li&gt;必要な技術スタックを網羅しているか？&lt;/li&gt;
&lt;li&gt;選考に足る複雑度のあるアプリであるか？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;あたりです。&lt;/p&gt;
&lt;p&gt;1. については自分がデザインとフロントエンドに興味があるならUIの実装にこだわってみる。フロントに加えてサーバも出来るようになってフルスタックに働きたいなどあれば、サーバサイド側で定時実行のバッチ処理を実装して組み込むなどのようにエンジニアとしての色が分かるように成果物を考える。&lt;/p&gt;
&lt;p&gt;2. については自分が志望している業界・会社の技術スタックに合わない技術を使っているまたは不十分だったりするとそもそも面接にも進めなかったりするので自分が作ろうとしているポートフォリオにどのように技術スタックを取り込むかという形になるかと思います。必要なスタッフの確認は適宜wantedly,greenなどなど海外ならLinkedinなどなどIT系企業の求人が載っているサイトを見ると結構キーワードでリストアップされているのでいくつか求人をみて頻出な技術スタックを盛り込むようにすると良いです。&lt;/p&gt;
&lt;p&gt;3. については、やはりtodoアプリでページ遷移なしのポートフォリオを持っていってもプログラミング経験はあるのはわかりますが、その人が現場のシステムを理解してプロジェクトにフィットできるかどうかのイメージは湧かないので、バック・フロントがあってawsやherokuなどにホストされていて、&lt;/p&gt;
&lt;p&gt;よくあるwebサービスの&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ログイン機能&lt;/li&gt;
&lt;li&gt;ユーザーページ&lt;/li&gt;
&lt;li&gt;サービスの根幹を実現する機能(CRUD+αを実装したもの)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あたりは実装されている必要があると思います。&lt;/p&gt;
&lt;p&gt;またポートフォリオを考える時に&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ポートフォリオのサービスを説明する文章&lt;/li&gt;
&lt;li&gt;使用する技術スタック&lt;/li&gt;
&lt;li&gt;簡単な機能がわかるワイヤーフレーム(Figmaなどのツールを使ってもよいし、手書きでも可)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;あたりをざっくり書き出してみると頭で考えるよりはよりクリアにイメージできるでしょう。
学習を始めるまでにここをやっておくと学ぶべき内容もクリアになるので良いかと思います。&lt;/p&gt;
&lt;h3 id=&quot;4-テーマ毎の粒度で中期の勉強計画をたてる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-%E3%83%86%E3%83%BC%E3%83%9E%E6%AF%8E%E3%81%AE%E7%B2%92%E5%BA%A6%E3%81%A7%E4%B8%AD%E6%9C%9F%E3%81%AE%E5%8B%89%E5%BC%B7%E8%A8%88%E7%94%BB%E3%82%92%E3%81%9F%E3%81%A6%E3%82%8B&quot; aria-label=&quot;4 テーマ毎の粒度で中期の勉強計画をたてる permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4. テーマ毎の粒度で中期の勉強計画をたてる&lt;/h3&gt;
&lt;p&gt;上記で作成するポートフォリオを決めて、使用する技術スタックがわかったらあとはそれらを一つずつ学んでいければ良いでしょう。
何をどれくらい勉強すれば良いかを調べるのはなかなか難しいですが、HTML/CSS、Reactみたいな粒度だったりすると何を学べば良いのかわからなかったりするので、
Reactだったら、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reactの概要&lt;/li&gt;
&lt;li&gt;ステートとProps&lt;/li&gt;
&lt;li&gt;クラスコンポーネントと関数コンポーネント&lt;/li&gt;
&lt;li&gt;hooks API(useState, useCallback, useEffect)&lt;/li&gt;
&lt;li&gt;パフォーマンス最適化&lt;/li&gt;
&lt;li&gt;useRefなどのそのほかのHooks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などなある程度トピックを書き出してそれぞれを勉強してみる形が良いでしょう。勉強する際にも何を学ぶのか？
を明確にしておかないと何をして良いかわからなくてモチベーションが下がってしまうので、学ぶ内容をできるだけ細分化できると良いです。&lt;/p&gt;
&lt;p&gt;ある程度細分化ができたらそれぞれの項目にかける時間を書き出してみてまとめて、それぞれに必要そうな勉強時間を割り出しましょう。&lt;/p&gt;
&lt;p&gt;ここで実際の学習を進める時に気をつけるのは、
ドキュメントを読むなどインプット自体はあまり時間をかけ過ぎなくてよくて「こういった項目がなんとなくあるんだな」という形であとで検索できたり戻ってきて読み直したりする程度で大丈夫です。
最終的な業務を考えた時は「手を動かして作れる」ようになっていることが目標なのでしっかり普段からコードを書いて、アプリを作る過程に体を慣していけると良いでしょう。&lt;/p&gt;
&lt;p&gt;6ヶ月くらいでフロントエンドで転職を考えているのであれば 3ヶ月 のうちに&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;学習内容&lt;/th&gt;
&lt;th&gt;期間&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTML/CSS&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSの勉強&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reactの勉強&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reactを使った簡単なアプリ作成&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React, Reduxを使った簡単なアプリ作成&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React+Redux+API通信を使った簡単なアプリ作成&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linuxの学習（コマンドラインやディレクトリ構造など）&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MySQLなどのデータベースの学習&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ブログのCRUDをできるようなWeb APIを MySQL+Express.js で作成&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自前Web APIとReactを統合したアプリ実装&lt;/td&gt;
&lt;td&gt;1週間&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;計 10週間&lt;/p&gt;
&lt;p&gt;のような形で計画を立てられると良いでしょう。それぞれの項目の中には先程のステップで細分化した内容を順番に勉強していくような形です。
また〜の学習、勉強のようなアプリ作成と書いていないような項目でもそれぞれなんらかのアウトプットを出すようにすると良いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTML/CSSの学習であれば一つサイトの１ページを模写してみる、色の着いた四角い要素をよくあるサイトレイアウトに並べてみる、&lt;/li&gt;
&lt;li&gt;Reactなら自分で設計をして◯×ゲームを実装してみる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のように自分の練習として、お題を考えて実装してみると学習効率が上がると思います。
Udemyのチュートリアルのようなものでも最初は良いのですが、自分で設計して実装した方が力は着くので、チュートリアル→自作アプリの順番で練習すると良いでしょう。&lt;/p&gt;
&lt;p&gt;上の例では10週間で3ヶ月未満で書いていますが、おそらく学習しているうちに必要な要素が出てきたり想定外のこともあるのである程度バッファをとってスケジュールを引きます。&lt;/p&gt;
&lt;p&gt;そのほか基本情報技術者試験に出てくるような情報処理的な知識も補完しながら進む必要があるので、適宜勉強の合間や移動時間などの隙間時間を見つけて学習できると良いでしょう。&lt;/p&gt;
&lt;h3 id=&quot;5-1日に必要な勉強時間勉強内容をきめる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#5-1%E6%97%A5%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E5%8B%89%E5%BC%B7%E6%99%82%E9%96%93%E5%8B%89%E5%BC%B7%E5%86%85%E5%AE%B9%E3%82%92%E3%81%8D%E3%82%81%E3%82%8B&quot; aria-label=&quot;5 1日に必要な勉強時間勉強内容をきめる permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;5. 1日に必要な勉強時間・勉強内容をきめる&lt;/h3&gt;
&lt;p&gt;ここまでブレイクダウンできたらあとは1日に必要な勉強時間と1日のうちのどの時間帯に勉強するか、勉強内容を決めます。&lt;/p&gt;
&lt;p&gt;勉強する中でも&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;テキストを読むだけですむもの&lt;/li&gt;
&lt;li&gt;コードを書いて動かす必要があるもの&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;の二種類に分かれるので、読むだけで済み机に向かっていなくてもできるものは隙間時間に行うようにしたり勉強に疲れてゴロゴロするときになんとなく眺める。
みたいな形で効率よく勉強できるように工夫しましょう。同じテキストの同じ文を繰り返し参照するようにすると記憶に残りやすいので、テキストやドキュメント記事は
繰り返し読むのがおすすめです。&lt;/p&gt;
&lt;p&gt;プログラミング学習は長い道のりですが、やはり一日の積み重ねが将来的な地力に繋がるのと時間が飽くと
内容を忘れてしまい効率が悪いので机に向かわなくても勉強できる方法を確立して忙しい日でも勉強できると良いです。&lt;/p&gt;
&lt;p&gt;また、6ヶ月などの遠い目標を達成するのに大まかな目標しかないと具体的なアクションが取れないので、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;1日何時間程度勉強するのか？&lt;/li&gt;
&lt;li&gt;何を勉強するのか？&lt;/li&gt;
&lt;li&gt;どのように勉強をするのか？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というのを明確にして勉強できると達成感を感じながら学習を進められるので結果も違ってくると思います。&lt;/p&gt;
&lt;h3 id=&quot;6-1日単位週単位で振り返りを行い計画を修正する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6-1%E6%97%A5%E5%8D%98%E4%BD%8D%E9%80%B1%E5%8D%98%E4%BD%8D%E3%81%A7%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A%E3%82%92%E8%A1%8C%E3%81%84%E8%A8%88%E7%94%BB%E3%82%92%E4%BF%AE%E6%AD%A3%E3%81%99%E3%82%8B&quot; aria-label=&quot;6 1日単位週単位で振り返りを行い計画を修正する permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;6. 1日単位・週単位で振り返りを行い計画を修正する&lt;/h3&gt;
&lt;p&gt;1日単位でのアクションプランが練れたら、簡単にで良いので定期的に計画の振り返りを行って計画を修正するようにしましょう。
意外とReactのアプリ作成に時間が必要になったらその分他のスケジュールなどが後ろ倒しになるので、それの影響をみて
「全体を終わらせる必要があるのに、一つのトピックに止まり過ぎていないか？」
などなるべく長期的な視点にたって勉強のし過ぎや勉強のペースを考えて修正を行っていきましょう。&lt;/p&gt;
&lt;p&gt;ここでの注意点は、細かい4.で決めたような中長期のスケージュールは動かしても良いのですが、6ヶ月で転職などのような &lt;strong&gt;大きなスケジュールは
なるべく変えない&lt;/strong&gt; ことです。全体のスケジュールを伸ばしすぎると勉強が苦しくなってしまって挫折したりするので大きなスケジュールは変えずに
「勉強する内容を少し削る」「ポートフォリオにつける機能を減らす」などして計画を調整できると良いです。&lt;/p&gt;
&lt;p&gt;スケジュールを伸ばしに伸ばして打席に立てなくなると、自分に足りていない要素を見つけたり課題に気づいたりという機会が極端に減ってしまうので、
計画後半の方で発生した遅延はやることを減らすことで対処しながらあとは対外的な面接などを通して自分の弱点を補いながら転職に繋げていくという方針が
時間効率が良いです。&lt;/p&gt;
&lt;h3 id=&quot;スケジューリングのまとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;スケジューリングのまとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スケジューリングのまとめ&lt;/h3&gt;
&lt;p&gt;ここまででスケジューリングの方法は一通り説明できました。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;転職する時期を決める&lt;/li&gt;
&lt;li&gt;面接で聞かれる内容、アピールする内容をイメージする&lt;/li&gt;
&lt;li&gt;ポートフォリオで作るものを決める(求人を参考にする)&lt;/li&gt;
&lt;li&gt;テーマ毎の粒度で中期の勉強計画をたてる&lt;/li&gt;
&lt;li&gt;1日に必要な勉強時間・勉強内容をきめる&lt;/li&gt;
&lt;li&gt;1日単位・週単位で振り返りを行い計画を修正する。(時期が迫ったら機能をドロップする短期で補える方法を模索する)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;繰り返しにはなりますが、1日1日のアクションプランと振り返り、面接でアピールする内容から逆算したポートフォリオを作るというのがおすすめですので、
参考にしていただけると嬉しいです。ここまででスケジューリングの話は終わりですが、つぎに計画を立てる時や学習中の注意点みたいなものをまとめて終わりにします。&lt;/p&gt;
&lt;h2 id=&quot;学習計画を立てる時学習期間のNG集&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AD%A6%E7%BF%92%E8%A8%88%E7%94%BB%E3%82%92%E7%AB%8B%E3%81%A6%E3%82%8B%E6%99%82%E5%AD%A6%E7%BF%92%E6%9C%9F%E9%96%93%E3%81%AENG%E9%9B%86&quot; aria-label=&quot;学習計画を立てる時学習期間のNG集 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;学習計画を立てる時・学習期間のNG集&lt;/h2&gt;
&lt;p&gt;スケジューリングの考え方は流れで説明しましたが、個人的に思う学習の効率を下げている習慣をまとめたので書いておきます。
こちらに着いては賛否あるものもあるかもしれませんが一意見として気に留めておいて頂けると良いかと思います。&lt;/p&gt;
&lt;h4&gt;学習する内容・目的が不明瞭&lt;/h4&gt;
&lt;p&gt;上の説明でも、何回か書きましたが学習の目的を絞って学習するのがモチベーション維持の観点でも非常に大切です。
「今日はHTML/CSSの学習をしよう！」みたいな粒度だと甘いので「Flexboxを使ったレイアウトの方法を勉強しよう」などなど
明確に行動を起こせる目的をもった上で学習を進めると進捗の確認がしやすかったり何がわかっていて何がわかっていないかなどが明確になります。&lt;/p&gt;
&lt;p&gt;これを意識づけできていると自分が理解していないトピックが明確になってくるので時間があるときにどこを補えば良いのかというのがわかってきて、
隙間時間での勉強やりやすくなるはずです。また各技術書なども目的を持って読む必要があり、せっかく買ったんだからと先頭から後ろまで順番に学習する必要はないです。30分などの短時間で読み終えられる技術書なんてほとんどないので、自分が本当に知りたかった情報に辿り着くまでに息切れしてしまいます。&lt;/p&gt;
&lt;p&gt;必ず技術書やドキュメントを読み進める前には目次を見て気になるところから読むようにしましょう。また新しい内容は繰り返し触れるのが記憶にも残りやすいので、
一つの本の同じ箇所を繰り返し読むようにするとさらに良いです。特に技術形のドキュメントを最初読むことに苦労する方が多いですが、別に一回で理解する必要もないので繰り返し気が向いた時に訪れて目を通すようにしましょう。&lt;/p&gt;
&lt;h4&gt;勉強時間を確保するための工夫が十分でない&lt;/h4&gt;
&lt;p&gt;日々メンタリングをしていると業務が忙しくて・・・という形で立ち止まっている方をしばしばお見かけします。&lt;/p&gt;
&lt;p&gt;今やっている仕事が大事なのはわかりますが、自分のキャリアを考えて勉強しているのであれば、優先的に時間を確保すべきで、仕事が忙しいというのはあまり理由にならないのかと思います。
なにも残業した後でもしっかり勉強しろみたいな筋肉質な話をしているのではなく、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;忙しくない部署に移動できないか交渉してみる&lt;/li&gt;
&lt;li&gt;忙しくない会社に転職する&lt;/li&gt;
&lt;li&gt;残業はしないと割り切って勉強の時間を確保する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;みたいな形でキャリアの優先度を第一に考えて勉強の時間を確保した方が良いかと思います。&lt;/p&gt;
&lt;p&gt;どこかで&lt;a href=&quot;https://www.franklinplanner.co.jp/c_fpl/selfstudy/ss-20.html&quot;&gt;壺に大きい石からものを詰めていく話&lt;/a&gt;を聞いたことがある方もいるかと思いますが、やはり人間1日に集中できる時間は決まっているのでそれが本業で全て一杯になってしまうのは避けるべきです。(本業は適当で良いとは言っておらず、転職のための勉強が第一なのでそれに従って周りの環境を整えようという話です。)
その他にも、隙間時間で勉強するテーマをメモしておいて、移動時間にググって理解する。などなど工夫を行うことで少しづつでも勉強の時間を確保できるかと思うので優先度などを考えながらうまく時間を融通できるようにしましょう。&lt;/p&gt;
&lt;h4&gt;ポートフォリオの完成に執着する&lt;/h4&gt;
&lt;p&gt;学習の後の方でポートフォリオの完成に執着してしまって就活が疎かになってしまう方がいるので気をつけましょう。
コアな機能ができていないなどであればそれは終わらせる必要がありますが、実態として使えるようになっているのであればあまり完成に執着せずに
先に企業に面談にいくなど対外的なフィードバックをもらえる機会を優先しましょう。&lt;/p&gt;
&lt;p&gt;自分として納得できるところまで作り込みたいのはわかりますが、それよりも先にREADME.mdやレジュメなどの情報を充実された方が時間効率がよかったりします。
現場で得られる経験の方が独学で得られる経験よりはるかに大きいのであまり完成に執着せず目標達成のためにより良い選択肢を選び取れると良いでしょう。&lt;/p&gt;
&lt;h4&gt;慣れた方法を続ける結果効率の悪い方法で学習を続けてしまう&lt;/h4&gt;
&lt;p&gt;学習とは慣れた方法を捨ててより良い効率の良い方法を身につけるということでもあるので、より効率の良い方法を探し続けて改善を入れられるようにしましょう。
マウス操作が多かったり、コマンドラインでtabでの補完、↑での履歴を使用する。エディタの分割を使う、ファイルの全検索を使ってコードリーディングの効率を高める、ショートカットを覚えるなど初心者の方ができる工夫というのは数がしれないのでこれを日々身につける癖をつけましょう。&lt;/p&gt;
&lt;h4&gt;学習した内容を書いて覚える/ノートにまとめる&lt;/h4&gt;
&lt;p&gt;受験のときの学習の癖なのか、学習内容を書いて覚えたりノートに手書きでまとめたりする方がいますが、個人的にはこちらあまりおすすめできません。
そもそもネット上の情報だったり書籍というのはそういった作業をしないで良いように情報をまとめたり検索性能を高めたりしているので、
学習者の方がまとめるより質が高くてよくまとまっているものがネット上にあるはずです。&lt;/p&gt;
&lt;p&gt;何かわからなかったら自分のノートをみるなどするよりは少しでも多くググってサイトの記事を読んで効率的に情報収集できるようにすると良いでしょう。
ノートに情報をまとめるよりは、その情報に素早くアクセスできるようにリンク集を作っておくと良いと思います。
僕は個人のSlackスペースを作ってそこにペタペタリンクを貼るようにしています。&lt;/p&gt;
&lt;p&gt;ノートをまとめるにしてもPCのツールを使ってまとめるようにした方がPCスキル自体の練習にもなるしGithubのリポジトリを使ってまとめたりすればGithubの使い方にも慣れるので、業界でよく使われるツールを調べて積極的に使うと良いでしょう。&lt;/p&gt;
&lt;h4&gt;情報収集の習慣をつけない&lt;/h4&gt;
&lt;p&gt;再三言及はしているのですが、プログラミングのための知識は膨大なのでなるべく技術的な情報のアンテナはしっかり立てておくようにしましょう。
経験者と未経験者ではこれらの知識量に圧倒的な差があるので日常的な情報収集の癖をつけられると良いです。実際に触ったことはないけど聞いたことのある項目を増やせると業界の全体像も掴みやすくなるのでTwitter, Qiita, Zennなど技術的な情報を得られるサイトから常に情報収集を心がけられると良いです。&lt;/p&gt;
&lt;h4&gt;コードを動かさない、コマンドを叩かない&lt;/h4&gt;
&lt;p&gt;いくら概要を理解していてもコマンドを思い通りに動かせない、コードを動かせないうちにはエンジニアへの就職は難しいでしょう。&lt;/p&gt;
&lt;p&gt;これを解消するためには、
実際に&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コードを動かす&lt;/li&gt;
&lt;li&gt;思い通りに動かない&lt;/li&gt;
&lt;li&gt;原因を特定する&lt;/li&gt;
&lt;li&gt;修正する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というサイクルを高速で回せるように練習する必要があるので、実際にコード・コマンドを動かす癖はつけられると良いでしょう。
英会話を上達させたいのに、実際に英語を話すことなく文法ばかり学習しても英会話は上達しないようにプログラミングをも同じなので、
なるべく遠回りせずにダイレクトに学習を進められると良いでしょう。&lt;/p&gt;
&lt;h4&gt;「なぜか動かない」など原因特定が甘い・疎かにしてしまう&lt;/h4&gt;
&lt;p&gt;初学者のうちは経験が少なくて難しいのですが、デバッグ（原因特定・修正）の能力というのはコーディングの早さに直結してくるので、
ちゃんとエラーメッセージを読んで理解したり、プリントデバッグを使って問題の起きている箇所を特定したりして独力でデバッグを行えるように
意識して練習しましょう。&lt;/p&gt;
&lt;p&gt;ここができないといつまでも経験者に聞かないと実装が進まないのでプリントデバッグやステップ実行・エラーメッセージの読み方などを
学んで実行・原因特定・修正のサイクルを高速に回せるようになりましょう。&lt;/p&gt;
&lt;h2 id=&quot;あとがき&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%82%E3%81%A8%E3%81%8C%E3%81%8D&quot; aria-label=&quot;あとがき permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;あとがき&lt;/h2&gt;
&lt;p&gt;以上、ここまでプログラミング学習の計画の立て方をつらつらと説明しました。&lt;/p&gt;
&lt;p&gt;メンタリングを行う中で結構就職までの計画の話をしたりするのですが、日々の学習に追われて全体の計画とか目標を
見失ってしまっているなー、もったいないなーというのを感じたので、今回こちら思い切って書かせていただきました。&lt;/p&gt;
&lt;p&gt;個人的に中長期定期な計画を立てる時にはまず目標から逆算してマクロな計画を作った上で、また別口でミクロな視点から
実際に必要な時間をつみあげて両者を突き合わせて調整するというのが一番精度が高いのかななんて思っています。&lt;/p&gt;
&lt;p&gt;ここではマクロが6ヶ月の全体計画でミクロが一日の中で何をどれだけ勉強するのか？というところになります。
メンティーさんの話を聞いているとこのどちらかの見積もりが甘かったりなかったりするのでこれが両方できるだけでも、
うまくモチベーションを保ちながら勉強を進めていけるのかなと思っています。やはり一日単位で目標がなかったりするとどうしても
日々の忙しさに追われてなぁなぁになってしまったりするので学習を始める前にしっかりと計画を立てることをおすすめしています。&lt;/p&gt;
&lt;p&gt;また、全体の計画を聞いてみるとバッファがほとんどなかったりするものもあるので、なるべく前倒しで終えられるようにできると
良いと思います。マイクロソフトの元開発者で起業家の中島智さんの&lt;a href=&quot;https://www.amazon.co.jp/%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E4%BB%95%E4%BA%8B%E3%81%AF%E7%B5%82%E3%82%8F%E3%82%89%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%AF%E6%9C%80%E5%BC%B7%E3%81%AE%E6%AD%A6%E5%99%A8%E3%81%A7%E3%81%82%E3%82%8B-%E4%B8%AD%E5%B3%B6%E8%81%A1-ebook/dp/B01GPCKJWK/ref=sr_1_1&quot;&gt;「なぜあなたの仕事は終わらないのか？」&lt;/a&gt;という著書にロケットスタート時間術
という仕事術が紹介されています。もしも、10日で仕上げるタスクであれば、2割に当たる2日間で8割終わらせるつもりで取り掛かり、
この2割の段階で、全体の6割以上終わっていなければ、スケジュール変更を検討する。というようなものです。&lt;/p&gt;
&lt;p&gt;ここまで徹底する必要があるかはわかりませんが、締め切り当日にゴールを設定すると不測の事態や新しく見つかったタスクに対応できないので
十分なバッファを持たせて計画を立てる必要はあるでしょう。プログラミング学習でも仕事の繁忙と重なった、体調を崩した、予想よりも理解に時間がかかった
環境構築に詰まったなどは十分にありうるのでこれを念頭に計画を立てましょう。&lt;/p&gt;
&lt;p&gt;プログラミング学習は新たにチャレンジすることも多いので、不確実性が高く簡単ではないタスクになると思いますが、
こういったところを抑えながらコツコツと積み重ねていけることができれば必ず達成できるものかとも思います。&lt;/p&gt;
&lt;p&gt;ぜひ、これから学習を始める方々、学習中の方などに参考にしていただけると嬉しいです。ありがとうございました。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2021/12/20211221_scheduling-for-programming/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Go言語でのデータ操作+構造体、関数のチートシート]]></title><description><![CDATA[個人的にプログラミング言語を学ぶ時には、それぞれのデータ形式の操作方法 + クラス、関数などの文法を
おさえておくと、何かしらのアプリケーションを書き始める時に役立つと思っています。 と言った所でGo…]]></description><link>https://ver-1-0.net/blog/2021/04/18/go-data-opeartion-cheetsheet</link><guid isPermaLink="false">https://ver-1-0.net/blog/2021/04/18/go-data-opeartion-cheetsheet</guid><pubDate>Sun, 18 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;個人的にプログラミング言語を学ぶ時には、それぞれのデータ形式の操作方法 + クラス、関数などの文法を
おさえておくと、何かしらのアプリケーションを書き始める時に役立つと思っています。&lt;/p&gt;
&lt;p&gt;と言った所でGo言語でそれらの情報をまとめてみました。&lt;/p&gt;
&lt;p&gt;どのプログラミング言語にも大体、文字列、数値、配列、マップのようなデータ型が存在するので、
それらについてプログラムを書く上でよく使う書き方を勉強していくと効率が良いです。
さらに、プラスアルファでクラスや関数などの文法もおさえて置けるとよいです。&lt;/p&gt;
&lt;p&gt;そして、それぞれのデータ形式のCRUDの方法を意識しながら学習して行けるとうまく整理して学習できるかと思います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;CREATE (初期化方法)&lt;/li&gt;
&lt;li&gt;UPDATE (置換、部分文字列の取り出し、インクリメントなど)&lt;/li&gt;
&lt;li&gt;READ (要素の列挙、型変換など)&lt;/li&gt;
&lt;li&gt;DELETE (キーの削除、要素の削除など)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というわけで数値から順番にみていきます。&lt;/p&gt;
&lt;h2 id=&quot;数値&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%95%B0%E5%80%A4&quot; aria-label=&quot;数値 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;数値&lt;/h2&gt;
&lt;p&gt;数値、文字列間の変換は頻出も頻出ですが、桁数指定、0埋めなども結構使うのでそれらをまとめました。&lt;/p&gt;
&lt;h3 id=&quot;文字列への変換&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%96%87%E5%AD%97%E5%88%97%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B&quot; aria-label=&quot;文字列への変換 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;文字列への変換&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;str &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; strconv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Itoa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; &quot;123&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;文字コードからStringへの変換&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89String%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B&quot; aria-label=&quot;文字コードからStringへの変換 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;文字コードからStringへの変換&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;a &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rune&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
b &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rune&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;66&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
c &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rune&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;67&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; A B C&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;小数点の切り上げ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%B0%8F%E6%95%B0%E7%82%B9%E3%81%AE%E5%88%87%E3%82%8A%E4%B8%8A%E3%81%92&quot; aria-label=&quot;小数点の切り上げ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;小数点の切り上げ&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Ceil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Ceil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 2 2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;小数点の切り捨て&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%B0%8F%E6%95%B0%E7%82%B9%E3%81%AE%E5%88%87%E3%82%8A%E6%8D%A8%E3%81%A6&quot; aria-label=&quot;小数点の切り捨て permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;小数点の切り捨て&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Floor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Floor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 1 1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;小数点の四捨五入&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%B0%8F%E6%95%B0%E7%82%B9%E3%81%AE%E5%9B%9B%E6%8D%A8%E4%BA%94%E5%85%A5&quot; aria-label=&quot;小数点の四捨五入 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;小数点の四捨五入&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 1 2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;累乗&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B4%AF%E4%B9%97&quot; aria-label=&quot;累乗 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;累乗&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 2 4 8&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;0埋め&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#0%E5%9F%8B%E3%82%81&quot; aria-label=&quot;0埋め permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;0埋め&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;str &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Sprintf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%05d&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 00123&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;桁数指定切り上げ切り捨て四捨五入&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%A1%81%E6%95%B0%E6%8C%87%E5%AE%9A%E5%88%87%E3%82%8A%E4%B8%8A%E3%81%92%E5%88%87%E3%82%8A%E6%8D%A8%E3%81%A6%E5%9B%9B%E6%8D%A8%E4%BA%94%E5%85%A5&quot; aria-label=&quot;桁数指定切り上げ切り捨て四捨五入 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;桁数指定切り上げ/切り捨て/四捨五入&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// 2桁で切り上げ/切り捨て/四捨五入&lt;/span&gt;
x &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;12.3456&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Floor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Ceil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 12.34 12.35 12.35&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;StringByte&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#StringByte&quot; aria-label=&quot;StringByte permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;String/Byte&lt;/h2&gt;
&lt;p&gt;おそらくコードを書いていて最も使うデータ型である string ですが、
小文字大文字変換、文字列の切り出し、配列への変換などがあるのでそれらを中止にまとめました。&lt;/p&gt;
&lt;h3 id=&quot;Stringから文字コード&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#String%E3%81%8B%E3%82%89%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89&quot; aria-label=&quot;Stringから文字コード permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Stringから文字コード&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rune&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 65&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rune&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 66&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rune&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 67&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;StringからByte配列&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#String%E3%81%8B%E3%82%89Byte%E9%85%8D%E5%88%97&quot; aria-label=&quot;StringからByte配列 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;StringからByte配列&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;fuga &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ABC&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fuga&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 65 66 67&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;部分文字列の取得&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%83%A8%E5%88%86%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E5%8F%96%E5%BE%97&quot; aria-label=&quot;部分文字列の取得 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;部分文字列の取得&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;fuga &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ABC&quot;&lt;/span&gt;
firstChar &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fuga&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %s\n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; firstChar&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; firstChar&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
partial &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; fuga&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %s\n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; partial&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; partial&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; type: string, value: A&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    type: string, value: AB&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;小文字に変換&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%B0%8F%E6%96%87%E5%AD%97%E3%81%AB%E5%A4%89%E6%8F%9B&quot; aria-label=&quot;小文字に変換 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;小文字に変換&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;str &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ABC&quot;&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;strings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ToLower&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; &quot;abc&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;大文字に変換&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%A4%A7%E6%96%87%E5%AD%97%E3%81%AB%E5%A4%89%E6%8F%9B&quot; aria-label=&quot;大文字に変換 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;大文字に変換&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;str &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;strings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ToUpper&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; &quot;ABC&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;スライスに変換&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9%E3%81%AB%E5%A4%89%E6%8F%9B&quot; aria-label=&quot;スライスに変換 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライスに変換&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;str &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;apple,banana,pineapple&quot;&lt;/span&gt;
split &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; strings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %s&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; split&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; split&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; type: []string, value: [apple banana pineapple]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;リピート&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%83%94%E3%83%BC%E3%83%88&quot; aria-label=&quot;リピート permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リピート&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;str &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; strings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Repeat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; abcabcabc&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;スライス配列&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9%E9%85%8D%E5%88%97&quot; aria-label=&quot;スライス配列 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライス・配列&lt;/h2&gt;
&lt;p&gt;スライスというデータ型がgoの特徴的な型だとは思いますが、RubyやJavaScriptから来た物からすると、filterやmapに相当するものが
組み込みであるのか気になって調べたのですが、どうやらないらしくそこはちょっと欲しいなという気持ちになりました。
こういった所もGoらしいと思いながら色々と調べてまとめています。&lt;/p&gt;
&lt;h3 id=&quot;配列の初期化&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%85%8D%E5%88%97%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96&quot; aria-label=&quot;配列の初期化 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;配列の初期化&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; arr1&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
arr1&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Apple&quot;&lt;/span&gt;
arr1&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Google&quot;&lt;/span&gt;
arr1&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Facebook&quot;&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %v \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// type: [3]string, value: [Apple Google Facebook] &lt;/span&gt;

arr2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
arr3 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %v \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// type: [3]int, value: [1 2 3] &lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %v \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// type: [2]bool, value: [true false] &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;スライスの初期化&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96&quot; aria-label=&quot;スライスの初期化 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライスの初期化&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;s1 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
s2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
s3 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %v \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; s1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; s1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// =&gt; type: []int, value: [] &lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %v \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; s2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; s2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// =&gt; type: []int, value: [1 2 3] &lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %v \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; s3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; s3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// =&gt; type: []string, value: [a b c] &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;要素数でループ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A6%81%E7%B4%A0%E6%95%B0%E3%81%A7%E3%83%AB%E3%83%BC%E3%83%97&quot; aria-label=&quot;要素数でループ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;要素数でループ&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;s1 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; v &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;range&lt;/span&gt; s1 &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; v&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 0 1&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    1 2&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    2 3&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Find&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Find&quot; aria-label=&quot;Find permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Find&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; target &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; v &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;range&lt;/span&gt; list &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; v &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; target &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; v&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

res&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%s is missing in the list&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; c 2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Sample&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Sample&quot; aria-label=&quot;Sample permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sample&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;list &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
index &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; rand&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Intn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;ソート&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%BD%E3%83%BC%E3%83%88&quot; aria-label=&quot;ソート permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ソート&lt;/h3&gt;
&lt;p&gt;文字列や数値のソートであればサクッと書けるのですが、構造体やmapをソートするには、インターフェースの実装が必要そうなのでまた別の機会に書きます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
sort&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Sort&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sort&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;IntSlice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [1 3 4]&lt;/span&gt;

s &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;def&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;aaa&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
sort&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Strings&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [aaa abc def]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;部分を取り出し&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%83%A8%E5%88%86%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%97&quot; aria-label=&quot;部分を取り出し permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;部分を取り出し&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;hoge &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
first &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
last &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; hoge&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;first&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;last&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; [4 5] [2 3]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;結合&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B5%90%E5%90%88&quot; aria-label=&quot;結合 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;結合&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;a1 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
a2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
a3 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; a2&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; [1 2 3 4 5 6]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;Join&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;str &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; strings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;map&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#map&quot; aria-label=&quot;map permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;map&lt;/h2&gt;
&lt;h3 id=&quot;初期化&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%88%9D%E6%9C%9F%E5%8C%96&quot; aria-label=&quot;初期化 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;初期化&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;m &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %v&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; type: map[string]int, value: map[] &lt;/span&gt;

m2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	A&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	B&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	C&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;type: %T, value: %v&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; m2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; mtype: map[string]int, value: map[A:1 B:2 C:3] 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;KeyValue-でループ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#KeyValue-%E3%81%A7%E3%83%AB%E3%83%BC%E3%83%97&quot; aria-label=&quot;KeyValue でループ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Key/Value でループ&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;m &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token string&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; k&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; v &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;range&lt;/span&gt; m &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;key: %s, value: %d \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; k&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; v&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; key: A, value: 1 &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    key: B, value: 2 &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    key: C, value: 3 &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;要素の削除&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A6%81%E7%B4%A0%E3%81%AE%E5%89%8A%E9%99%A4&quot; aria-label=&quot;要素の削除 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;要素の削除&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;m &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token string&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;key: %V, value: %v \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; key: C, value: 3 &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;要素があるか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A6%81%E7%B4%A0%E3%81%8C%E3%81%82%E3%82%8B%E3%81%8B&quot; aria-label=&quot;要素があるか permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;要素があるか&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;m &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; hasAKey &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ok &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; ok &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	hasAKey &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; hasDKey &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ok &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; ok &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	hasDKey &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;hasAKey&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; hasDKey&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; true false &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;日付&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%97%A5%E4%BB%98&quot; aria-label=&quot;日付 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;日付&lt;/h2&gt;
&lt;h3 id=&quot;初期化-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%88%9D%E6%9C%9F%E5%8C%96-1&quot; aria-label=&quot;初期化 1 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;初期化&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;t &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2001&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;59&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UTC&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;現在日付&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%8F%BE%E5%9C%A8%E6%97%A5%E4%BB%98&quot; aria-label=&quot;現在日付 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;現在日付&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;t &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	t&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;            &lt;span class=&quot;token comment&quot;&gt;// 2009-11-10 23:00:00 +0000 UTC m=+0.000000001&lt;/span&gt;
	t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Year&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;     &lt;span class=&quot;token comment&quot;&gt;// 2009&lt;/span&gt;
	t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Month&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;    &lt;span class=&quot;token comment&quot;&gt;// November&lt;/span&gt;
	t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Day&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;// 10&lt;/span&gt;
	t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Hour&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;     &lt;span class=&quot;token comment&quot;&gt;// 23&lt;/span&gt;
	t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Minute&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 0&lt;/span&gt;
	t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Second&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 0&lt;/span&gt;
	t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Weekday&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// Tuesday&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;比較&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%AF%94%E8%BC%83&quot; aria-label=&quot;比較 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;比較&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;past &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Second&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
now &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; past&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;After&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;now&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Past is after now&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; past&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Before&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;now&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Past is before now&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; now&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Before&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;now&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Now is before now&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; now&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;After&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;now&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Now is after now&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; Past is before now.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;加減&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8A%A0%E6%B8%9B&quot; aria-label=&quot;加減 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;加減&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;date &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UTC&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;date&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 2021-04-01 08:00:00 +0000 UTC&lt;/span&gt;

t1 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Second&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 2021-04-01 08:00:05 +0000 UTC&lt;/span&gt;
t2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Hour&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 2021-04-01 13:00:00 +0000 UTC&lt;/span&gt;

t3 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Second&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 2021-04-01 07:59:55 +0000 UTC&lt;/span&gt;
t4 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Hour&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t4&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 2021-04-01 03:00:00 +0000 UTC&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;フォーマット&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88&quot; aria-label=&quot;フォーマット permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フォーマット&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://qiita.com/ruiu/items/5936b4c3bd6eb487c182&quot;&gt;https://qiita.com/ruiu/items/5936b4c3bd6eb487c182&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;date &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2021&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UTC&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; layout &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2006-01-02 15:04:05 Mon&quot;&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;layout&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 2021-04-01 08:00:00 Mon&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;パース&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%91%E3%83%BC%E3%82%B9&quot; aria-label=&quot;パース permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;パース&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;str &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Apr 1 12:34:56 JST 2021&quot;&lt;/span&gt;
layout &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Jan 2 15:04:05 MST 2006&quot;&lt;/span&gt;
t&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;layout&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 2021-04-01 12:34:56 +0000 JST&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Unix-Timeへ変換&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Unix-Time%E3%81%B8%E5%A4%89%E6%8F%9B&quot; aria-label=&quot;Unix Timeへ変換 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Unix Timeへ変換&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;t &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1970&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UTC&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Unix&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;          &lt;span class=&quot;token comment&quot;&gt;// 0&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Unix&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 1257894000&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Unix-Timeから日付オブジェクトに変換&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Unix-Time%E3%81%8B%E3%82%89%E6%97%A5%E4%BB%98%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E5%A4%89%E6%8F%9B&quot; aria-label=&quot;Unix Timeから日付オブジェクトに変換 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Unix Timeから日付オブジェクトに変換&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;t &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Unix&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1234567890&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 2009-02-13 23:31:30 +0000 UTC&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;構造体&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%A7%8B%E9%80%A0%E4%BD%93&quot; aria-label=&quot;構造体 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;構造体&lt;/h2&gt;
&lt;h3 id=&quot;初期化-2&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%88%9D%E6%9C%9F%E5%8C%96-2&quot; aria-label=&quot;初期化 2 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;初期化&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Obj &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	ID &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	Name &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 宣言された構造体を初期化&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Obj&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Taro&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Obj&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Taro&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// newで初期化&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 無名構造体&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	ID   &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	Name &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Taro&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;メソッド宣言&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E5%AE%A3%E8%A8%80&quot; aria-label=&quot;メソッド宣言 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;メソッド宣言&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; A &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	data &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; B &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	data &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 値メソッド&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o A&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;setValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; value
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o A&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// ポインタメソッド&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;B&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;setValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; value
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;B&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

a &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; A&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	data&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Hoge&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

b &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; B&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	data&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Hoge&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Fuga&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
b&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Fuga&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// ポインタメソッドの方だけdataの値が書き換わる&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; Hoge&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    Hoge&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    Hoge&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    Fuga&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;関数&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%96%A2%E6%95%B0&quot; aria-label=&quot;関数 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;関数　&lt;/h2&gt;
&lt;p&gt;GOの特徴としては、複数返り値や名前付き返り値などがユニークな所ですが、引数のデフォルト値を設定するような構文は今の所ないようです。&lt;/p&gt;
&lt;h3 id=&quot;初期化-3&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%88%9D%E6%9C%9F%E5%8C%96-3&quot; aria-label=&quot;初期化 3 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;初期化&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;
&lt;span class=&quot;token comment&quot;&gt;// 引数なし&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Hello&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 引数あり&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Hey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;msg &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hey, %s \n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; msg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 複数返り値&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Divide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Errorf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Zero divided&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 名前付き返り値&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;MaxMin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;max &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; min &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; max&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; min
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        max &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; list&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        min &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; list&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; item &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;range&lt;/span&gt; list &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; max &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; item &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			max &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; item
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; min &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; item &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			min &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; item
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; max&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; min
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;Hello&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;                               &lt;span class=&quot;token comment&quot;&gt;// Hello&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;Hey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;boy&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;                            &lt;span class=&quot;token comment&quot;&gt;// Hey, boy&lt;/span&gt;

res1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err1 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Divide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;res1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;               &lt;span class=&quot;token comment&quot;&gt;// 2 &amp;lt;nil&gt;&lt;/span&gt;
res2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Divide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;res2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;               &lt;span class=&quot;token comment&quot;&gt;// 0 Zero divied&lt;/span&gt;

fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;MaxMin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 3 1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;可変長引数&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8F%AF%E5%A4%89%E9%95%B7%E5%BC%95%E6%95%B0&quot; aria-label=&quot;可変長引数 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;可変長引数&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nums &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;total &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; num &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;range&lt;/span&gt; nums &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		total &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; num
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; 15&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;無名関数&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%84%A1%E5%90%8D%E9%96%A2%E6%95%B0&quot; aria-label=&quot;無名関数 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;無名関数&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;hello &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hello, %s&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;hello&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;there&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; &quot;Hello, there&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;即時関数&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8D%B3%E6%99%82%E9%96%A2%E6%95%B0&quot; aria-label=&quot;即時関数 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;即時関数&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hello, %s&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;there&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; &quot;Hello, there&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;高階関数&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0&quot; aria-label=&quot;高階関数 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;高階関数&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// =&gt; 3&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// =&gt; 3&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/tags/go.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[How to fix the problem of not working key repeating in CodeSandbox's Vim key binding.]]></title><description><![CDATA[I usually use CodeSandbox to write some front-end code, but I had a small problem with it, so this article is about how to fix it. Problem…]]></description><link>https://ver-1-0.net/blog/en/2021/04/18/how-to-fix-key-repeating-problem-on-codesandbox</link><guid isPermaLink="false">https://ver-1-0.net/blog/en/2021/04/18/how-to-fix-key-repeating-problem-on-codesandbox</guid><pubDate>Sun, 18 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I usually use CodeSandbox to write some front-end code, but I had a small problem with it, so this article is about how to fix it.&lt;/p&gt;
&lt;h2 id=&quot;Problem-Not-working-key-repeating-in-CodeSandboxs-Vim-key-binding&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Problem-Not-working-key-repeating-in-CodeSandboxs-Vim-key-binding&quot; aria-label=&quot;Problem Not working key repeating in CodeSandboxs Vim key binding permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Problem: Not working key repeating in CodeSandbox&apos;s Vim key binding&lt;/h2&gt;
&lt;p&gt;I usually use vim when writing code, so as you might expect, I use vim key bindings on CodeSandbox as well.&lt;/p&gt;
&lt;p&gt;When I set up Vim key bindings, key repeating stopped working, and even if I held down the &lt;code class=&quot;language-text&quot;&gt;j&lt;/code&gt; key, the cursor didn&apos;t move down, and I had to hit the key repeatedly to move it, which was very annoying.&lt;/p&gt;
&lt;h2 id=&quot;How-to-fix&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#How-to-fix&quot; aria-label=&quot;How to fix permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How to fix&lt;/h2&gt;
&lt;p&gt;Run command in your termnal.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;defaults &lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; ApplePressAndHoldEnabled &lt;span class=&quot;token parameter variable&quot;&gt;-bool&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;It seems that the current CodeSandbox inherits the settings of VSCode, and when I want to use Vim Keybinding in VSCode, I need to change the Mac settings in the terminal, but I can&apos;t do that in CodeSandbox because the conditions for using the terminal seem to be limited.&lt;/p&gt;
&lt;p&gt;Setting for VSCode is written in &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=vscodevim.vim&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It seems that Mac has a mechanism to set the behavior of each application when a key is held, but in order to enable key repetition, I need to disable this setting &lt;code class=&quot;language-text&quot;&gt;ApplePressAndHoldEnabled&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In VSCode, I was able to disable the setting by running  command in local terminal but I couldn&apos;t do the same thing in CodeSandbox so I turned off the global setting of &lt;code class=&quot;language-text&quot;&gt;ApplePressAndHoldEnabled&lt;/code&gt; once.
(It is necesary to reboot your computer to apply the setting)&lt;/p&gt;
&lt;p&gt;If there is any problem, you can turn it back on, so I have turned off the global setting as a workaround.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;defaults &lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; ApplePressAndHoldEnabled &lt;span class=&quot;token parameter variable&quot;&gt;-bool&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I tried setting it up to target Chrome and it didn&apos;t work, so I guess I need a bit more additional settings to limit the scope.&lt;/p&gt;
&lt;p&gt;This may not seem like much of a problem, but I hope you will be able to use it with caution since you will be changing the global settings.&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2021/04/20210418_how-to-fix-key-repeating-problem-on-codesandbox/thumbnail.png</thumbnailUrl><language>en</language></item><item><title><![CDATA[CodeSandboxでキーリピーティングができない問題の対処法]]></title><description><![CDATA[普段、フロントエンドのコードを書くのにCodeSandboxを使っていますが、ちょっとした問題があったので、この記事ではその解決方法をご紹介します。 問題: CodeSandboxのVimキーバインドでキーリピートが効かない 私は普段コードを書くときにvim…]]></description><link>https://ver-1-0.net/blog/2021/04/18/how-to-fix-key-repeating-problem-on-codesandbox</link><guid isPermaLink="false">https://ver-1-0.net/blog/2021/04/18/how-to-fix-key-repeating-problem-on-codesandbox</guid><pubDate>Sun, 18 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;普段、フロントエンドのコードを書くのにCodeSandboxを使っていますが、ちょっとした問題があったので、この記事ではその解決方法をご紹介します。&lt;/p&gt;
&lt;h2 id=&quot;問題-CodeSandboxのVimキーバインドでキーリピートが効かない&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%95%8F%E9%A1%8C-CodeSandbox%E3%81%AEVim%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%A7%E3%82%AD%E3%83%BC%E3%83%AA%E3%83%94%E3%83%BC%E3%83%88%E3%81%8C%E5%8A%B9%E3%81%8B%E3%81%AA%E3%81%84&quot; aria-label=&quot;問題 CodeSandboxのVimキーバインドでキーリピートが効かない permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;問題: CodeSandboxのVimキーバインドでキーリピートが効かない&lt;/h2&gt;
&lt;p&gt;私は普段コードを書くときにvimを使っているので、ご多分にもれず、CodeSandboxでもvimのキーバインドを使っています。&lt;/p&gt;
&lt;p&gt;Vimのキーバインドを設定すると、キーリピーティングが効かなくなり、&lt;code class=&quot;language-text&quot;&gt;j&lt;/code&gt;キーを押してもカーソルが下に移動せず、キーを連打しないと移動しなくなってしまい、非常に困っていました。&lt;/p&gt;
&lt;h2 id=&quot;解決策&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A7%A3%E6%B1%BA%E7%AD%96&quot; aria-label=&quot;解決策 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;解決策&lt;/h2&gt;
&lt;p&gt;ターミナルで下記コマンドを実行してください。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;defaults &lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; ApplePressAndHoldEnabled &lt;span class=&quot;token parameter variable&quot;&gt;-bool&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;現在のCodeSandboxはVSCodeの設定を継承しているようで、VSCodeでVim Keybindingを使いたい場合、ターミナルでMacの設定を変更する必要があるのですが、CodeSandboxではターミナルを使う条件が限定されているようで、それができません。&lt;/p&gt;
&lt;p&gt;VSCodeの設定は&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=vscodevim.vim&quot;&gt;こちら&lt;/a&gt;に書いてあります。&lt;/p&gt;
&lt;p&gt;Macには、キーを押したときの動作をアプリケーションごとに設定する仕組みがあるようですが、キーリピートを有効にするには、この設定&lt;code class=&quot;language-text&quot;&gt;ApplePressAndHoldEnabled&lt;/code&gt;を無効にする必要があります。&lt;/p&gt;
&lt;p&gt;VSCodeでは、ローカルターミナルでコマンドを実行することで、この設定を無効にすることができるのですが、CodeSandboxでは同じことができなかったので、一度、グローバル設定の&lt;code class=&quot;language-text&quot;&gt;ApplePressAndHoldEnabled&lt;/code&gt;をオフにしています。
（反映にはコンピュータの再起動が必要です。）&lt;/p&gt;
&lt;p&gt;何か問題があれば元に戻せばいいので、ワークアラウンドとしてグローバル設定をオフにしました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;defaults &lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; ApplePressAndHoldEnabled &lt;span class=&quot;token parameter variable&quot;&gt;-bool&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Chromeを対象に範囲を限定して設定してみてもうまくいかなかったので、過不足なく動くようにするにはう少し追加の設定が必要なのかと思います。&lt;/p&gt;
&lt;p&gt;いざとなれば戻せるのであまり問題にならないと思っていますが、グローバルな設定を変更することになりますので、注意して使用していただければと思います。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2021/04/20210418_how-to-fix-key-repeating-problem-on-codesandbox/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[ブログをリニューアルするついでにGatsby3に上げたので振り返り]]></title><description><![CDATA[ここしばらく就活をしていてバタバタしていたのですが、無事オファーを頂き仕事も開始して落ち着いて来たので、
そろそろ…]]></description><link>https://ver-1-0.net/blog/2021/04/16/renewal-blog</link><guid isPermaLink="false">https://ver-1-0.net/blog/2021/04/16/renewal-blog</guid><pubDate>Fri, 16 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ここしばらく就活をしていてバタバタしていたのですが、無事オファーを頂き仕事も開始して落ち着いて来たので、
そろそろ2年ほど前に改築したブログをまたリニューアルしたいということでブログをリニューアルしました。&lt;/p&gt;
&lt;p&gt;なので、そのあたりをまとめて書いておこうかと思います。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2021/04/15/started-to-work-in-tronto&quot;&gt;トロントの会社でフルタイムのFull Stack Developerとして働き始めました。&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id=&quot;リニューアルの経緯&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%A2%E3%83%AB%E3%81%AE%E7%B5%8C%E7%B7%AF&quot; aria-label=&quot;リニューアルの経緯 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リニューアルの経緯&lt;/h2&gt;
&lt;p&gt;デザインの変更がメインでスタック的にはほとんどNetlify+Gatsbyで変わりはないのですが、しばらく放置していたライブリ郡が古くなり、アップデートして欲しそうな目でこっちを見ていたのでアップデートをしようということになりました。&lt;/p&gt;
&lt;p&gt;ちょうど　GatsbyConf にリアルタイムで参加できて、Gatsby3.0 のリリースを見ていたのもあってちょうど良いかなということで、Gatsby3.0 へのアップデート + リデザインを行っていきました。&lt;/p&gt;
&lt;p&gt;デザインについては、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;宣伝したい物があるのでバナーみたいな物をつけたい&lt;/li&gt;
&lt;li&gt;ポートフォリオ的な位置付けでもあるので、もうちょっと印象に残るデザインが良い&lt;/li&gt;
&lt;li&gt;自分でも記事を検索することがあるので検索つけたい&lt;/li&gt;
&lt;li&gt;モバイルのPageSpeedInsightの評価があまりよくないので改善したい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などなどの個人的な不満があったのでこれらを元に新しいデザインを決めていきました。&lt;/p&gt;
&lt;p&gt;ちなみに以前はこういった形でした。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2021/04/20210416_renewal-blog/blog-v1.0.png&quot; alt=&quot;前のバージョンのブログ&quot;&gt;&lt;/p&gt;
&lt;p&gt;自分のブログはこれで大体4代目くらいになります。初代はWordpressで作っていたのですが、ページ読み込みの重さや改めてPHPを書く辛さなどなど
から2年ほど前に一年発起し、Wordpress =&gt; Gatsbyのリプレイスを行いました。
その後にカナダでの就活を見越してリデザインしたのが上の画像の頃でこれが3代目です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2019/01/10/blog-renewal-by-gatsby&quot;&gt;WordpressブログをGatsby+Netlifyでリプレースした話。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;そして、今回が4代目になるといった形です。色々と話を煤前に全体の構成も書いておくとイメージつきやすいかと思うのでそちらか書いてきます。&lt;/p&gt;
&lt;h2 id=&quot;全体の構成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%85%A8%E4%BD%93%E3%81%AE%E6%A7%8B%E6%88%90&quot; aria-label=&quot;全体の構成 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;全体の構成&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2021/04/20210416_renewal-blog/infra-sturcture.png&quot; alt=&quot;インフラ構成&quot;&gt;&lt;/p&gt;
&lt;p&gt;Netlifyに移行した時からこちらのような構成だったので構成自体には特に変わりはありません。&lt;/p&gt;
&lt;p&gt;ざっくりとした図ではあるのですが、Gatsbyで作成したサイトをNetlifyでホストしているというよくある構成になっています。&lt;/p&gt;
&lt;p&gt;Gatsbyはビルド時に &lt;code class=&quot;language-text&quot;&gt;gatsby-image&lt;/code&gt; や &lt;code class=&quot;language-text&quot;&gt;gatsby-image-plugin&lt;/code&gt; などを使っていると画像の加工処理が入ってしまって重いので画像は、
実際に公開用の環境にデプロイを行うときだけビルドするようにしており、ローカルで &lt;code class=&quot;language-text&quot;&gt;yarn start&lt;/code&gt; などで開発を行うときは直接URLで画像をとるようにして、
Gatsbyの画像処理系のコンポーネントは介さないようにしています。&lt;/p&gt;
&lt;p&gt;サイトとしてそれぞれの記事(全部で100本くらい）にサムネイルが設定されておりそれらを処理するので、それらの画像を処理してから開発用のサーバを立てるというのが
1, 2 分程度かかるのでローカルでは画像の処理を行わないようにして、開発体験があまり毀損されないようにしています。
2代目へのリニューアルをした時に決定したことなので、Gatsby3 でこのあたりは改善されているのかもしれません。
今回はリニューアルが主眼な作業だったのでそちらはひとまず置いておいて上記に書いたような環境で開発を進めています。&lt;/p&gt;
&lt;p&gt;あとは、2代目のリニューアル当初はNetlifyの前にCloudflareを噛ませていたりしたのですが、当時はCloudflareの所で通信に失敗してサイトに不通になるみたいなのが、
少なくない頻度であったのと設定周り色々と面倒なのでNetlifyに直接通信するようにして静的ファイルについてのみCloudflareを噛ませるようにしました。&lt;/p&gt;
&lt;p&gt;ちなみに、ブログ中でも記事中の画像など完璧にGatsbyで処理しきれない物があるのでそれらは、直接Cloudflareの画像にアクセスするように設定しています。&lt;/p&gt;
&lt;p&gt;そのほか、図にはないですが記事の人気順をとるためにGoogle AnalyticsからPVを取得したり、今回追加されたAlgoriaなども使用しています。&lt;/p&gt;
&lt;h2 id=&quot;やったこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;やったこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;やったこと&lt;/h2&gt;
&lt;p&gt;下記がリニューアルに当たってやったことです。&lt;/p&gt;
&lt;h3 id=&quot;技術的な変更点&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AA%E5%A4%89%E6%9B%B4%E7%82%B9&quot; aria-label=&quot;技術的な変更点 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;技術的な変更点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Gatsby3へのアップデート&lt;/li&gt;
&lt;li&gt;TypeScript化&lt;/li&gt;
&lt;li&gt;Algoriaの導入&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;UI的な変更点&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#UI%E7%9A%84%E3%81%AA%E5%A4%89%E6%9B%B4%E7%82%B9&quot; aria-label=&quot;UI的な変更点 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;UI的な変更点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;全体的なレイアウトやコンセプトなど&lt;/li&gt;
&lt;li&gt;検索モーダルの追加&lt;/li&gt;
&lt;li&gt;モバイルトップの表示改善&lt;/li&gt;
&lt;li&gt;コンソールを使った記事フィルタ&lt;/li&gt;
&lt;li&gt;記事中の目次追加&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以降ではこれらについて一つずつまとめを書いていきます。&lt;/p&gt;
&lt;h2 id=&quot;技術的な変更点-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AA%E5%A4%89%E6%9B%B4%E7%82%B9-1&quot; aria-label=&quot;技術的な変更点 1 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;技術的な変更点&lt;/h2&gt;
&lt;h3 id=&quot;Gatsby3へのアップデート&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Gatsby3%E3%81%B8%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88&quot; aria-label=&quot;Gatsby3へのアップデート permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Gatsby3へのアップデート&lt;/h3&gt;
&lt;p&gt;上にも少し書きましたが、元々Gatsby2.xで作られていたのでGatsby本体をアップデートしました。
元々 2.24.60 だった物を 3.1.2 に上げてそのほかバージョンが古くなっていたライブラリも一緒にアップデートしました。&lt;/p&gt;
&lt;p&gt;最新のバージョン出ないライブラリがほとんどだったので、　｀ncu` を使って雑にアップデートをして動作確認してOKという形でした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/raineorshine/npm-check-updates&quot;&gt;raineorshine/npm-check-updates&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;console&quot;&gt;&lt;pre class=&quot;language-console&quot;&gt;&lt;code class=&quot;language-console&quot;&gt;% ncu

   ╭──────────────────────────────────────────────╮
   │                                              │
   │      Update available 11.1.1 → 11.3.0        │
   │   Run npm i -g npm-check-updates to update   │
   │                                              │
   ╰──────────────────────────────────────────────╯

Checking /Users/admin/Projects/Private/blog/package.json
[====================] 45/45 100%

 algoliasearch                              ^4.8.6  →   ^4.9.0     
 i18next                                   ^19.9.2  →  ^20.2.1     
 react                                     ^17.0.1  →  ^17.0.2     
 react-dom                                 ^17.0.1  →  ^17.0.2     
 @emotion/styled                           ^11.1.5  →  ^11.3.0     
 @types/react-helmet                        ^6.1.0  →   ^6.1.1     
 babel-preset-gatsby                        ^1.0.0  →   ^1.3.0     
 gatsby                                     ^3.1.2  →   ^3.3.0     
 gatsby-plugin-algolia                     ^0.17.0  →  ^0.19.0     
 gatsby-plugin-canonical-urls               ^3.0.0  →   ^3.3.0     
 gatsby-plugin-emotion                      ^6.1.0  →   ^6.3.0     
 gatsby-plugin-feed                         ^3.0.0  →   ^3.3.0     
 gatsby-plugin-google-analytics             ^3.0.0  →   ^3.3.0     
 gatsby-plugin-image                        ^1.0.1  →   ^1.3.0     
 gatsby-plugin-netlify                      ^3.0.0  →   ^3.3.0     
 gatsby-plugin-react-helmet                 ^4.0.0  →   ^4.3.0     
 gatsby-plugin-sharp                        ^3.0.1  →   ^3.3.0     
 gatsby-plugin-sitemap                      ^3.0.0  →   ^3.3.0     
 gatsby-plugin-twitter                      ^3.0.0  →   ^3.3.0     
 gatsby-plugin-webpack-bundle-analyser-v2  ^1.1.21  →  ^1.1.22     
 gatsby-remark-autolink-headers             ^3.1.0  →   ^4.0.0     
 gatsby-remark-copy-linked-files            ^3.0.0  →   ^4.0.0     
 gatsby-remark-images                       ^4.0.0  →   ^5.0.0     
 gatsby-remark-prismjs                      ^4.0.0  →   ^5.0.0     
 gatsby-source-filesystem                   ^3.0.0  →   ^3.3.0     
 gatsby-transformer-remark                  ^3.0.0  →   ^4.0.0     
 gatsby-transformer-sharp                   ^3.0.0  →   ^3.3.0     
 googleapis                                ^67.1.1  →  ^71.0.0     
 typescript                                 ^4.2.3  →   ^4.2.4     

Run ncu -u to upgrade package.json&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こういう形で &lt;code class=&quot;language-text&quot;&gt;ncu&lt;/code&gt; コマンドを叩くと package.json のライブラリの差分を表示してくれて、
全部を一気にアップデートしたいときは &lt;code class=&quot;language-text&quot;&gt;ncu -u&lt;/code&gt; とするとライブラリを自動でアップデートしてくれます。
出力結果は実際にリニューアルが終わった後に叩いた物なのですでにアップデートずみになります。&lt;/p&gt;
&lt;p&gt;３月頃にアップデートしたばかりなのに今でも結構差分ありますね。。コンソールで叩くと実施は色付きで表示されるのでもう少し見易いかと思います。&lt;/p&gt;
&lt;p&gt;ちょっと調べると &lt;code class=&quot;language-text&quot;&gt;yarn upgrade&lt;/code&gt; 系のコマンドでも同様のことができるようなのでyarnを使っていればあえてnpm-check-updatesをインストールしてみたいな形でなくても良いのかもしれません。&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;yarn upgrade --latest&lt;/code&gt; で問答無用で最新バージョンにアップデート（&lt;a href=&quot;https://classic.yarnpkg.com/en/docs/cli/upgrade/&quot;&gt;https://classic.yarnpkg.com/en/docs/cli/upgrade/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;yarn upgrade-interactive&lt;/code&gt;  で対話的にライブラリの更新を確認しながらアップデートというのができるようです。(&lt;a href=&quot;https://classic.yarnpkg.com/en/docs/cli/upgrade-interactive/&quot;&gt;https://classic.yarnpkg.com/en/docs/cli/upgrade-interactive/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gatsbyjs.com/blog/gatsby-v3/&quot;&gt;https://www.gatsbyjs.com/blog/gatsby-v3/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gatsby3 の変更点ですがこちらの記事によると&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ローカルでの開発スピードが 80% 改善&lt;/li&gt;
&lt;li&gt;ビルド時間の改善&lt;/li&gt;
&lt;li&gt;Web Vital, Lighthouse などのスコア向上&lt;/li&gt;
&lt;li&gt;gatsby-plugin-image のリリース&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;あたりが変更点です。&lt;/p&gt;
&lt;p&gt;ちょっとまだ試せていないのですが、開発中のビルドを行う時に差分でページのビルドや画像の加工をしてくれるようになったらしいので開発体験がずいぶん改善されたようです。
構成のパートで言及した開発中の画像加工重い問題がこれのおかげで解消されているのかもしれません。&lt;/p&gt;
&lt;p&gt;また、記事によると &lt;code class=&quot;language-text&quot;&gt;Faster build times on any service&lt;/code&gt;  とあるのでビルド時間も短縮されているようです。
これまで Gatsby Cloud のみで動いていていたインクリメンタルビルドがサービスを選ばずに動くようになったようです。
記事をみる限り、ページごとに差分でのビルドを行っているのでそれがビルド時間の短縮につながっている様です。&lt;/p&gt;
&lt;p&gt;ビルド時にAlgoriaへのインデックスの登録などを行うように変更したりしていたので、リニューアル前よりビルド時間が伸びていてあまり実感できていなかったり、
他に集中するために開発時のビルドの高速化具合が未確認などというちょっとあれな感じですが、デザインリニューアルをメインに対応したのでひとまずはこれらの確認ペンディングということにしています。&lt;/p&gt;
&lt;p&gt;ただ、個人的にこれら変更点を記事で見た限りだとアップデートをしたくなる変更点が多いのかなという感想を持ちました。&lt;/p&gt;
&lt;h3 id=&quot;TypeScript化&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#TypeScript%E5%8C%96&quot; aria-label=&quot;TypeScript化 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TypeScript化&lt;/h3&gt;
&lt;p&gt;TypesScript全盛な時代になったので、ご多分にもれず自身のブログもTS化しようということでTS化を進めていきました。&lt;/p&gt;
&lt;p&gt;Gatsbyだとフロント部分は結構簡単にTS化できるので、地道にJSファイルをTSに書き換えていく作業を行いました。
TSの方はそこまで厳しい設定にはしておらずだんだんと厳しくして行けば良いのかなというくらいのスタンスで、補完が効くなどの理由でTSを使うようにしました。&lt;/p&gt;
&lt;p&gt;問題は、ページ生成する側の &lt;code class=&quot;language-text&quot;&gt;gatsby-node.js&lt;/code&gt; の部分をどうするかという所なのですが、こちらについては &lt;code class=&quot;language-text&quot;&gt;ts-node&lt;/code&gt; でTS化すると
割と手軽にできるので、&lt;code class=&quot;language-text&quot;&gt;gatsby-node.js&lt;/code&gt; に以下のように書いてそれ以降読み込むファイルをTSファイルにしています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;ts-node&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  compilerOptions&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    module&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;commonjs&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    target&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;esnext&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    esModuleInterop&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    resolveJsonModule&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; path &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;path&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; gatsbyNode &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./gatsby-node/index&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
exports&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;createPages &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; gatsbyNode&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;createPages

exports&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;onCreateNode &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; gatsbyNode&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;onCreateNode
exports&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;onCreateWebpackConfig&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  stage&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  rules&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  loaders&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  plugins&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  actions
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  actions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setWebpackConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    resolve&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      fallback&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        fs&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Gatsbyも &lt;code class=&quot;language-text&quot;&gt;2.x&lt;/code&gt; 系の頃から File System Route がサポートされているのでそこでのリファクタも考えたのですが、そこまでいくとまた大変そうだったのでそちらは使わず、createPageを実行する関数を分割してページ構成に合わせて &lt;code class=&quot;language-text&quot;&gt;gatsby-node&lt;/code&gt; ディレクトリ配下にファイルを配置するようにしました。
まだリファクタの余地ありそうですがここにはあまり時間使わずTS化する部分だけを行いました。&lt;/p&gt;
&lt;h3 id=&quot;Algoriaの導入&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Algoria%E3%81%AE%E5%B0%8E%E5%85%A5&quot; aria-label=&quot;Algoriaの導入 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Algoriaの導入&lt;/h3&gt;
&lt;p&gt;サイトに記事が100本以上あるので、検索のために Algoria を導入しました。 Gatsby の場合は、 &lt;code class=&quot;language-text&quot;&gt;gatsby-plugin-algolia&lt;/code&gt; を使うと結構手軽に実装できるのでオススメです。
サイト内検索ができるようになったので、過去記事も漁りやすくなっているかと思いますので試してみてください。自分でも過去記事を漁る時があるので導入してみて自分自身も結構満足しています。　&lt;/p&gt;
&lt;p&gt;ちゃんとしたプロダクトに入れるとなると細かいチューニングなどなど必要かとは思うのですが、個人ブログのタイトル、記事、カテゴリなどからの全文検索であればざっくり必要なデータをインデックスに入れて引っ張ってこれます。&lt;/p&gt;
&lt;p&gt;詳細な導入方法はこちらの記事が良いと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gatsbyjs.com/docs/adding-search-with-algolia/&quot;&gt;https://www.gatsbyjs.com/docs/adding-search-with-algolia/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;簡単な流れを書いておくと&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;gatsby-plugin-aloglia&lt;/code&gt; をインストール&lt;/li&gt;
&lt;li&gt;Algoriaのアカウントを作成、API KEYやトークンを取得&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;gatsby-confing.js&lt;/code&gt; に設定&lt;/li&gt;
&lt;li&gt;ビルド時に全体の記事のインデックス登録が走る。&lt;/li&gt;
&lt;li&gt;インデックス登録された物からデータを取得する場合は、&lt;code class=&quot;language-text&quot;&gt;algoriasearch&lt;/code&gt; をインストールして使用する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という形です。インクリメンタルサーチを実装したい場合は、 &lt;code class=&quot;language-text&quot;&gt;react-instantsearch-dom&lt;/code&gt; を使ってやったりすると良いそうなのですが、
とりあえずそこの部分は自前で実装しても良さそうだったので今回は使わないようにしておきました。&lt;/p&gt;
&lt;p&gt;細かい UI 部分は後の部分で触れるのですが、インクリメンタルサーチを実装してみたりしたので、
その部分は個人的に勉強になりました。リクエスト部分をスロットルしてリクエストが飛びすぎないように調整していたりします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; onChange &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useCallback&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token function&quot;&gt;setQuery&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; res &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

      &lt;span class=&quot;token function&quot;&gt;setResult&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;res&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;setResult&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; onChangeThrottled &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useMemo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;throttle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;onChange&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1500&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;onChange&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;styles&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;SearchField&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;initialFocus&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;containerStyle&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;styles&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;onChange&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;onChangeThrottled&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;styles&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      ...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;実際のスロットリングを行う関数はlodashの物を使っています。
これまでReact でこういった機能を書くことがなかったのでこの機会に実装できてよかったですね。&lt;/p&gt;
&lt;h2 id=&quot;UI的な変更点-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#UI%E7%9A%84%E3%81%AA%E5%A4%89%E6%9B%B4%E7%82%B9-1&quot; aria-label=&quot;UI的な変更点 1 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;UI的な変更点&lt;/h2&gt;
&lt;h3 id=&quot;全体的なレイアウトやコンセプトなど&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%85%A8%E4%BD%93%E7%9A%84%E3%81%AA%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%82%84%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88%E3%81%AA%E3%81%A9&quot; aria-label=&quot;全体的なレイアウトやコンセプトなど permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;全体的なレイアウトやコンセプトなど&lt;/h3&gt;
&lt;p&gt;前回のリニューアルのときは、ざっくりレイアウトだけを決めてあとはコーディングしながらデザインを考えるという割とズボラな実装の仕方をしていたのですが、
今回はちゃんと Figma でデザインを起こす所からやりました。&lt;/p&gt;
&lt;p&gt;最近、Figma がブラウザで手軽にデザインを書き起こせるので非常に重宝しています。使いこなせているまでは行かないと思うのですが、Figmaでいくつかのサイトをデザインしたので幾分慣れてきたと思います。今回のリニューアルに際しては、一度軽くデザイン作ってみたのですがあまり納得いく物にならなかったので作り直しを行いました。&lt;/p&gt;
&lt;p&gt;先に書いたようなデザインとコーディングを並行でやるズボラなやり方だと結構実装の手間が勝ってしまってデザインがおざなりになってしまうので、
予めデザインをしっかり起こしてからコーディングできると良いのかなと思いました。（当たり前ですが・・今までサボっておりできていなかったので）&lt;/p&gt;
&lt;p&gt;リデザインに関しては、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;宣伝したい物があるのでバナーみたいな物をつけたい&lt;/li&gt;
&lt;li&gt;ポートフォリオ的な位置付けでもあるので、もうちょっと印象に残るデザインが良い&lt;/li&gt;
&lt;li&gt;上に書いたバナーみたいな物を追加したい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;みたいな要求（欲求？）があったのでそれを元にレイアウトなどは決めていきました。&lt;/p&gt;
&lt;p&gt;また、印象にのこるサイトがよかったので紫（これはReactのイメージカラーから持ってきました。。）を基調に最近ボチボチトレンドなどと言われている
Glassmorphism ポイ透け感を入れたサイトにしました。実際に動画などに上がっているGlassmorphismのデザインはもっと派手ですが、記事を読むサイトに置いてあまり派手すぎるとそれはそれで疲れるかなということで抑えめにしています。&lt;/p&gt;
&lt;p&gt;デザインは、全然体系的に勉強はしていなので趣味レベルではあるのですが、ちょっと気づいた時にお気に入りのサイトをストックして観察したり、Youtube のデザイン系のYoutuberの動画をみたりして少しづつ知見をためてきたので以前のデザインよりはましになったのかなと思っています。&lt;/p&gt;
&lt;h3 id=&quot;モバイルの時のUI改善&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%81%AE%E6%99%82%E3%81%AEUI%E6%94%B9%E5%96%84&quot; aria-label=&quot;モバイルの時のUI改善 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;モバイルの時のUI改善&lt;/h3&gt;
&lt;p&gt;モバイルでの Page Speed Insight のスコアが悪かったのでその辺りも改善できるように工夫したりし、モバイルの記事の一覧はできるだけシンプルにして
サムネイルなどは表示しないようにしました。これは自分でもモバイルで色々な技術系記事をみるのですが、サムネイルがクリックの決め手になることが少ないので
まぁ特になくても影響ないとい判断でサムネイルは表示しないシンプルな画面にしました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2021/04/20210416_renewal-blog/mobile-top.png&quot; alt=&quot;モバイルのトップ画面&quot;&gt;&lt;/p&gt;
&lt;p&gt;結果的に元々黄色スコアだったものが緑まで改善されたのと、だいぶ見やすくなったというのがあるのでやってみて成功でした。&lt;/p&gt;
&lt;h3 id=&quot;検索モーダルの追加&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%A4%9C%E7%B4%A2%E3%83%A2%E3%83%BC%E3%83%80%E3%83%AB%E3%81%AE%E8%BF%BD%E5%8A%A0&quot; aria-label=&quot;検索モーダルの追加 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;検索モーダルの追加&lt;/h3&gt;
&lt;p&gt;検索を追加したのは上で書きましたが、検索モーダルは二箇所に設置するようにしました。ヘッダーの検索アイコンと各記事の下に検索フォームを設置して、
サイトに訪れたタイミング、記事を読み終えて他の記事もみてみたいとなった時などに利用できるように二つの箇所に設置しました。&lt;/p&gt;
&lt;p&gt;実際にどれくらい検索されるのかとかは測定してみるのも良いかなと思うので、どこかのタイミングで測定してみたいです。
（使われてなくても少なくとも自分は使う気がする）&lt;/p&gt;
&lt;h3 id=&quot;記事への目次の追加&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A8%98%E4%BA%8B%E3%81%B8%E3%81%AE%E7%9B%AE%E6%AC%A1%E3%81%AE%E8%BF%BD%E5%8A%A0&quot; aria-label=&quot;記事への目次の追加 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;記事への目次の追加&lt;/h3&gt;
&lt;p&gt;記事中で記事の全体が把握できるように目次を仕込みました。Gatsbyでは &lt;a href=&quot;https://www.gatsbyjs.com/plugins/gatsby-remark-autolink-headers/&quot;&gt;gatsby-remark-autolink-headers&lt;/a&gt; を使うとマークダウンから生成された見出しにリンクを自動で付与できるのでそれを使って目次を実装しています。&lt;/p&gt;
&lt;p&gt;それぞれの記事のデータの見出しは &lt;code class=&quot;language-text&quot;&gt;gatsby-transformer-remark&lt;/code&gt; でパースした結果に含まれているのでその結果と上記で生成される id属性を結びつける形で
実行できます。お好みでスムーズスクロールにしたり、目次を追従するようにして出来上がりという形です。&lt;/p&gt;
&lt;p&gt;目次の表示の形としてモバイルだと今目次が表示できていないので、そこは要改善という形です。モバイルでは目次を最初の見出し前に出すような形で表示するよう考えていますが、記事によっては全く見出しのない記事もあるので「どうしたものか」というのはありますが、とにかくどこか時間を見つけて実装できればと思っています。&lt;/p&gt;
&lt;h3 id=&quot;コンソールを模した記事フィルタ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%82%92%E6%A8%A1%E3%81%97%E3%81%9F%E8%A8%98%E4%BA%8B%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF&quot; aria-label=&quot;コンソールを模した記事フィルタ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コンソールを模した記事フィルタ&lt;/h3&gt;
&lt;p&gt;前述のように印象に残るようなサイトがよかったので、記事のフィルタとしてコンソールを模した物を配置しています。
こちらはまだまだ作り込み必要な気がしているのですが、とりあえず、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新着記事&lt;/li&gt;
&lt;li&gt;人気記事準&lt;/li&gt;
&lt;li&gt;ピックアップ記事&lt;/li&gt;
&lt;li&gt;カテゴリ&lt;/li&gt;
&lt;li&gt;タグ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という形で記事を絞り込めるようになっています。&lt;/p&gt;
&lt;p&gt;本当のところは、ls, pwd, cd 的な物を実装したかったのですが、ひとまず時間かかりそうなのでリリースを優先してそのまま出しています。&lt;/p&gt;
&lt;p&gt;今のところカテゴリ、タグ周りが結構整理されない形でタギングされているような感じもあるのでここらも合わせて整理していきたいです。&lt;/p&gt;
&lt;h2 id=&quot;振り返り&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A&quot; aria-label=&quot;振り返り permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;振り返り&lt;/h2&gt;
&lt;p&gt;トータルで結構な作業量にはなったのですが、Figmaからしっかりデザインを起こして実装・リリースまでできたのである程度納得いく形で終えることができました。
サイト内検索をつけて利便性向上していたりもするので満足です。モバイル用の目次の実装やコンソール部分の実装、Gatsby3で改善された画像のビルド部分を踏まえた開発環境の最適化など積み残しはいくらかありますが、記事追加と合わせて少しづつ作業進めて頂ければと思います。&lt;/p&gt;
&lt;p&gt;ここまで読んで頂いた方には、ブログの実装で使っているプラグイン等々の情報などが役に立てば良いかなと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2021/04/20210416_renewal-blog/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[トロントの会社でフルタイムのFull Stack Developerとして働き始めました。]]></title><description><![CDATA[タイトルの通りそのままなのですが、 昨年10月頃から進めていたカナダでの就活が実を結び晴れて3月中旬よりトロントの会社で働きはじめました。 簡単に自己紹介すると、元々事業会社でエンジニアとして働いたり、フリーランスやったりをしていたのですが一昨年の1…]]></description><link>https://ver-1-0.net/blog/2021/04/15/started-to-work-in-tronto</link><guid isPermaLink="false">https://ver-1-0.net/blog/2021/04/15/started-to-work-in-tronto</guid><pubDate>Thu, 15 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルの通りそのままなのですが、 昨年10月頃から進めていたカナダでの就活が実を結び晴れて3月中旬よりトロントの会社で働きはじめました。&lt;/p&gt;
&lt;p&gt;簡単に自己紹介すると、元々事業会社でエンジニアとして働いたり、フリーランスやったりをしていたのですが一昨年の10月にバンクーバーに移住してきたものです。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2019/10/26/move-to-canada-to-find-job)
&quot;&gt;フリーランスを退職します。カナダ行きます。&lt;/a&gt;&lt;/li&gt;
&lt;/div&gt;
&lt;p&gt;今年2月末頃にFull Stack Developerのポジションでオファーを頂き、無事3月からチームにジョインして働きはじめました。住まいはバンクーバーなので、とりあえず自宅からリモートで働いています。&lt;/p&gt;
&lt;h2 id=&quot;これからやること&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%82%84%E3%82%8B%E3%81%93%E3%81%A8&quot; aria-label=&quot;これからやること permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;これからやること&lt;/h2&gt;
&lt;p&gt;上にも書いたようにFull Stack Developerというポジションでオファーをもらい基本 React, Ruby on Rails のスタックをメインに仕事をしていくことになります。直近はバックエンドのタスクが多そうです。&lt;/p&gt;
&lt;p&gt;Goを使っているプロジェクトもあるようなので、Goあたりも触れると面白いと思っています。またプロダクト自体結構なユーザがいるので、その辺りのインフラ部分やプロジェクトの進め方などなどちょうど北米の開発の仕方などなどを体験してみたかった自分には最適な職場です。&lt;/p&gt;
&lt;p&gt;個人的には、ここの所フロントエンド側への関心が強く、サーバ側の知識のキャッチアップがおざなりになっていたりしているのを自覚しているのでこれを機に、Docker、k8s周りGraphQL、Goなどなどのあたりを何か作りながら知識深めたいなと思っている所です。また、サーバ側をやるにあたって基礎となるローレベルの知識など言語やライブラリによらない知識も増強できると良いなと思っています。&lt;/p&gt;
&lt;h2 id=&quot;就活の話&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%B0%B1%E6%B4%BB%E3%81%AE%E8%A9%B1&quot; aria-label=&quot;就活の話 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;就活の話&lt;/h2&gt;
&lt;p&gt;5ヶ月間就活をしていたのですが非常に長かったです。当初は1, 2ヶ月くらいで決まるかと思っていたのがそうはいかずずるずると時間がたってしまいました。最終的には、会社のカルチャーや技術力、待遇等々の面で納得できる会社からオファーを貰えたので本当に良かったと思っています。&lt;/p&gt;
&lt;p&gt;覚えている範囲でざっくり30, 40社程度アプライをして3つほど最終面接まで行って1社からオファーを頂いたという形です。&lt;/p&gt;
&lt;p&gt;企業を探して自分に応募するというよりは、LikedinやIndeedなどでリクルーターから連絡をもらった会社を受けるというのがメインでした。リクルーター経由だとレジュメだけ渡して面接まで進めることが多いので、場数を踏むことができ英語圏での面接に慣れる事ができたので良かったと思います。&lt;/p&gt;
&lt;p&gt;就活については、機会があればどこかでもう少し詳細にまとめて記事にするかもしれません。&lt;/p&gt;
&lt;h2 id=&quot;働き始めてみて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%83%8D%E3%81%8D%E5%A7%8B%E3%82%81%E3%81%A6%E3%81%BF%E3%81%A6&quot; aria-label=&quot;働き始めてみて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;働き始めてみて&lt;/h2&gt;
&lt;p&gt;働きはじめて、まだまだ二週間なのでなんとも言えないところもあるかと思いますが、ひとまずの所感をまとめておきたいと思います。&lt;/p&gt;
&lt;h3 id=&quot;英語について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%8B%B1%E8%AA%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;英語について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;英語について&lt;/h3&gt;
&lt;p&gt;ニ週間やってみてですが、まぁやはりこちらが一番苦労する部分なのかなぁと思う所です。一対一でのコミュニケーションはまぁなんとかなるのがやはり複数人のミーティングというところでは中々大変で、今話されているトピックを見失うこともしばしばです。おそらく、ずれた発言をしていたり発言すべきタイミングで上手く乗れなかったりという感じでかなりぎこちない感じになっているかと思います。&lt;/p&gt;
&lt;p&gt;そのほか、やはり英語で情報をインプットした場合の理解力や定着力が日本語の10分の1くらいなのでちょっとしたことにも時間がかかるので中々辛いです。&lt;/p&gt;
&lt;p&gt;英語圏で働くにはあまり文句も言っていられないのですが、まぁ現状こう言った悩みにもある程度長い時間かけて辛抱強く付き合っていかないといけないのかなと思っています。&lt;/p&gt;
&lt;p&gt;英語を使っている時の違和感とかフラストレーションはプログラミングをやっている時に似ているなぁと思っており、人によるのかもしれないですが結構プログラミング初めて最初の二、三年は「なんか上手く行かない・・」という思いをずっと抱えながらプログラミングと付き合っていました。今でもやはり、「なんか思ったのが作れない」「どうやって作るんだろ？」という違和感を抱えながら日々試行錯誤をしているのですが、二、三年前よりは確実に技術力がついているので、英語もそれと同じなのかと思っています。&lt;/p&gt;
&lt;p&gt;英語もきっとこういう形で長い目でみながら試行錯誤を繰り返して向上できると良いなと思っているのですが、せっかく英語圏で働けるのであれば限りなく同じレベルで議論をしたりコミュニケーションを取ったりできるようになりたいすね。それに向けてゴールをブレイクダウンしながら、うまく英語力+コミュニケーション力を鍛えていければと思っています。&lt;/p&gt;
&lt;h3 id=&quot;時差について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%99%82%E5%B7%AE%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;時差について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;時差について&lt;/h3&gt;
&lt;p&gt;家はバンクーバーで職場は反対側のトロントということで時差が3時間あります。言わずもがなでリモートで働いていはいるのですが、トロントの方が時間が早いので、向こうの時間に合わせて7時に起きて仕事を初めています。&lt;/p&gt;
&lt;p&gt;早くに仕事を始めると早く仕事が終わるので良い面もあるのですが、まぁやはり時差は辛いですね。仕事も慣れてくるともう少し柔軟に働けるかとは思うのですが、今は変則的な勤務スタイルになっています。&lt;/p&gt;
&lt;p&gt;カナダでもコロナでやはりリモートワークは一気に加速したようで、就活をしていても本当にいろいろなタイムゾーン、国の人たちと面接をしました。
社内にもトロント以外のタイムゾーンで働く人も多いので、この時差問題についても徐々にベストプラクティスみたいなものが出てくると良いですね。&lt;/p&gt;
&lt;p&gt;時空をいじったりはできないので、コミュニケーションの取り方やツールで解決していくことにはなると思うのですが個人的にも色々模索できると良いと思います。&lt;/p&gt;
&lt;p&gt;今日本、トロント、バンクーバーの3つのタイムゾーンを管理して生活しているのですがアプリのカレンダー機能が手放せません。Macのカレンダーには複数のタイムゾーンで予定を入れて管理しているので重宝しています。&lt;/p&gt;
&lt;h3 id=&quot;リモートでのオンボーディング&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AE%E3%82%AA%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&quot; aria-label=&quot;リモートでのオンボーディング permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リモートでのオンボーディング&lt;/h3&gt;
&lt;p&gt;また、今回初の完全リモートでのオンボーディングとなりました。&lt;/p&gt;
&lt;p&gt;リモートでのオンボーディングは受け入れ側とジョインする側共に難しいプロセスだとは思いますが、今のところスムーズに進んでいるかと思います。&lt;/p&gt;
&lt;p&gt;これまであまりオンボーディングのプロセスなどは意識して来なかったのですが、今の会社では最初の二週間くらいで色々な部署の人とのミーティングがセッティングされていてそれを順にこなしていきます。これをすると、とりあえず顔見知りになれたり、丁寧に業務の内容を説明をしてもらったり雑談したりできるのでだいぶ会社のイメージを掴む助けになります。もちろん、そんなちょっとで全てを理解することはできないのですが入社して右も左も分からず、社内の誰とも直接会ったことがないの人にはだいぶ助けになりそうです。&lt;/p&gt;
&lt;h3 id=&quot;全体的な所&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%85%A8%E4%BD%93%E7%9A%84%E3%81%AA%E6%89%80&quot; aria-label=&quot;全体的な所 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;全体的な所&lt;/h3&gt;
&lt;p&gt;という形で全く勝手の違うことばかりなのですが、ある意味こう言った環境を求めてわざわざカナダ移住してきたので大体はウェルカムです。周りの人を見ていて、それが正解なのかはわからないのですが、あぁこういう進め方をするのねと言う形で感心していて日々学びばかりです。&lt;/p&gt;
&lt;p&gt;上に書いたような違和感を一つずつ解消していくのも快感だったりするので、気長にできると良いかと思っています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;仕事が始まってから書こう、書こうと思っていたのですがようやく書けました。とりあえず、報告みたいな記事になってしまいましたが、思ったことをダラダラ書いてるとずっーと終わらなそうなのでここらで切ります。&lt;/p&gt;
&lt;p&gt;カナダでの働き方や就活の仕方、生活、ぼんやり考えていることなどはまだまだあって記事にできそうなのでどこかのタイミングでまた書けたらと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2021/04/20210415_started-to-work-in-tronto/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[2020年の振り返り]]></title><description><![CDATA[時が過ぎるのも早いものでもう2021年2月に差し掛かっています。もういく日もしたら…]]></description><link>https://ver-1-0.net/blog/2021/03/10/review-2020</link><guid isPermaLink="false">https://ver-1-0.net/blog/2021/03/10/review-2020</guid><pubDate>Wed, 10 Mar 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;時が過ぎるのも早いものでもう2021年2月に差し掛かっています。もういく日もしたら3月という形でぼーっとしているとすぐに時間過ぎていきそうです。バンクーバーは徐々に雨の日も減り出して春が近づいている？ような気がしています。&lt;/p&gt;
&lt;p&gt;毎年自身のブログで年ごとの振り返りをしているのですが、今年は就活をしていたりドタバタしていたのでしばらくこちらの振り返りをかけずにいました。&lt;/p&gt;
&lt;p&gt;「振り返りたいなー」という気はあったのですが、時間が取れずにいたのでこのふとした時にでも振り返っておこうと思います。&lt;/p&gt;
&lt;p&gt;2018, 2019年の記事もあるのでもしよかったらみてみてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2020/01/01/review-2019&quot;&gt;2018年。フリーランス一年やってみての振り返り。 | So Far, So Tech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2019/01/16/look-back-2018&quot;&gt;2019年。フリーランス二年目の振り返り | So Far, So Tech&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;まぁこのあとはとつとつとふり返りをしていくのですが2020年はご多分にもれずお家時間が長かったので直接的な刺激が少なかった一年だなぁなんて思っていたのですが、いざ振り返ると人生初のことばかりでそれはそれで充実した一年だったのかなと思います。&lt;/p&gt;
&lt;p&gt;といった形で前振りはここまでで振り返りをしていこうと思います。&lt;/p&gt;
&lt;h2 id=&quot;2020年バンクーバー留学コロナ直撃&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2020%E5%B9%B4%E3%83%90%E3%83%B3%E3%82%AF%E3%83%BC%E3%83%90%E3%83%BC%E7%95%99%E5%AD%A6%E3%82%B3%E3%83%AD%E3%83%8A%E7%9B%B4%E6%92%83&quot; aria-label=&quot;2020年バンクーバー留学コロナ直撃 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2020年バンクーバー留学コロナ直撃&lt;/h2&gt;
&lt;p&gt;2019年の振り返りにも書いていますが、2019年秋ごろよりバンクーバーに留学して現地のカレッジに通っています。二年で卒業できる仕組みになっており前一年は授業を受けて単位をとる、後一年は自分で就職先を見つけて一定の時間働いて卒業のような形になっています。&lt;/p&gt;
&lt;p&gt;今はその前一年が終わって後にも書きますが、今後の就労先を見つけるために就活をしています。&lt;/p&gt;
&lt;p&gt;コロナが本格的に警戒されはじめたのが去年三月頃で、平日は毎日通学していた学校がリモートに切り替わり、定期的に参加していた言語交換のミートアップ、ラクロスの練習などなどが中止になりもろに影響を受けました。&lt;/p&gt;
&lt;p&gt;個人的には、幸いにもリモートの仕事がメインだったので仕事がなくなるなどのことはなかったのですが、家にいる時間が極端に増加し、運動量が目に見えて低下し、無事体重もキャリアハイを記録することができました。&lt;/p&gt;
&lt;p&gt;飲食店でみんなで集まったりはできなくなりましたが、幸いにもバンクーバは夏はハイキング等々のアウトドアアクティビティ、冬はスノーボードができて非常に充実しているので適度にストレス発散できました。&lt;/p&gt;
&lt;p&gt;また、ステイホーム期間には気づくと人と話す期間が激減して、1週間一度も人と話をしなかったなんてこともありそうですが、MENTAでサービスを提供させて頂いていたおかげでメンタリングの合間の雑談等々でずいぶんリフレッシュができた気がしています。&lt;/p&gt;
&lt;p&gt;MENTAでフロントエンドエンジニアを目指す方向けのコースをはじめました&lt;/p&gt;
&lt;p&gt;兼ねてからフリーランスとして二年程度、エンジニアとしてトータル五年ほどのキャリアがあったのでそこから得たノウハウなどを還元できないかということで2020年の3月頃からMENTAでフロントエンドエンジニアを目指すサービスを提供開始しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://menta.work/plan/1608&quot;&gt;MENTAで提供しているフロントエンド向けのコース&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;図らずも、第一波のステイホームの期間と被ったことなどもあり、多くの方に契約頂き半年程度でMENTA内のランキングで全体の上位1%程度のメンターに送られる金バッチメンターとして認定いただけました。&lt;/p&gt;
&lt;p&gt;2020年には常時20~30人ほど契約者様がいるような形で運営をさせて頂き、MENTAのランキングというような外見の実績以外にも、学習をお手伝いさせて頂いた生徒さんの中から実際に未経験から企業への就職を決めた方や課題を進めていく中でどんどんとレベルアップしていく方を目の当たりにして、自身の知見をシェアして役に立てた実感があり実にやりがいのある経験をさせて頂きました。&lt;/p&gt;
&lt;p&gt;また、生徒さんが全国に散らばっていたので生徒さんの地域ならではの話を聞けたりしてこちらも良い経験になりました。&lt;/p&gt;
&lt;p&gt;いろいろな地域のメンティーさんと話す中で首都圏とそれ以外でやはり結構な技術的な格差があるんだなというのにも気付きました。&lt;/p&gt;
&lt;p&gt;技術力の高い企業は首都圏に集中し、その中でコミュニティが形成され知見が共有されていくので必然的にそこに入れない地域とそこにすむ技術者の人はかなり積極的に情報に対してアプローチしないと追い付いていけないのでは？というところが非常に気になりました。&lt;/p&gt;
&lt;p&gt;リモートワークが促進されてこういう隔絶が平準化されると良いなとは思うのと、あとで話す技術アドバイザ的な形でこういった構造を少しでも改善できる取り組みが今後できると良いなと思いました。&lt;/p&gt;
&lt;p&gt;2021年も引き続きMENTAは続けていく予定ですので、興味のある方は上のリンクからご連絡頂ければと思います。&lt;/p&gt;
&lt;p&gt;HTML/CSS, JS ~ Reactを通しで学べるコースをご用意してお待ちしております。&lt;/p&gt;
&lt;p&gt;Techpitさんから「&lt;a href=&quot;https://www.techpit.jp/courses/127&quot;&gt;スネークゲーム 🐍 を作って学ぶ React Hooks API での状態管理&lt;/a&gt;」という教材をリリースさせて頂きました&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://note.com/version1/n/nb6ad3c8f3baf&quot;&gt;React Hooksに関する教材を執筆・リリースしました&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;タイトルの通り、React Hooks APIに関する記事の執筆をさせて頂きました。詳細はこちらの記事を参照頂ければと思いますが、個人のブログ記事をみてくださったTechpitの担当の方から連絡を頂き執筆の機会を頂きました。
リリース後大ヒット！という訳でもないのですが、コンスタントに購入頂いたりTechpit Unlimited という学び放題のプランでもお活用頂いているようで嬉しい限りです。教材の詳細などなどは上記リンク参照ください。&lt;/p&gt;
&lt;h2 id=&quot;バンクーバーでの就活をはじめました&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%90%E3%83%B3%E3%82%AF%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A7%E3%81%AE%E5%B0%B1%E6%B4%BB%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%81%BE%E3%81%97%E3%81%9F&quot; aria-label=&quot;バンクーバーでの就活をはじめました permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;バンクーバーでの就活をはじめました&lt;/h2&gt;
&lt;p&gt;2020年の秋頃から当初のカナダ移住の目的であった現地での就活をはじめました。現在進行形で就活をしているので結果が出ればまた改めて記事をかければと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2019/10/26/move-to-canada-to-find-job&quot;&gt;フリーランスを退職します。カナダ行きます。 | So Far, So Tech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今のところはやはり日本の就活とは勝手も違い、使う言語も違えば慣習も違うので、不慣れなカバーレターやレジュメを書いたり、周りの人を頼りながら手探りで進めています。&lt;/p&gt;
&lt;p&gt;計画では、10月頃から就活を初めて3ヶ月程度で終えられれば・・と思ったのですが、そうはうまくいかず最終まで進めたものがあったりもしたのですが就活は2021年に持ち越しとなりました。&lt;/p&gt;
&lt;p&gt;結果が出ればまた改めて記事を書きたいと思います。&lt;/p&gt;
&lt;h2 id=&quot;技術的な話&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AA%E8%A9%B1&quot; aria-label=&quot;技術的な話 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;技術的な話&lt;/h2&gt;
&lt;p&gt;技術的なところでいうと今年は下記のようなところが印象に残っています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;英語圏に住んで英語力が伸びてインプットできる範囲が広がった&lt;/li&gt;
&lt;li&gt;データ＆アルゴリズムの授業を経て、データ＆アルゴリズムの基礎を踏まえたコードが書けるようになった&lt;/li&gt;
&lt;li&gt;技術アドバイザーの仕事依頼があり、フロント周りのアドバイザーを始めた&lt;/li&gt;
&lt;li&gt;面接対策+MENTAでのメンタリングで知識が深まった&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;まず最初に、英語については「まぁそうだよな」という感じなのですがこちらに一年住んで英語力が向上したのでYoutubeの動画や英語記事、OSSリポジトリなどなどから獲得できる情報が増えインプット元の幅が増えたのでこれまでと違ったアウトプットが出せるような気がしています。&lt;/p&gt;
&lt;p&gt;次に、2020年は主に学校でプログラミングの学習をしていたのですがそこで改めてデータ＆アルゴリズムの授業を受けました。これまで独学でWebエンジニアになってそこまでデータ&amp;#x26;アルゴリズムの学習をやった訳ではないので授業で復習をしましたが、これが結構ためになり普段書いているコードの計算量やデータ構造などへ意識が向くようになり以前よりより良いコードが書けるようになりました。&lt;/p&gt;
&lt;p&gt;フロントエンドだとあまり関係ないと思われるようなこともあるかもしれませんが、DOM自体がツリー構造でツリー構造を扱うには再帰が扱えるとコードを簡潔に書ける。スタック・キューなどの構造を理解しているとエディタ上での編集履歴の管理の実装に役立つなどなどが見えてきて、そこまで難しいことはやらなくて良いから、スタック・キュー、ツリー、再帰などなどの主要なトピックと典型問題の回答みたいな物は抑えておけると実務で同じようなデータ構造のパターンに出くわした時にサクッと簡潔な実装ができるようになりそうです。また、LeetCodeなどの問題を解く中で、実際の面接を想定して30分以内に解ききる、全てのテストケースに一発で通過するようにコードを書くというようなのも良いトレーニングになりました。頭に浮かんだロジックをバグなく実装できるというのは、実装スピードに直結するので「これは良い練習だな」という感想を持ちました。&lt;/p&gt;
&lt;p&gt;三つ目に、MENTAでの繋がりで実際の企業さんからフロントエンド周りのアドバイザを依頼されて初めてアドバイザというポジションで仕事をさせて頂きました。「自分がコードを書けるようになる」というのと「チームメンバーがより良いコードを書けるようになる」という大きな違いがあります。こ違いがアドバイザを行う上で結構大変なのですがやはり、一人で書けるコード量には限界があるので「強いエンジニアを最短で増殖させることができるエンジニア」はプロジェクトの生産性を無限に高められるのでそこを目指して試行錯誤しています。&lt;/p&gt;
&lt;p&gt;最後に、就活対策として想定質問に回答したり、メンタリングでメンティーさんからの質問に回答する中で自分自身に関しても知識の幅を広げることができました。「学んだことを説明するのが一番効率の良い学習法」とはよく言われますが、メンタリングを通して概念を説明する時に自分の理解が追いついてないと説明ができないので教材の準備などを通して自分自身のスキルアップにも役立ちました。もちろん「教える」立場なのでそこがメインの目標ではダメですが副産物として新たな発見があったのでここに書いておきます。そのほかにも、就活対策として「JavaScript interview questions」のような感じでググるというのも面接対策としてだけでなく、スキルアップにも聞きました。Interview Questionsでググると自分が知らない知識のチェックにもあるので弱点を把握できてそこを重点的に学習すると結構効率的にターゲットの分野の知識を得られることに気付きました。例えば、新しいプログラミング言語を学ぶ時なんかにある程度できたなというところで Interview Questions でググってみて自分の実力を把握するなんていうのもアリなのかなと思っています。&lt;/p&gt;
&lt;p&gt;という形で順番に印象的だった内容を書いてきましたが、1 以外はほとんど想定していなかったので良い発見ができてラッキーという感じです。積極的に何か新しいことを始めると、また新たな発見があり次に繋がっていくのを書いていて非常に強く感じました。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;2020年の総括としては、2019年にバンクーバー移住を決めて、2020年は新たな職場が決まるまで色々と落ち着かせる年になるかなとは思ったのですが、思ったよりも新たに始めることができたものが多く、そういう意味では良い年になったかなと思っています。&lt;/p&gt;
&lt;p&gt;コロナでリアルなミートアップに参加できなくなってしまったり、色々なことが制限されたところもあったかとは思いますが、新たに得たものもあり良い一年だったと思っています。&lt;/p&gt;
&lt;p&gt;2021年はバンクーバーでの就職先での活躍はもちろんのこと、英語力の強化、個人開発の継続あたりをテーマにやっていければと思っています。遅くなりましたが、今年一年よろしくお願いします。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2021/03/20210310_recap-2020/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[mp3ファイル分割サービス Egg Cutter ベータ版をリリースしました。]]></title><description><![CDATA[I'm so excited to announce that I released Egg Cutter Beta version, which split an mp3 file easily…]]></description><link>https://ver-1-0.net/blog/2021/02/25/beta-release-egg-cutter</link><guid isPermaLink="false">https://ver-1-0.net/blog/2021/02/25/beta-release-egg-cutter</guid><pubDate>Thu, 25 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;m so excited to announce that I released Egg Cutter Beta version, which split an mp3 file easily. ~と言う形で英語版のアナウンスをかけるくらい流暢であれば良かったのですが、そうでもないので通常通りにお知らせします。&lt;/p&gt;
&lt;p&gt;2月9日に &lt;a href=&quot;https://egg-cutter.net/&quot;&gt;Egg Cutter&lt;/a&gt; のベータ版をリリースしました。&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;書きました &lt;a href=&quot;https://twitter.com/hashtag/EggCutter?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#EggCutter&lt;/a&gt;&lt;br&gt;&lt;br&gt;音声分割サービス Egg Cutter ベータ版をリリースしました。｜version1 &lt;a href=&quot;https://twitter.com/version1_2017?ref_src=twsrc%5Etfw&quot;&gt;@version1_2017&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/note?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#note&lt;/a&gt; &lt;a href=&quot;https://t.co/cA2eS8kJhm&quot;&gt;https://t.co/cA2eS8kJhm&lt;/a&gt;&lt;/p&gt;&amp;mdash; Jiro@Vancouver (@version1_2017) &lt;a href=&quot;https://twitter.com/version1_2017/status/1363080965111705601?ref_src=twsrc%5Etfw&quot;&gt;February 20, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;ベータ版なので今のところ特に登録不要・無料で公開しています。&lt;/p&gt;
&lt;p&gt;サービスとしては、mp3ファイルをインストール不要でWeb上で分割できるようなサービスになっています。本格的なファイルの分割などは、各デスクトップなどに譲るとして、英語の音声CDの分割など手軽な音声編集に使用できるサービスになっているかなと思っていますので、ぜひ使ってみてください。&lt;/p&gt;
&lt;p&gt;ゆくゆくは有料化したいなーと思っていますが、今のところは機能も少なく小さく始めたばかりなのでページに行けばすぐに使い始められます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://egg-cutter.net/&quot;&gt;https://egg-cutter.net/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;Egg-Cutterを作った経緯&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Egg-Cutter%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F%E7%B5%8C%E7%B7%AF&quot; aria-label=&quot;Egg Cutterを作った経緯 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Egg Cutterを作った経緯&lt;/h2&gt;
&lt;p&gt;僕のことをほとんど知らない人が大半かと思うので、簡単に自己紹介しておくとここ二年ほどは日本の仕事をフリーランスでこなしつつ、カナダのバンクーバーに移住してこちらで働けないか色々と画策しているものです。&lt;/p&gt;
&lt;p&gt;と言うことでご多分にもれずバンクーバーでは英語を使い、いざ働こうものであれば英語は切っても切り離せないものになっています。英語でコミュニケーションをとるには当然ボキャブラリが必要で、&lt;a href=&quot;https://qiita.com/Harusugi/items/f499e8707b36d0f570c4&quot;&gt;「オレ プログラム ウゴカス オマエ ゲンシジン ナル」&lt;/a&gt;みたいなボキャブラリだと生きては行けますが他人の考えに触れたり、バンクーバーにいるバックグラウンド多様な人の話を聞いたりと言うことが出来ない訳です。&lt;/p&gt;
&lt;p&gt;そんな背景でボキャブラリの増強に課題感を持っていたので、どういう方法が良いのかを考えていると以前師事した英語の師匠的な人もYoutube上にいるYoutuberも「音から入る」と言うことを重要視しているようです。&lt;/p&gt;
&lt;p&gt;単語を覚える際も「音を覚える」のと本に書かれた「文字を覚える」のでは大きな差があり、音のみで情景がイメージ出来ないと実際の会話のスピードについていけません。&lt;/p&gt;
&lt;p&gt;正しい発音ではないのはわかっているのですが、以前一緒に働いていた人がpythonのことを「パイトン」と発音していて、自分は何を行っているのが分からず「白湯（パイタン）スープ」が一瞬頭をよぎりました。&lt;/p&gt;
&lt;p&gt;白湯スープが頭を通り過ぎる瞬間はごくわずかでしたが、会話ではこの一瞬が命取りで母語の言葉ではうまく取り繕えたりするかもしれないのですが、第二言語となると致命傷です。&lt;/p&gt;
&lt;p&gt;という訳で単語は音声を通して覚えるのが良いと言う考えのもと音声付きの単語帳を多用しているのですが、多くの単語帳CDは10~20単語ほどの音声を一つのファイルにまとめていることが多いです。&lt;/p&gt;
&lt;p&gt;と言う訳で、10~20ほどの単語をまとめて聴きながらそれぞれの単語を覚えるのですが、正直その中でも定着度にかなりの差が出てきます。以前聞いたことがある単語やフレーズはすぐに覚えられますし、そうでない全く新しい物はなかなか覚えられません。英語を効率的に学ぶ方法としては、「新規」の単語を集中的に潰していくことが大事になるのですが、10, 20セットになっているCDではそれが出来ません。&lt;/p&gt;
&lt;p&gt;ということでそれらの音声を分割して単語、フレーズごとに分割して「覚えたフレーズ」はプレイリストから消していくと言う手法が一番効率の良い学習方法になります。&lt;/p&gt;
&lt;p&gt;なのですが、僕の検索した限りだと同様のサービスはデスクトップアプリとして作られているのでよく知らないアプリをインストールしないと行けない。Adobeなどの製品を使えば分割できるけど、有料だし起動も遅いしでなんか億劫といった問題があり、こちらのEgg Cutterを作ればと言う考えに至りました。&lt;/p&gt;
&lt;p&gt;前置きが長くなりましたが、 Egg Cutter は「mp3ファイルを手軽に分割できるサービス」です。今のところ当初の僕が欲しいツールと言う発想の語学学習者向けの色が強いですが、その他の用途などありましたら連絡いただけると嬉しいです。&lt;/p&gt;
&lt;h2 id=&quot;Egg-Cutter-と言う名前について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Egg-Cutter-%E3%81%A8%E8%A8%80%E3%81%86%E5%90%8D%E5%89%8D%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;Egg Cutter と言う名前について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Egg Cutter と言う名前について&lt;/h2&gt;
&lt;p&gt;自分のキャリア上プログラマとしてフルスタックエンジニアと言う形で割と「器用貧乏」なキャリアを積んできました。&lt;/p&gt;
&lt;p&gt;エンジニア業にかかわらずいろいろなことに興味があるので一つを極めるというよりは広ーく知っていると言うような表現が近いのかななんて思っており、常日頃あの「ゆでたまご」を均等に切り抜くことに特化した形状や、そのほかに特化することなく、「ゆでたまご」を切り抜くための窪みまで備えた尖ったあの「たまごを切る奴」に憧れ、そんなキャリアを気づくことを夢見ていました。&lt;/p&gt;
&lt;p&gt;と言うことはないのですが、子供の頃からなんか気になるあの「たまごを切る奴」が今回つくったサービスに近いのでEgg Cutterと言う名前にしました。Egg Slicer と言う呼び名もあるようなのですが、Egg Cutterの方がなんかしっくりきたのでそちらを採用しました。&lt;/p&gt;
&lt;p&gt;Egg Cutter と言うサービス自体が音声を聴きながら分割箇所を決めて、そのままの分割ポイントでざっくりと分割できるので、あの「たまごを切る奴」みたいな切れ味を楽しんでもらえると嬉しいです。&lt;/p&gt;
&lt;h2 id=&quot;最後に&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%80%E5%BE%8C%E3%81%AB&quot; aria-label=&quot;最後に permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;最後に&lt;/h2&gt;
&lt;p&gt;ユーザさんの声を元に機能を足したりもしていきたので、「これがあると嬉しい」みたいなのがあればTwitterやサイトのお問い合わせから連絡いただけると嬉しいです。感想を #EggCutter のタグで呟いていただくだけでも嬉しいです！&lt;/p&gt;
&lt;p&gt;今のところボキャビルのためのサービスですが、他にも色々と使い道がありそうな気もしているのでこういうのに使えそうというのがあれば教えてもらえると嬉しいです。&lt;/p&gt;
&lt;p&gt;まだ、使ったことのない方は一度手元にあるmp3ファイルでその切れ味を試してみてもらえると嬉しいです！&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://egg-cutter.net/&quot;&gt;https://egg-cutter.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2021/02/20210225_beta-release-egg-cutter/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Techpit さんから React Hooks に関する教材を執筆・リリースしました]]></title><description><![CDATA[突然ですがReact Hooks APIをゲームを作りながら学べる教材をTechpitさんより   「スネークゲーム🐍を作って学ぶ React Hooks API での状態管理」   をリリースさせて頂きました。   スネークゲーム 🐍 を作って学ぶ React Hooks…]]></description><link>https://ver-1-0.net/blog/2020/11/14/publish-snake-game-material</link><guid isPermaLink="false">https://ver-1-0.net/blog/2020/11/14/publish-snake-game-material</guid><pubDate>Sat, 14 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;突然ですがReact Hooks APIをゲームを作りながら学べる教材を&lt;a href=&quot;https://www.techpit.jp&quot;&gt;Techpit&lt;/a&gt;さんより&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「スネークゲーム🐍を作って学ぶ React Hooks API での状態管理」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;をリリースさせて頂きました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.techpit.jp/courses/127&quot;&gt;スネークゲーム 🐍 を作って学ぶ React Hooks API での状態管理&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Techpitさんはサービスを作りながら学べるプログラミング学習教材をオンラインで販売している会社さんです。&lt;/p&gt;
&lt;p&gt;この度、4月末頃から自身が運営しているブログ経由で連絡を頂き執筆させて頂けることとなりました。&lt;/p&gt;
&lt;p&gt;他のフリーランスの仕事や学校の宿題などの合間を見ながらせこせこと作業し11月10日（火）に無事リリースができました。&lt;/p&gt;
&lt;h2 id=&quot;教材執筆のきっかけ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%95%99%E6%9D%90%E5%9F%B7%E7%AD%86%E3%81%AE%E3%81%8D%E3%81%A3%E3%81%8B%E3%81%91&quot; aria-label=&quot;教材執筆のきっかけ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;教材執筆のきっかけ&lt;/h2&gt;
&lt;p&gt;執筆のきっかけは&lt;a href=&quot;https://www.techpit.jp&quot;&gt;Techpit&lt;/a&gt;さん側から声かけを頂いたところが一番大きかったのですが、普段からMENTAなどのサービスでプログラミングについて教えていたりするところもあるので常日頃から自分の知識や経験を提供することで価値を提供できる機会があれば進んで参加したいと思っていたのでお話を頂いた時に「面白そう」ということで執筆を開始させて頂きました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://menta.work/plan/1608&quot;&gt;[ HTML/CSS, JavaScript, React, Redux ] フロントエンドエンジニアとして実務レベルの実力を身につけたい方をサポートします。 | MENTA&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;題材を「React Hooks API」「スネークゲーム」とさせて頂いたところについては&lt;a href=&quot;https://www.techpit.jp&quot;&gt;Techpit&lt;/a&gt;さんの担当者さんと相談しながら決めていったのですが、元ネタはこちらの記事で二年ほど前にReactの学習がてら面白そうだったのでスネークゲームを作って公開していました。&lt;/p&gt;
&lt;p&gt;この記事の中にもあるようにちょうど海外のデベロッパーさんが実装しているのを見て面白そうで作って見たところ、自分でも実装していて案の定面白かったので記事にしてみたという流れです。&lt;/p&gt;
&lt;p&gt;そこから月日がたちHooks APIも出始めてクラスコンポーネントで書かれたそのスネークゲームはすっかり古くなってしまい「そろそろアップデートしたいなぁ」とぼんやり考えていました。&lt;/p&gt;
&lt;p&gt;そんなことを考えた矢先、教材執筆のお誘いがあったのでそこで「React Hooks API」と「スネークゲーム」というところが繋がり担当さんに提案をしてこれまでゲームのようなものを作った例がほとんどないということだったので作ると決めました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id=&quot;教材を執筆してみて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%95%99%E6%9D%90%E3%82%92%E5%9F%B7%E7%AD%86%E3%81%97%E3%81%A6%E3%81%BF%E3%81%A6&quot; aria-label=&quot;教材を執筆してみて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;教材を執筆してみて&lt;/h2&gt;
&lt;p&gt;教材はまだReactに追加されてから日の浅い（徐々に浸透していきてる感じもありますが）Hooks APIを解説するような教材になります。&lt;/p&gt;
&lt;p&gt;下記のような懐かしのスネークゲームを作りながらHooks APIの使い方を学んでいきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2020/11/20201114_publish-snake-game-material/snake-game.gif&quot; alt=&quot;スネークゲームサンプルGIF&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;一口にHooks APIといっても useState のようなステート（状態）を扱うフックから、useContextのようにステートをより広いスコープで扱うフックやuseEffectなどレンダリング間の副作用を扱うようなフックまで色々ありますが、この教材では&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;useState&lt;/li&gt;
&lt;li&gt;useEffect&lt;/li&gt;
&lt;li&gt;useCallback&lt;/li&gt;
&lt;li&gt;useMemo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;など普段よく使うフックを主に解説しています。&lt;/p&gt;
&lt;p&gt;スネークが&lt;strong&gt;ぬるぬる動いた瞬間の感動&lt;/strong&gt;も捨てがたいものかとは思いますが、
それと同時にスネークを動かすにはl小刻みにステートを変化させて、再レンダリングを起こしということをやるので&lt;strong&gt;Reactを理解する上で重要なステートとレンダリングについて学べる教材&lt;/strong&gt;になっているかと思います。&lt;/p&gt;
&lt;p&gt;わかりづらい部分にはイラストも入れて説明を加えたり、なるべく読者の方が理解しやすいように作っているつもりです。購入者の方が実際にどういったフィードバックをくれるかはドキドキなのですが、幸い教材リリース後に
Techpitさんの社内で「わかりやすい」という評価も頂けたよなのでひとまずホッとしています。&lt;/p&gt;
&lt;p&gt;肝心の執筆についてですが、当初一二ヶ月で終わるだろうと完全に舐め切っていました。&lt;/p&gt;
&lt;p&gt;チュートリアルのコードと記事の文章の整合性を保ちながら書き進めたり、複雑な概念をテキストで説明することやそれをイラストで図示してあげたりという作業が思いのほか発生して、かなり大変でした。&lt;/p&gt;
&lt;p&gt;普段自分で技術に関する文章を書く際はブログの記事を書くことが多いので、始めた当初はそれとあまり遠からずで慣れたものかと思っていました。&lt;/p&gt;
&lt;p&gt;が、普段書く文章はある程度事前知識をもった人を想定して書いていたので今回はある程度広い範囲のレベルの人をカバーしながら文章を書いていくというのに苦労しました。&lt;/p&gt;
&lt;p&gt;ここまで、とつとつと苦労ばかり書いていますがこれは決してわるいことでなく勉強になったと思っています。普段自分の書いた文章を自分で校閲して公開することはあっても人にレビューされながら商品として作り上げるというなことはなかったので非常に良い経験になったかと思います。&lt;/p&gt;
&lt;p&gt;今後のブログや教材執筆の時にも役立つ経験かと思ったので本当にやってよかったと思っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id=&quot;最後に&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%80%E5%BE%8C%E3%81%AB&quot; aria-label=&quot;最後に permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;最後に&lt;/h2&gt;
&lt;p&gt;この記事はお知らせが主体なのであまり長く書くつもりもないので、ここらで終わりにしようかと思います。&lt;/p&gt;
&lt;p&gt;初の教材執筆とリリースということと、教材執筆がなかなか歯応えがあったので今のところ達成感に浸っていますが、もうすでに5~10本ほど教材を購入頂いているようです。購入して頂いた方ありがとうございます。&lt;/p&gt;
&lt;p&gt;もし、教材を無事終えましたら各種SNSやブログ、サイトのレビューなどで感想を頂けると嬉しいです。Techpitさんの教材はUdemyなどと違いテキストベースのチュートリアルなので、フィードバックを受けて教材をブラッシュアップできたりなどできるので感想頂けると嬉しいです。&lt;/p&gt;
&lt;p&gt;最後にまた繰り返しにはなりますが、興味ある方は是非下記リンクから教材の詳細ご確認お願いします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.techpit.jp/courses/127&quot;&gt;スネークゲーム 🐍 を作って学ぶ React Hooks API での状態管理&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2020/11/20201114_publish-snake-game-material/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[バンクーバーに来て三ヶ月たったので振り返り]]></title><description><![CDATA[最近このブログでは振り返ってばかりなのですが、前回のは年の振り返りだったので
今回はバンクーバーに来てから…]]></description><link>https://ver-1-0.net/blog/2020/02/01/review-on-three-months-since-coming-to-vancouver</link><guid isPermaLink="false">https://ver-1-0.net/blog/2020/02/01/review-on-three-months-since-coming-to-vancouver</guid><pubDate>Sat, 01 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近このブログでは振り返ってばかりなのですが、前回のは年の振り返りだったので
今回はバンクーバーに来てから3ヶ月たったのでとりあえずの振り返りを書いて行こうかなと思っています。&lt;/p&gt;
&lt;p&gt;まだまだ何もかもも中途半端で何かできたことがあるわけでもないのですが、
一つの区切りと今後の成長のための分析もかねて色々とまとめていこうかと思います。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2020/01/01/review-2019&quot;&gt;2019年。フリーランス二年目の振り返り&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id=&quot;バンクーバーの三ヶ月でやっていたこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%90%E3%83%B3%E3%82%AF%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E4%B8%89%E3%83%B6%E6%9C%88%E3%81%A7%E3%82%84%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;バンクーバーの三ヶ月でやっていたこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;バンクーバーの三ヶ月でやっていたこと&lt;/h2&gt;
&lt;p&gt;10月末にバンクーバーに来て1月もあっという間に終了し、3ヶ月の月日が経ちましたがその間に
やっていたことをまとめると&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ESLのクラスに二ヶ月通っていた&lt;/li&gt;
&lt;li&gt;英語力のベンチマークとして初のIELTSを受験&lt;/li&gt;
&lt;li&gt;年始からWebデベロップメントのコースを受講&lt;/li&gt;
&lt;li&gt;フリーランスとして日本で受けていた仕事を時差に振り回されながらもなんとか継続&lt;/li&gt;
&lt;li&gt;個人で開発しているデスクトップアプリをベータ版公開&lt;/li&gt;
&lt;li&gt;初めてのqiitaアドベントカレンダー参加&lt;/li&gt;
&lt;li&gt;バンクーバーでの家探し、一ヶ月で家を探して引越し&lt;/li&gt;
&lt;li&gt;現地でのカナディアンラクロスを堪能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;といった感じになります。&lt;/p&gt;
&lt;p&gt;ぱっと見これらを見るとまぁ大体プログラミング、英語、バンクーバー生活的なテーマで区切れるので
それぞれに分けて書いていきます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;英語について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%8B%B1%E8%AA%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;英語について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;英語について&lt;/h2&gt;
&lt;h3 id=&quot;渡航後に出会った英語勉強におすすめのYouToubeチャンネル&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%B8%A1%E8%88%AA%E5%BE%8C%E3%81%AB%E5%87%BA%E4%BC%9A%E3%81%A3%E3%81%9F%E8%8B%B1%E8%AA%9E%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEYouToube%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB&quot; aria-label=&quot;渡航後に出会った英語勉強におすすめのYouToubeチャンネル permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;渡航後に出会った英語勉強におすすめのYouToubeチャンネル&lt;/h3&gt;
&lt;p&gt;英語に関しては渡航後すぐにESLに通い始めて二ヶ月ほど年末までESLに通っていました。&lt;/p&gt;
&lt;p&gt;授業の内容はそのクラスの英語のレベルによるのですが、僕のクラスではまぁテキストを主に使って文法事項とかとかを
英語で説明されてテストしてみたいな流れで進んでいきました。&lt;/p&gt;
&lt;p&gt;これだけ聞くといわゆる日本の英語のクラスと同じであまり意味ないじゃんという感じですが、
合間合間にグループでのディスカッションやスピーチを自撮りするみたいなワークがありまぁ割と強制的に
英語を話す環境におかれました。慣れの問題もあるとは思うのですが、個人的にはこの二ヶ月でだいぶ英語はましになったかな
と思います。これまでオンライン英会話等で英語で会話することはあっても集団で会話したり雑談したりみたいな経験が少なかったので
そういった意味でも良い経験になったかなと思います。&lt;/p&gt;
&lt;p&gt;とはいえ、英語の授業中は8割が話を聞いている感じなのでまぁ自習も欠かせないなと思い最初二ヶ月ほどはオンラインの英会話と
組み合わせてなるべく英語を話せる時間をつくるように時間をさくのと、Youtubeで英語の勉強法的なものを隙間時間に見まくり
なるほどこうやって勉強するのねみたいなを調べて実践したりていました。&lt;/p&gt;
&lt;p&gt;色々動画をみた結果以下の三つの方のチャンネルが個人的にためになるな、
と思いここで言っていることを日々意識しながら勉強しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ニック先生の英会話&lt;/br&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=pHmTSc3I7HU&quot;&gt;英語が聞き取れるようになる　７つのポイント（Part 1）&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Yumi&apos;s English Boot Camp&lt;/br&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=iba33hVXmgU&amp;t=5s&quot;&gt;英語学習者必見！－永遠の中級者から抜け出すための３つの方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;英語発音専門ドクターDイングリッシュ&lt;/br&gt;
&lt;a hef=&quot;https://www.youtube.com/watch?v=qGO5SM2Gxf4&quot;&gt;流暢な英語発音になる一番のコツは声を止めないこと&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;よく言われるのは英語で英語を覚えた方がよいなんて言われるので、
英語ネイティブが教えている英語のチャンネルなんかも見たりしたのですが英語の勉強法に関しては
日本語にフォーカスしている人の方が日本語と英語の違いを前提にはなしてくれるのですんなり腹落ちしやすい感じがしました。&lt;/p&gt;
&lt;p&gt;ここに載せた三つの方のチャンネルは結構おすすめなのでもしよかったらチェックしてみてください。&lt;/p&gt;
&lt;h3 id=&quot;初めてのIELTS受験&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AEIELTS%E5%8F%97%E9%A8%93&quot; aria-label=&quot;初めてのIELTS受験 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;初めてのIELTS受験&lt;/h3&gt;
&lt;p&gt;また、最近三ヶ月たったあとの英語力チェックの一貫としてIELTSを受けてきました。準備不足感は否めなかったですがまぁ
最初のなのでこんなもんかなという感じです。今月中旬には結果がでるようなので楽しみです。&lt;/p&gt;
&lt;p&gt;バンクーバーでうけると受験料が高いので、日本にいる方は日本で受けておいた方がよいかと思います。普通に300ドルとかして結構高いです。
受験料高いのはネックですが試験みたいな英語のの力を定量的にはかれるものがないとちゃんと勉強しないのでまた三ヶ月後にIELTS受験しようと思います。
なので次の受験は5月です。&lt;/p&gt;
&lt;p&gt;肝心の英語力ですが個人的にはここ三ヶ月の伸びは満足していますが、これから就活して、英語で仕事したり、
英語でストレスなく友達と話をしたり、英語の記事をスイスイ読めたりというレベルにはほど遠いので引き続きこの調子で
英語力を強化できると良いと思います。&lt;/p&gt;
&lt;h2 id=&quot;プログラミングについて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;プログラミングについて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;プログラミングについて&lt;/h2&gt;
&lt;h3 id=&quot;個人開発について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%80%8B%E4%BA%BA%E9%96%8B%E7%99%BA%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;個人開発について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;個人開発について&lt;/h3&gt;
&lt;p&gt;プログラミングについては引き続き日本といた頃と変わらず仕事でもプライベートでも好きでコードを書いているのですが、
友達に勧められて、12月にqiitaのアドベントカレンダーに初めて参加してみました。&lt;/p&gt;
&lt;p&gt;その時の記事はこちらです。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2019/12/06/how-to-create-logo-for-private-project&quot;&gt;デザイン実務経験ゼロのエンジニアが個人サービスでのアイコンの作り方を考える&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;公開当初は結構な人が読んでくれたみたいで来年もまたやってみたいなと思います。&lt;/p&gt;
&lt;p&gt;この記事でも書いたのですが、今は個人で開発しているデスクトップアプリをベータ版として公開しています。
英語の勉強と仕事と就活で忙しいのですが、こっちの方も併せて進めていきたいななんて思っています。&lt;/p&gt;
&lt;h3 id=&quot;アルゴリズムの勉強の必要性&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%AE%E5%8B%89%E5%BC%B7%E3%81%AE%E5%BF%85%E8%A6%81%E6%80%A7&quot; aria-label=&quot;アルゴリズムの勉強の必要性 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;アルゴリズムの勉強の必要性&lt;/h3&gt;
&lt;p&gt;年始から始まったwebデベロップメントのコースの方はと言えばまぁ授業の内容はだいたいわかるので内職をしたりしているのですが、
こっちではやっぱりアルゴリズムの部分がかなり重要になるようなので重点的に勉強していく必要はありそうです。&lt;/p&gt;
&lt;p&gt;先生にそこらへんのことを質問しみると
**「こっちのある程度の規模の会社になると自分たちでライブラリを持っているのでそれを理解したり、
新たに自分たちのライブラリを作れないと困る。なのでアルゴリズムの勉強が必要」**という話を聞いてハラ落ちしました。&lt;/p&gt;
&lt;p&gt;こちらの企業でもスタートアップではなるべく早くプロダクトを作ったり機能を追加したりするのが重要なので、
既存のライブラリを問題なく使えるのが大事で面接でもコード面接というよりもペアプログラミングで模擬的な機能を実装して
もらうみたいな形をとっているそうです。&lt;/p&gt;
&lt;p&gt;この話は今のところバンクーバーにきて一番印象的なことですが、これまであまりやってこなかったアルゴリズムについて
重点的に強化する必要あがりそうです。&lt;/p&gt;
&lt;p&gt;まぁ就活のためというのもそうなのですが、自分が今後書くコードやコードレビューのために役にも立ちそうなのでこれから
しっかり勉強していきたいなと思います。&lt;/p&gt;
&lt;h2 id=&quot;バンクーバー生活について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%90%E3%83%B3%E3%82%AF%E3%83%BC%E3%83%90%E3%83%BC%E7%94%9F%E6%B4%BB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;バンクーバー生活について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;バンクーバー生活について&lt;/h2&gt;
&lt;h3 id=&quot;雑感&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%9B%91%E6%84%9F&quot; aria-label=&quot;雑感 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;雑感&lt;/h3&gt;
&lt;p&gt;バンクーバー生活については結構満足しています。冬場ほとんど雨で天気が悪いのとバンクーバーの家賃が高いのが
気に入らないですがそれ以外はおおむね満足しています。&lt;/p&gt;
&lt;p&gt;スノボーをしたいと思えば小一時間でスキー場までもいけるし、自分が学生の時にやっていたラクロスも十分に楽しめて
自分の好きなものが揃っていて今のところ全然不満がないです。長く住んでるとマンネリ化してきて文句言いたくなったりするのかも
しれませんが、まぁ今のところ自分の好きなことができているので満足です。&lt;/p&gt;
&lt;p&gt;バンクーバー到着当初は、ホームステイをしていたのですが幸運なことに一ヶ月で物件を決めて無事引っ越すことができました。
人によってはホームステイ先がすごくよくて急いで引っ越す必要もないというひとがいるようなのですが自分はそうではなかったので、
早めに動いてなる早で物件を探して引越し先を決めました。&lt;/p&gt;
&lt;p&gt;物件探しは物件のオーナーや不動産会社の喋る英語がわからなくて辛い思いもしましたが、まぁそこはメールで詳細は確認したりしてなんとか
乗り切りました。カナダに行ってすぐになんの苦労もなくコミュニケーションをとるのはまぁ多くの人には不可能なのでとりあえずアポイントメント
だけ入れてなんとかやり切るようにしていけばとりあえず物事は進むのかなと思います。&lt;/p&gt;
&lt;h3 id=&quot;ラクロスについて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A9%E3%82%AF%E3%83%AD%E3%82%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;ラクロスについて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ラクロスについて&lt;/h3&gt;
&lt;p&gt;またまた、こっちにきて学生の頃やっていたラクロスですがバンクーバーに来る当初は**「プレイできるチャンスがあればやりたいな」&lt;strong&gt;くらいで
バンクーバーにきたのですが縁あってこっちでガッツリラクロスしている友達に出会えたので, 実際にステジアムに行ってプロラクロスリーグの
NNLも観戦しますし、実際に自分でもプレイしてバンクーバーでのラクロスを堪能しています。
ラクロス自体も十分に面白いのでそれだけで満足なのですが、こういった趣味があると&lt;/strong&gt;なかなか接点のもてないネイティブのカナディアンとも
接点ももてる**ので何か自分が一つ好きな趣味があったりするのであればそれを通じてバンクーバーで色々な人と繋がるというのはかなり
有効な手段なのかもしれないですね。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上、これまでのバンクーバーでの三ヶ月を振り返ってみました。&lt;/p&gt;
&lt;p&gt;三ヶ月ごとにできれば振り返りたいですがまぁ特に書くこともなければ書かないかもしれません。
というか書けるように刺激的なインプットがあるような行動を心がけたいですね。&lt;/p&gt;
&lt;p&gt;まとまりのない文章だったのでとくに綺麗なまとめもできないので、興味ある部分だけ読んでいただけると
嬉しいです。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2020/02/20200201_review-on-three-months-since-coming-to-vancouver/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[2019年。フリーランス二年目の振り返り]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2020/01/01/review-2019</link><guid isPermaLink="false">https://ver-1-0.net/blog/2020/01/01/review-2019</guid><pubDate>Wed, 01 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;大晦日は家で今やってる個人開発のプロジェクトのコードと闘う、我ながらエンジニアの鑑みたいな過ごし方をしていたのですが、ひとまず無事年明けを迎えることができました。
昨年はお世話になりました。本年もよろしくお願いします。&lt;/p&gt;
&lt;p&gt;今年は日本からバンクーバーに拠点を移した大きな転換の年となりましたが、カナダ移住というトピックからすると昨年は準備の年だったので、
年が明けてようやく本番といった感じです。まぁあまり気負わず粛々とことを進めて行ければよいなぁなんて考えております。&lt;/p&gt;
&lt;p&gt;去年も一つの区切りとして、振り返りを書いていたので今年も書いていこうかなと思います。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;2018年の振り返りを受けた雑感&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2018%E5%B9%B4%E3%81%AE%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A%E3%82%92%E5%8F%97%E3%81%91%E3%81%9F%E9%9B%91%E6%84%9F&quot; aria-label=&quot;2018年の振り返りを受けた雑感 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2018年の振り返りを受けた雑感&lt;/h2&gt;
&lt;p&gt;昨年の振り返りの記事はこちらになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2019/01/16/look-back-2018&quot;&gt;2018年。フリーランス一年やってみての振り返り。&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;売上のはなし&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%A3%B2%E4%B8%8A%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%97&quot; aria-label=&quot;売上のはなし permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;売上のはなし&lt;/h3&gt;
&lt;p&gt;記事では売上に言及していますが、多分年間を通した売上は今年と同じくらいなのかなという感じです。
クライアントワークでは裁量が増えて単価があがったのですが、年始はあまり稼働していなかったのとカナダ移住で
稼働が減ったのが要因でだいたい同じくらいでクローズという感じですね。&lt;/p&gt;
&lt;p&gt;フリーランスとして気になる単価ですが、一昨年の最初の単価に比べて二倍以上になっているので自分をほめてあげたいです。
エンジニアとしてはそれなりの単価を頂いているので、それに見合ったパフォーマンスをできるように引き続き精進していきたいです。&lt;/p&gt;
&lt;h3 id=&quot;技術のはなし&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8A%80%E8%A1%93%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%97&quot; aria-label=&quot;技術のはなし permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;技術のはなし&lt;/h3&gt;
&lt;h4&gt;フロントのはなし&lt;/h4&gt;
&lt;p&gt;今年は春先から、React Nativeでの&lt;strong&gt;フルスクラッチのアプリ開発からリリース&lt;/strong&gt;までを経験できたので、その中での知見が溜まってよかったです。
2018年もReact Nativeの開発はあったのですが、エンジニアとしてのポジションが高くなかったのとすでにリリース済みのプロダクトだったので
デプロイ周りやライブラリ選択、アーキテクチャ設計みたいなところができて良い経験になりました。&lt;/p&gt;
&lt;h4&gt;サーバのはなし&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Rails&lt;/strong&gt;も引き続き触っており、今年はRailsの新たな魅力を発見できた気がします。定期的に死んだと言われたり、
他言語からきたひとから「設定より規約」という思想の暗黙的なコードに慣れないと言われたりするRailsですが、
デファクトスタンダートの安定やORM, テストライブラリ、フィクスチャ、シードなど質を保ちながら高速に開発する環境が揃っているので
一度入り込んでしまうとかなりストレスレスに開発ができます。&lt;/p&gt;
&lt;p&gt;個人プロジェクトでGoを書いてみたり、Expressを触ったりすることもあるのですが、テスト環境の構築・設計等々の作業が都度発生するので、
ゼロからプロダクトを作ってテストコードある状態で改善のサイクルに乗せるまでがRailsに比べて相当大変な気がします。&lt;/p&gt;
&lt;p&gt;アーキテクチャ自体もシンプルなMVCでテストの環境も整っているので、お作法を守りながら開発していけば
初心者の入りのWAFとしては結構良いのかななんて思っています。&lt;/p&gt;
&lt;p&gt;話は変わって、&lt;strong&gt;Goについて&lt;/strong&gt;ですが、久しぶりに静的型付け言語を使っているのでRubyやJavaScriptとはまた違った思想があって、
それらを知るのがまた面白いです。Goの学びと平行で個人開発を進めているので若干ブレーキになっている感はいなめないのですが、
まぁ学びへの投資として今は辛抱強くやっていこうかなと思っています。&lt;/p&gt;
&lt;h4&gt;2020年のテーマのはなし&lt;/h4&gt;
&lt;p&gt;2020年はそろそろ言語的な専門でなく技術分野としての専門性を伸ばしていきたいなぁなんて思っています。
今まではサーバのコードも書くし、フロントのコードも書くという感じでやらしてもらっていたのですが、経験的にそこまで
多くのトラフィックを捌くコードを変えていたりしていたわけではないのでフロントを強めるのが良いのかなぁなんて思っていたのですが、
色々と考えるとDevOpsあたりが自分にあっているのかなという結論に至りました。&lt;/p&gt;
&lt;p&gt;今年の仕事でCircleCIを使ってデプロイの自動化を行ったりしたのですが、デプロイの仕組みが開発チームのワークフローや
リリースまでの仕組みや製品の質を決める部分が多くビジネスとの接点が大きく、開発者へのインパクトも大きいなと感じました。&lt;/p&gt;
&lt;p&gt;エンジニアとして、開発を請け負っているからには、要求された製品の質を担保しながら素早いサイクルで製品を作っていくのが仕事だと
思っているので、個人的な課題感とマッチするかなと思います。&lt;/p&gt;
&lt;p&gt;ということで、2020年は&lt;strong&gt;DevOps&lt;/strong&gt;あたりのところを重点的にやっていきたいです。&lt;/p&gt;
&lt;p&gt;とは言っていますが、デザインの部分だったりUI・UXの部分も好きなのでそっちもやっていきたく迷う部分もあるんで、
シナジーはないかもしれないですが、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「フロントの部分を全体的に強化しつつ、サーバ・インフラの部分はDevOpsを中心にやっていく」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;というのがイマイチ腑に落ちないですが、2020年の自分のテーマになるかと思っています。
フロントの部分のテーマの解像度を上げていく必要性は感じていますがこれは2020年通してやっていきます。&lt;/p&gt;
&lt;h2 id=&quot;2019年の個人的ニュース&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2019%E5%B9%B4%E3%81%AE%E5%80%8B%E4%BA%BA%E7%9A%84%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&quot; aria-label=&quot;2019年の個人的ニュース permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2019年の個人的ニュース&lt;/h2&gt;
&lt;h3 id=&quot;カナダに移住しました&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AB%E3%83%8A%E3%83%80%E3%81%AB%E7%A7%BB%E4%BD%8F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F&quot; aria-label=&quot;カナダに移住しました permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;カナダに移住しました&lt;/h3&gt;
&lt;p&gt;経緯はこの記事にも書いたのですが、フリーランス業(エンジニアとしての)の飽和と将来的な成長等々を念頭にカナダ(バンクーバー)移住を決めました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2019/10/26/move-to-canada-to-find-job&quot;&gt;フリーランスを退職します。カナダ行きます。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;カナダでの直近の目標はざっくり言うと&lt;strong&gt;カナダ現地就職&lt;/strong&gt;となるのですが、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;英語圏のエンジニアと議論したり、関係性を作れる英語力の獲得&lt;/li&gt;
&lt;li&gt;英語圏での仕事の実績&lt;/li&gt;
&lt;li&gt;バンクーバースタートアップの文化や仕事の仕方を体感する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あたりが今回の移住の目的になっいてます。&lt;/p&gt;
&lt;p&gt;これらの経験を通して**「世界的なフィールドで戦える能力を育てる」**というのが裏テーマになっています。
こうやって書くと格好付けてるように聞こえますが端的に言うと「これだけネットが発達して誰とでも仕事できたり友達になれたりするのに、日本でしか生活したことないのもったいなくない？」
という素朴な疑問が元になってます。&lt;/p&gt;
&lt;p&gt;そうはいっても、「日本は治安・サービスも良くて住みやすいし、日本語通じるしなんでわざわざ？」という人もいるかもしれませんが、これは単純な自分の興味なのでそこを体験してみたいなと考えてます。&lt;/p&gt;
&lt;p&gt;すでに海外で生活されてる方からするとなんでわざわざ住みづらい所にリスクを負って来るのかわからないかもしれませんが、日本でしか生活したことない人の中にはこういう考えの人もいるよってわかってもらえれば良いかと思います。&lt;/p&gt;
&lt;p&gt;こっちでの暮らしぶりとか感じたことも記事にできると思うので、おりをみて投稿していければなと思います。&lt;/p&gt;
&lt;h3 id=&quot;個人開発のアプリをベータリリースしました&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%80%8B%E4%BA%BA%E9%96%8B%E7%99%BA%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%99%E3%83%BC%E3%82%BF%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F&quot; aria-label=&quot;個人開発のアプリをベータリリースしました permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;個人開発のアプリをベータリリースしました&lt;/h3&gt;
&lt;p&gt;念願の個人開発アプリをベータリリースしました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://papyrus-app.org/&quot;&gt;PaPyrus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;優れたメモアプリは数あれどマークダウンで&lt;strong&gt;ちょろっとかける裏紙のような気軽なメモアプリ&lt;/strong&gt;が欲しかったのでつくりました。&lt;/p&gt;
&lt;p&gt;機能も限られていて全然まだまだなのですが、一応体裁は整えています。学校行ったり、仕事したり、勉強したりでなかなか進められていないのですが、こないだちょっと見に行ってみると1人だけユーザさんが登録してくれていたので、ちょっと感動しました。&lt;/p&gt;
&lt;p&gt;使ってもらえてるかはわからないのですが、これから改善を重ねればそれなりに使ってもらえるのではという自信があるのでなんとか時間を捻出して正式リリースまで持っていきたいです。&lt;/p&gt;
&lt;p&gt;今年はせっかくアプリを作ったので、個人開発アドベントカレンダーにも記事を書いてみたのですが、公開当日は100PVくらいまでいったので、
書いてみるもんだなぁと感じたと同時にもうちょっと回遊させたり等々色々準備できたなという反省もあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2019/12/06/how-to-create-logo-for-private-project&quot;&gt;デザイン実務経験ゼロのエンジニアが個人サービスでのアイコンの作り方を考える&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;来年はもっと色々なアドベントカレンダー書いたら楽しそうだなぁなんて思ってます。&lt;/p&gt;
&lt;h3 id=&quot;月間のPVが最高で6000PVを記録しました&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%88%E9%96%93%E3%81%AEPV%E3%81%8C%E6%9C%80%E9%AB%98%E3%81%A76000PV%E3%82%92%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F&quot; aria-label=&quot;月間のPVが最高で6000PVを記録しました permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;月間のPVが最高で6000PVを記録しました&lt;/h3&gt;
&lt;p&gt;この記事を書いていても、カナダ移住とか、個人開発とかとかのトピックで書けることはたくさんあることに気づきましたが、
今年は、一応節目としてブログの**月間PVが6000を超えました。**最高瞬間風速なので平均は5000弱でしたが、昨年に比べて1.5倍ほどPVを伸ばすことができました。&lt;/p&gt;
&lt;p&gt;1万PVいきたいなと思っているので、今年もちょこちょこ更新しきたいと思います。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ということで、色々と書きましたが2020年もやりたいことがたくさんある年になりそうです。&lt;/p&gt;
&lt;p&gt;本編ではあまり書きませんでしたが、就職活動と英語の語学力アップは結構切実な問題としてあります笑。
就職先のリストアップとか業界の情報収集等々やることたくさんある気がするのですが、
まぁそれらはこれからやるとして、最近自分の頭にあることを棚卸ししておきました。&lt;/p&gt;
&lt;p&gt;今年もまぁ色々とあると思うので都度記事にしていきたいと思います。本年もよろしくお願いします！&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2020/01/20200101_review-2019/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[How do you design icon in your private project?]]></title><description><![CDATA[Recently, I released my private project application for beta version. I have been working as web developer for 5 years in some companies and…]]></description><link>https://ver-1-0.net/blog/en/2019/12/06/how-to-create-logo-for-private-project</link><guid isPermaLink="false">https://ver-1-0.net/blog/en/2019/12/06/how-to-create-logo-for-private-project</guid><pubDate>Fri, 06 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently, I released my private project application for beta version.&lt;/p&gt;
&lt;p&gt;I have been working as web developer for 5 years in some companies and I am web developer.
However, I will not talk about programming in this article but how to design icon in your private project.&lt;/p&gt;
&lt;p&gt;I am going to write about programing in other articles someday.&lt;/p&gt;
&lt;h2 id=&quot;Introduction&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Introduction&quot; aria-label=&quot;Introduction permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Introduction&lt;/h2&gt;
&lt;h3 id=&quot;Self-Introduction&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Self-Introduction&quot; aria-label=&quot;Self Introduction permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Self Introduction&lt;/h3&gt;
&lt;p&gt;As I said, I am web developer not designer. I mainly use Rails and React.
At the beginning of my web developer carrer, I started to work as server side developer and generally I get interested in front end technology
and React. Finally, I also use React Native these days.&lt;/p&gt;
&lt;p&gt;Besides, actually I am developing an memo application. The name is &quot;Papyrus&quot;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://papyrus-app.org/&quot;&gt;PaPyrus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It is released as beta version.&lt;/p&gt;
&lt;a href=&quot;https://papyrus-app.org/&quot;&gt;
  &lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/wallpaper.png&quot; alt=&quot;papyrus&quot; width=&quot;400px&quot;&gt;
&lt;/a&gt;
&lt;p&gt;I already have released my some applications until now, but I couldn&apos;t make my application&apos;s logos be cool.
I don&apos;t know why. I could never design it as I expected.&lt;/p&gt;
&lt;p&gt;However, finally, I could finish the karma, thanks to my designer friend.
I have a confident of the current icon for my application. (I will show you the icon below)
I ask him how I should desing apllication&apos;s logo and he gave me some advices. I can&apos;t say that if you follow this process,
you can definetly create cool icon though, you&apos;ll come to be able to do better by the process I organized.&lt;/p&gt;
&lt;h3 id=&quot;Whats-Papyrus&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Whats-Papyrus&quot; aria-label=&quot;Whats Papyrus permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What&apos;s Papyrus?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://papyrus-app.org/&quot;&gt;Papyrus&lt;/a&gt; is memo application which run on Mac OS and it is implemented by Electron.&lt;/p&gt;
&lt;p&gt;There are some memo application in the world, but it usually has a feature to organize your notes.&lt;/p&gt;
&lt;p&gt;It&apos;s overspec for me because I&apos;m lazy.
Those memo apps are better way to write down but I &apos;m too lazy to handle it.&lt;/p&gt;
&lt;p&gt;I usually use such applications&apos; draft for my blog but I needed &lt;strong&gt;a memo application like flyer
on purpose of writing down my idea or command temporally.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is why I created Papyrus. Beta version is released now and that is developing.
If you download and use it, I&apos;m going to feel happy. Besides, giving me feedback is going to make me be happy.&lt;/p&gt;
&lt;p&gt;Applications such as Inkdrop, Boostnote and Evernote are too great,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jet down your Todo list&lt;/li&gt;
&lt;li&gt;Memoize your command it&apos;s hard to remember&lt;/li&gt;
&lt;li&gt;Draft message you are sending&lt;/li&gt;
&lt;li&gt;Copy a part of logs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are Papyrus&apos;s usecase. It is going to fit these kind of short-lifespan memo.&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h3 id=&quot;Papyruss-Icon&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Papyruss-Icon&quot; aria-label=&quot;Papyruss Icon permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Papyrus&apos;s Icon&lt;/h3&gt;
&lt;p&gt;Without further ado, I will talk about icon.
I designed and implemented in PaPyrus by myself and of course, I designed icon as well.&lt;/p&gt;
&lt;p&gt;This is the icon:&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/icon.png&quot; width=&quot;300&quot; alt=&quot;papyrus icon&quot;&gt;
&lt;p&gt;How do you think about this icon?&lt;/p&gt;
&lt;p&gt;I have ever run some private web services though, my icons I designed before were too ugly to show others.
Compared to them, this is cooler and This one is the best icon I have ever made. Besides, I got to sort of understand
how to design an icon for application so I decided to verbalize.&lt;/p&gt;
&lt;h2 id=&quot;How-to-make-icon-in-your-private-project&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#How-to-make-icon-in-your-private-project&quot; aria-label=&quot;How to make icon in your private project permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How to make icon in your private project&lt;/h2&gt;
&lt;p&gt;For making PaPyrus icon, I wanted to make cool log match with application designe so
I need some advice from designer and I asked a designer I know about it.&lt;/p&gt;
&lt;p&gt;I summarized the advices and tips I googled as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select an basic object associating with application&lt;/li&gt;
&lt;li&gt;Sketch object&lt;/li&gt;
&lt;li&gt;Abstract the sketch&lt;/li&gt;
&lt;li&gt;Give the abstact sketch the finishing touch&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;Select-an-basic-object-associating-with-application&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Select-an-basic-object-associating-with-application&quot; aria-label=&quot;Select an basic object associating with application permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Select an basic object associating with application&lt;/h3&gt;
&lt;p&gt;This idea is from result I googled and I did trial and error though.
First of all, You get to choose a basic object assocating with your application.&lt;/p&gt;
&lt;p&gt;This time, PaPyrus has a image of paper literaly so I decided the object is &lt;strong&gt;&quot;paper&quot;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Evernote log is an elephant and it has a part fliping page on upper left of it.
Thus, Evernote&apos;s logo associate with &quot;elephant&quot; + &quot;paper&quot;.
That of Apple is &quot;apple&quot; and Sketch applies something like &quot;diamond&quot; for its symbol.&lt;/p&gt;
&lt;p&gt;In this way, you have to pick up an object for your project at first.
It is intersting to select multiple objects as Evernote do ( &quot;elephant&quot; + &quot;paper&quot;).
However, it is harder for beginner or developer who are not familier with designing logo to do that.&lt;/p&gt;
&lt;p&gt;Anyway, if you want to choose more than two motif, I recommend you sketch each motif and combine with them in post process.&lt;/p&gt;
&lt;h3 id=&quot;Sketch-the-object&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Sketch-the-object&quot; aria-label=&quot;Sketch the object permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sketch the object&lt;/h3&gt;
&lt;p&gt;This is most impressive advice I recieved from the designer.
He said&lt;/p&gt;
&lt;p&gt;&quot;Don&apos;t open Illustlator at first. Sketch first.&quot;&lt;/p&gt;
&lt;p&gt;As he said, I have made not good icon by starting from using Illustlator...&lt;/p&gt;
&lt;p&gt;Then, I thought I started from sketching, but I have never doing since I was high school student.
However, You can&apos;t tell unless you try. I tried to draw my hand.&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-sketch.png&quot; width=&quot;300&quot; alt=&quot;手のスケッチ&quot;&gt;
&lt;p&gt;I have no idea about sketching so I sketched while I watching a vide on YouToube.&lt;/p&gt;
&lt;p&gt;However, at that time, An idea come up with in my mind.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&quot; How can I make good icon through this process???&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I asked him to give me some advices about that with such a anxiety.
And then, He said the purpose of sketching is &lt;strong&gt;&quot;polishing  observing skill&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Certainly, you can&apos;t draw in detail while you are sketching if you originally recognize those differences.
(You can&apos;t illustlate well, if you copy  an incorrect image with a paper.)&lt;/p&gt;
&lt;p&gt;After I understand this point, I did trace some icons and sketching in order to understand how cool icon is drawn.&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-draft-1.png&quot; width=&quot;300&quot; alt=&quot;アイコンのスケッチ&quot;&gt;
&lt;p&gt;How about? I rolled the paper because I wanted to express the texture of paper.
Now, it seems like harder for a paper, but this goal is not to sketch it well so it&apos;s OK.
For me, this sketch was enough and  I maked icon base on this sketch.&lt;/p&gt;
&lt;p&gt;Besides, Following is too terrible sketch to continue..&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-draft-2.png&quot; width=&quot;300&quot; alt=&quot;„Ç¢„Ç§„Ç≥„É≥„ÅÆÂ§±Êïó„Çπ„Ç±„ÉÉ„ÉÅ&quot;&gt;
&lt;p&gt;What is this? This is like spring roll. I was not going to draw it!
Anyway, let&apos;s enjoy the process with failure.&lt;/p&gt;
&lt;h3 id=&quot;Abstract-the-sketch&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Abstract-the-sketch&quot; aria-label=&quot;Abstract the sketch permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Abstract the sketch&lt;/h3&gt;
&lt;p&gt;Next, you abstract the sketch you drew and it approaching to icon.
Until this, I sketch it with &lt;a href=&quot;https://procreate.art/&quot;&gt;Procreate&lt;/a&gt; so I keep on illustrating with it.&lt;/p&gt;
&lt;p&gt;First, this is a first idea.&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-icon-1.png&quot; width=&quot;300&quot; alt=&quot;アイコンのドラフト&quot;&gt;
&lt;p&gt;This image is colored but I recommend you draw only outline of then abstracted icon with lines and add colors to it after that.
I emphasized the looks rolling up the paper while I was abstracting.&lt;/p&gt;
&lt;p&gt;I thought icon was getting better, but it was a little bit too artisitc.
That was why I gave it finishing touch by using Papyrus&apos;s imaging color.&lt;/p&gt;
&lt;h3 id=&quot;Give-the-abstact-sketch-the-finishing-touch&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Give-the-abstact-sketch-the-finishing-touch&quot; aria-label=&quot;Give the abstact sketch the finishing touch permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Give the abstact sketch the finishing touch&lt;/h3&gt;
&lt;p&gt;If you can make icon you are satisfied, you can skip this process.
However, I needed to organize it with Illustlator.&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/icon-list.png&quot; width=&quot;300&quot; alt=&quot;アイコンの清書&quot;&gt;
&lt;p&gt;This is final version.&lt;/p&gt;
&lt;p&gt;I wanted to compated between some sort of version so I made difference patterns&apos; icons.
Finally, I picked up upper left one. I liked black one though, it&apos;s far from application theme so I didn&apos;t choose.&lt;/p&gt;
&lt;h3 id=&quot;Done&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Done&quot; aria-label=&quot;Done permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Done!&lt;/h3&gt;
&lt;p&gt;When you finished, export your favourite icon.
As for now, I show you icons of before and after.&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/before-after.png&quot; width=&quot;300&quot; alt=&quot;アイコンの比較&quot;&gt;
&lt;p&gt;Final version was daramaticaly changed from the original version I sketched thouhgh, you would be able to clear
your image about icon if you sketched before that.&lt;/p&gt;
&lt;h2 id=&quot;Wrap-Up&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Wrap-Up&quot; aria-label=&quot;Wrap Up permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Wrap Up&lt;/h2&gt;
&lt;p&gt;This is way I din&apos;t write about programming at all though, I&apos;m glad if this article help your project and process of designing icon.&lt;/p&gt;
&lt;p&gt;Papyrus is implemented by  some interesting technologies such as React, TypeScript, Electron, Go and GraphQL.
So, I&apos;m going to write arrticles on the theme of them some time.&lt;/p&gt;
&lt;p&gt;Thank you!&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/thumbnail.en.png</thumbnailUrl><language>en</language></item><item><title><![CDATA[デザイン実務経験ゼロのエンジニアが個人開発でのアイコンの作り方を考える]]></title><description><![CDATA[こちらは個人開発 Advent Calendar 2019の1…]]></description><link>https://ver-1-0.net/blog/2019/12/06/how-to-create-logo-for-private-project</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/12/06/how-to-create-logo-for-private-project</guid><pubDate>Fri, 06 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;こちらは&lt;a href=&quot;https://qiita.com/advent-calendar/2019/private-development&quot;&gt;個人開発 Advent Calendar 2019&lt;/a&gt;の16日目の投稿になります。&lt;/p&gt;
&lt;p&gt;個人開発とのことで技術的なところを書く方がほとんどかと思うので私の方では、
個人サービスを作る時のアイコンの作り方について書いて行きます。&lt;/p&gt;
&lt;h2 id=&quot;はじめに&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB&quot; aria-label=&quot;はじめに permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;はじめに&lt;/h2&gt;
&lt;h3 id=&quot;自己紹介&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B&quot; aria-label=&quot;自己紹介 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;自己紹介&lt;/h3&gt;
&lt;p&gt;私自身デザイナーの経験があったりするわけではなく、最初はRailsから始まり、徐々にReactも触るようになり、
結果的にフルスタックっぽい形でサーバからフロント、React Nativeなどを触りながらフリーランスとしてお仕事させて頂いています。&lt;/p&gt;
&lt;p&gt;またその傍ら&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://papyrus-app.org/&quot;&gt;PaPyrus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;という個人アプリを開発しています。&lt;/p&gt;
&lt;a href=&quot;https://papyrus-app.org/&quot;&gt;
  &lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/wallpaper.png&quot; alt=&quot;papyrus&quot; width=&quot;400px&quot;&gt;
&lt;/a&gt;
&lt;p&gt;こちらのアプリを作るまでにもいくつか自分でサービスを作って公開してみたことがあるのですが、
やっぱり機能の実装に手が回らないのと、そもそもデザインの基礎的なところがかけていたりして、
どうもいい感じのイケてるアイコンを作ることができませんでした。&lt;/p&gt;
&lt;p&gt;ただ、今回のサービスは個人的に知り合いのデザイナーさんのアドバイスを元に「いい感じのアイコンができた！」という手応えがあったので、
アイコンを作るまでのプロセスについてまとめていこうと思います。この手順さえ守れば誰でも思い通りのアイコンが作れる！というものではないですが、
他で個人開発をされる方の参考になればという形です。&lt;/p&gt;
&lt;h3 id=&quot;PaPyrusについて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#PaPyrus%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;PaPyrusについて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PaPyrusについて&lt;/h3&gt;
&lt;p&gt;現在開発中の&lt;a href=&quot;https://papyrus-app.org/&quot;&gt;PaPyrus&lt;/a&gt;はElectronで開発されたMac上で動作する(今のところMacでしか動作確認できていません）マークダウンメモアプリです。&lt;/p&gt;
&lt;p&gt;メモアプリというと「ノートを整理」する機能がついているものが普通かと思うのですが、
ズボラな私は&lt;/p&gt;
&lt;p&gt;「ノートを書くのは良いもののノートが整理できない」&lt;/p&gt;
&lt;p&gt;という問題に頭を抱えていました。&lt;/p&gt;
&lt;p&gt;ブログの下書きのようなものはEvernoteやInkdrop, Boostnoteなどなど世にある優秀なメモアプリで十分対応できるのですが、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;その日のタスクリストを書き連ねる&lt;/li&gt;
&lt;li&gt;長いコマンドをコピペしてのこしておく&lt;/li&gt;
&lt;li&gt;メッセージの下書き&lt;/li&gt;
&lt;li&gt;ログの一部をコピペ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などなど、&lt;strong&gt;寿命の短いメモ&lt;/strong&gt;をこれらのメモアプリに残すとたちまちゴミノートが溜まっていってしまうので、
これらのメモアプリとは別に自分には、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「落書きをしたりアイデアをまとめる裏紙」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;みたいなアプリが必要でした。&lt;/p&gt;
&lt;p&gt;これに一番近いアプリがMacの&lt;strong&gt;stickies&lt;/strong&gt;で、しばらくこれをつかっていたのですがstickiesはマークダウンが使えないので、&lt;/p&gt;
&lt;p&gt;「ちょっと機能を足したアプリが欲しい・・・」&lt;/p&gt;
&lt;p&gt;ということで&lt;strong&gt;stickiesにマークダウンを足した付箋型メモアプリ&lt;/strong&gt;を作りました。&lt;/p&gt;
&lt;p&gt;ベータ版を公開中で会員登録をして頂ければアプリをダウンロードして使って頂けます。
まだまだ改善の余地の多いアプリですが、興味あれば触っていただけると嬉しいです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h3 id=&quot;PaPyrusのアイコン&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#PaPyrus%E3%81%AE%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3&quot; aria-label=&quot;PaPyrusのアイコン permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PaPyrusのアイコン&lt;/h3&gt;
&lt;p&gt;前をきはこれぐらいにして、早速アイコンの話に移ります。
PaPyrusはデザインも実装も自分でやっているのですが、もちろんアイコンも自分がデザインしました。
そんなPaPyrusのアイコンはこちらです。&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/icon.png&quot; width=&quot;300&quot; alt=&quot;papyrus icon&quot;&gt;
&lt;p&gt;どうですかね？&lt;/p&gt;
&lt;p&gt;これまでに数件個人サービスのようなものを作ってみたことがあるのですが、アイコンがどうしてもみていられないほど
ダサくなってしまっていました。そんな中で、今回のPaPyrusのアイコンは個人的にベストな出来だったのと、「アイコンってこうやって作るのね」みたいな
部分がぼんやり見えたので、ここで言語化しておくことにしました。&lt;/p&gt;
&lt;h2 id=&quot;個人サービスのアイコンの作り方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%80%8B%E4%BA%BA%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9&quot; aria-label=&quot;個人サービスのアイコンの作り方 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;個人サービスのアイコンの作り方&lt;/h2&gt;
&lt;p&gt;今回はPaPyrusのアイコンを作るにあたり、アプリのデザインに見合ったカッコいいロゴを作りたいということで、
知り合いのデザイナーさんにアイコンの作り方を相談しました。
そのアドバイス+一部ググった内容+をまとめると下記のような手順になります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;アイコンの元になる対象物を決める&lt;/li&gt;
&lt;li&gt;対象物をスケッチ&lt;/li&gt;
&lt;li&gt;スケッチを抽象化&lt;/li&gt;
&lt;li&gt;抽象化したスケッチをもとに清書&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;アイコンの元になる対象物を決める&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E3%81%AE%E5%85%83%E3%81%AB%E3%81%AA%E3%82%8B%E5%AF%BE%E8%B1%A1%E7%89%A9%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B&quot; aria-label=&quot;アイコンの元になる対象物を決める permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;アイコンの元になる対象物を決める&lt;/h3&gt;
&lt;p&gt;これはほぼ、ググった内容と試行錯誤の結果から考えついたものですが、まずはじめにサービスの元となるイメージから対象となる物を決めます。&lt;/p&gt;
&lt;p&gt;今回のPaPyrusは、名前の通り「ペーパー（紙）」のイメージがあったのでアイコンにする対象物は、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「紙」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;にしました。&lt;/p&gt;
&lt;p&gt;Evernoteのロゴはゾウさんのイメージがありますが、左上の部分に紙をめくったようなパーツがあるので「象+紙」をロゴにしていますし、
Appleは実直に「りんご」を書いていますし、Sketchはなんでかわからないですが、「ダイアモンドっぽいもの」を書いていますね。
Slackのロゴは何をイメージして書かれているのかわからないですが今のアイコンは花っぽいですし、初期の頃は「シャープ」を抽象化しているようにみえます。&lt;/p&gt;
&lt;p&gt;このようにして最初の工程はどういった物体を元にアイコンを作るのかと決めるというものです。
Evertnoteのように、「象+紙」みたいにモチーフを複数決めて組み合わせるのも面白そうですが、慣れないうちは一つにきめてやるのがよいでしょう。
いずれにせよ、モチーフを二つ以上にする場合は、後の工程でひとつずつ物体をスケッチするとそれぞれを組み合わせる時にアイディアのイメージがつきやすいように思います。&lt;/p&gt;
&lt;h3 id=&quot;対象物をスケッチ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AF%BE%E8%B1%A1%E7%89%A9%E3%82%92%E3%82%B9%E3%82%B1%E3%83%83%E3%83%81&quot; aria-label=&quot;対象物をスケッチ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;対象物をスケッチ&lt;/h3&gt;
&lt;p&gt;ここが前述のデザイナーさんに聞いて一番驚い部分なのですが、
デザイナーさん曰く&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「アイコンを作るときはイラレとかを先に開くのではなく、まずスケッチからですね」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;そういえば確かに、これまではアイコンを作るためにいきなりイラレで書いて細部が書ききれずイマイチなものになっていた。。&lt;/p&gt;
&lt;p&gt;スケッチなんて、高校の時の美術の時間にやった時以来くらいなので何から初めてよいのかわからなかったのですが、
ものは試しようなのでとりあえず、スケッチってどんなものだっけという感じで定番の手のスケッチを書いてみました。&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-sketch.png&quot; width=&quot;300&quot; alt=&quot;手のスケッチ&quot;&gt;
&lt;p&gt;スケッチのやり方なんてわからないので文明の利器に頼って、Youtubeでスケッチのやり方をみたりしながらスケッチしてみました。&lt;/p&gt;
&lt;p&gt;しかし、この手のスケッチを終えてみたところで疑問がわきます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「これで良いアイコンができるのか？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;そんな不安を抱えながら、また別の機会にデザイナーさんにスケッチのやり方や意識する点を聞いてみたのですが、&lt;/p&gt;
&lt;p&gt;スケッチを行う目的は&lt;strong&gt;観察力を磨く&lt;/strong&gt;ためらしいです。&lt;/p&gt;
&lt;p&gt;なるほど手をスケッチしている時も、手がどういう形なのか光の当たり方がどういう感じなのかということのを感じとれないと
どうもうまく書くことができません。(物体を紙に写している時のイメージが間違っていたら、そりゃうまくかけないですよね。)&lt;/p&gt;
&lt;p&gt;このことがわかってから、そもそもイケてるアイコンがどうやって書かれているかを理解するため、
アイコンをトレースしてみたり、スケッチしてみたりしました。&lt;/p&gt;
&lt;p&gt;ある程度経験値が溜まったところでいよいよ前工程で選んだ「紙」を書いてみようといことで書いてみました。&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-draft-1.png&quot; width=&quot;300&quot; alt=&quot;アイコンのスケッチ&quot;&gt;
&lt;p&gt;どうでしょう？紙感を出すためにちょっと巻いてみました。
今見ると紙にしては、ちょっと固そうですが、今回はうまくスケッチすることが目的ではないのでまぁいいでしょう。
自分なりに合格点だったのでこれをもとに次工程で抽象化させてアイコンを作っていきます。&lt;/p&gt;
&lt;p&gt;ちなみに、最初に紙を書いた時に自分の下手さに辟易して途中でやめてしまったものがこちらです。&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-draft-2.png&quot; width=&quot;300&quot; alt=&quot;アイコンの失敗スケッチ&quot;&gt;
&lt;p&gt;なんですかねこれ笑。紙感より春巻き感の方が強く出てしまっています。
まぁこんな感じで失敗もしつつ、工程を楽しんでやれると良いかと思います。笑&lt;/p&gt;
&lt;h3 id=&quot;スケッチを抽象化&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%82%B1%E3%83%83%E3%83%81%E3%82%92%E6%8A%BD%E8%B1%A1%E5%8C%96&quot; aria-label=&quot;スケッチを抽象化 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スケッチを抽象化&lt;/h3&gt;
&lt;p&gt;次の工程では先ほどのスケッチを抽象化して、アイコンに近づけていきます。
これまでのスケッチはiPadアプリの&lt;a href=&quot;https://procreate.art/&quot;&gt;Procreate&lt;/a&gt;を使って書いていたので、引き続きProcreateで作業していきます。&lt;/p&gt;
&lt;p&gt;最初の案がこちらです。&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-icon-1.png&quot; width=&quot;300&quot; alt=&quot;アイコンのドラフト&quot;&gt;
&lt;p&gt;これは色ついてしまっているのですが、最初は線だけ書く感じで抽象化されたものを書いてその後に必要な色を足していきました。
抽象化する時には巻いている感じを強くデフォルメして書いていきました。&lt;/p&gt;
&lt;p&gt;これでアイコンのイメージはだいぶかたまってきたのですが、色の感じがアーティスティックすぎたので、
Papyrusのイメージカラーを使ってまとめていきました。&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/procreate-icon-2.png&quot; width=&quot;300&quot; alt=&quot;アイコンのドラフト&quot;&gt;
&lt;p&gt;ここまでで大分イメージついてきたのですが、線がずれていたりするので微修正はイラレでやっていくことにしました。&lt;/p&gt;
&lt;h3 id=&quot;清書&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%B8%85%E6%9B%B8&quot; aria-label=&quot;清書 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;清書&lt;/h3&gt;
&lt;p&gt;前段階できっちりアイコンとして使えるものができてしまえばそのままで良いのですが、僕の場合はイラレで清書しました。&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/icon-list.png&quot; width=&quot;300&quot; alt=&quot;アイコンの清書&quot;&gt;
&lt;p&gt;これが最終的に清書したものです。&lt;/p&gt;
&lt;p&gt;色々な色で試してみたかったので、何パターンか用意して最終的に一番しっくりする左上のものをアイコンに採用するよう決めました。&lt;/p&gt;
&lt;p&gt;黒も個人的には渋くて好きなのですが、ちょっとアプリのイメージとかけ離れているこちらの採用は見送りました。&lt;/p&gt;
&lt;h3 id=&quot;完成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%8C%E6%88%90&quot; aria-label=&quot;完成 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;完成&lt;/h3&gt;
&lt;p&gt;清書がおわったら気に入ったアイコンを書き出して完了です。
最後にスケッチしたものと最終版を並べて載せておきます。&lt;/p&gt;
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/before-after.png&quot; width=&quot;300&quot; alt=&quot;アイコンの比較&quot;&gt;
&lt;p&gt;スケッチしたものと最終的なアイコンのところで大分イメージが変わっていますが、元のスケッチをやっておくと
抽象化やデフォルメをする時のアイデアの土台や出発地点が明確になるので一度試してみていただけると良いと思います。&lt;/p&gt;
&lt;p&gt;逆に日頃落書きしたりしてある程度日常のものをささっとかけてしまう人は事前にスケッチしたりする必要もないのかもしれません。&lt;/p&gt;
&lt;h2 id=&quot;さいごに&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%95%E3%81%84%E3%81%94%E3%81%AB&quot; aria-label=&quot;さいごに permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;さいごに&lt;/h2&gt;
&lt;p&gt;というわけで、プログラミング的要素ゼロの内容になりましたが、この記事が個人開発の手助けになれれば嬉しいです。&lt;/p&gt;
&lt;p&gt;PaPyrus自体、React、TypeScript、Electron、Go、GraphQLを使っていて技術的なトピックでも記事がかけそうな技術を使っているので、
そちらについてもおいおい記事がかければなと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/12/20191206_how-to-create-logo-for-private-project/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[フリーランスを退職します。カナダ行きます。]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2019/10/26/move-to-canada-to-find-job</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/10/26/move-to-canada-to-find-job</guid><pubDate>Sat, 26 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;フリーランスを退職します。というタイトルで書き出し始めましたが、知っての通りフリーランスに退職はありません。&lt;/p&gt;
&lt;p&gt;一つの区切りとして、退職エントリみたいなものを書いてみたかったのですが、
どこかの会社に属しているわけもなく退職もできないのでこういった形で無理やり退職エントリっぽい感じで書いてみることとしました。&lt;/p&gt;
&lt;h2 id=&quot;で何するの&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%A7%E4%BD%95%E3%81%99%E3%82%8B%E3%81%AE&quot; aria-label=&quot;で何するの permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;で、何するの？&lt;/h2&gt;
&lt;p&gt;一言でいうと、&lt;strong&gt;カナダでの転職&lt;/strong&gt;を目指してしばらくカナダで生活します。
当面はカナダの学生として勉強しながら、就職先を探します。&lt;/p&gt;
&lt;p&gt;冒頭フリーランスやめますと書きましたが、実際のところでいうと学生ビザでもある程度の仕事はできるので日本の仕事をある程度行いつつ学生として学校にも通うなんて感じです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;なんでカナダ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%AA%E3%82%93%E3%81%A7%E3%82%AB%E3%83%8A%E3%83%80&quot; aria-label=&quot;なんでカナダ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;なんで？カナダ？&lt;/h2&gt;
&lt;p&gt;そろそろ30歳がみえてきてこれからどうしようかなぁって考えた場合にまぁ一度しかない人生&lt;strong&gt;ずっーと日本で生活して、仕事してというのがどうも勿体無く感じた&lt;/strong&gt;というのがありなんとなく海外で働いてみたいな。っていうのがあったのと&lt;/p&gt;
&lt;p&gt;やっぱりエンジニアとして&lt;strong&gt;英語ができる&lt;/strong&gt;というメリットがでかいと思ったので、英語圏の企業に就職してガッツリ英語でのコミュニケーション力を磨いたり、むこうの仕事の進め方みたいなのを体感として知りたいなと思ったからです。&lt;/p&gt;
&lt;p&gt;カナダじゃなきゃダメというわけではないのですが、英語圏のエンジニアがどういう仕事をしているかというのが知りたかったので、そんなかでビザのとりやすさとか前例があるとかとかでカナダに決めました。&lt;/p&gt;
&lt;p&gt;今回のカナダ渡航がうまくいけば、
そのあとアメリカやドイツなどなど他の面白そうな国で働くという選択肢や日本とカナダ半々での生活などなど選択肢ができて広がりそうだったので、
日本で単価や売上の上げ下げに執心しながら長くフリーランスとして働くよりは色々と面白い事ができそうだと思い決断しました。&lt;/p&gt;
&lt;h2 id=&quot;これまでのこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%93%E3%82%8C%E3%81%BE%E3%81%A7%E3%81%AE%E3%81%93%E3%81%A8&quot; aria-label=&quot;これまでのこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;これまでのこと&lt;/h2&gt;
&lt;p&gt;このブログは2年くらい(正確なところはあまりわからない)運営してきて、一定程度読んでくれる人も増えてきましたがまぁ多くは初めて訪れる方が大半かと思います。&lt;/p&gt;
&lt;p&gt;そういった方のためにちょっとした紹介をしておくと
もともと文系の四年生大学を出て体育会とかやってたのですが、急にプログラミングに興味を持ちSIerを経てWebエンジニアとなり、
フリーランスとなりという感じでやってきました。&lt;/p&gt;
&lt;p&gt;一社目でのSIerでは、
プログラミングがしたかったのにご多聞に漏れずエクセルメインのお仕事だったので、
すきをみてはVBAでマクロ組んだり、なんとかJavaでのパッケージの開発プロジェクトに入り込んだりしていたのですが、
海外で働くのがその会社でできる一番楽しそうなことだったので、一年目から希望を出し続けていたら二年目で実現しそうになりました。&lt;/p&gt;
&lt;p&gt;が、インドネシア駐在のプレ期間に社長に「お前の希望でいかせてやるんだからごちゃごちゃ言うな」的な事を言われ愛想を、つかして退職し、&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/04/10/lookback-first-career&quot;&gt;4月なので新社会人に向けてフリーランスがファーストキャリアを振り返ってみた&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;二社目では、Webエンジニアとして就職できた事業会社では、元々いたエンジニアが全て辞めており、ビジネス側の人に「このシステムどうやって使うんですかー？」
と自分のメンテナンスするシステムの使い方を聞き回りながらなんとか仕事を回していました。&lt;/p&gt;
&lt;p&gt;事業会社で働かれれいたエンジニアの方ならわかってくれるとは思うのですが、
もともとITじゃない会社のエンジニアをやっているとシステムの修正依頼の進め方がめちゃくちゃだったり、
エンジニアにPCのセットアップ頼んだりとかよくわからない雑務までエンジニアチームで吸収する感じで仕事が多く
効率もよくないので毎日遅くまで残業して、だいたい残業80時間くらいやっているのが日常的に続いていました。&lt;/p&gt;
&lt;p&gt;技術自体もレガシーでちょっとこのままやっているとヤバイなというのは感じながら仕事をしているとふと、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「年収400万ちょいで働いてるってことは自分の人生の価値が400万ってこと？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ということに疑問を抱き働き方や年収を選べるフリーランスになることをきめました。&lt;/p&gt;
&lt;p&gt;幸運にも友人のエージェントの紹介で入り込めた最初の現場が良く、最近のトレンドにのった開発というものに触れ、
フリーランスとしても直接仕事が取れるようになり、だんだんと短歌も上がりこんな感じでリモートしながら働けるようになりました。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2018/10/14/full-remote-engineer&quot;&gt;フルリモートエンジニアになったので、これまでの経緯をまとめてみた。&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/02/04/summary-of-gadget-on-the-desk&quot;&gt;リモートワークするエンジニアがデスク周りを充実させるために購入したものまとめ&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id=&quot;20代を振り返って&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#20%E4%BB%A3%E3%82%92%E6%8C%AF%E3%82%8A%E8%BF%94%E3%81%A3%E3%81%A6&quot; aria-label=&quot;20代を振り返って permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;20代を振り返って&lt;/h2&gt;
&lt;p&gt;まだまだ20代ではあるのですが、もう30歳もすぐそこなので20代についてぼーっと考えることが増えてきているのですが、20代をひとことで言うと&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「生活に対する日本社会の一般通念からの脱却」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;をしてたのかなぁ。なんて思います。&lt;/p&gt;
&lt;p&gt;時代は変わったといえど、まだまだやっぱり日本には&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仕事に大切なのは我慢&lt;/li&gt;
&lt;li&gt;職場は当たり前のように通勤電車に揺られてやったことさたどり着くオフィス&lt;/li&gt;
&lt;li&gt;この職種でこの年代だといくらくらいの年収が相場&lt;/li&gt;
&lt;li&gt;貯金が大事&lt;/li&gt;
&lt;li&gt;長期休みはお盆か、正月&lt;/li&gt;
&lt;li&gt;働く時間は9時〜17時、週5日勤務&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という色々な枠があります。&lt;/p&gt;
&lt;p&gt;フリーランスは学生の頃からなりたいと思っていた(さっきはふと思いついたかのように書きましたがぼんやりと学生の頃から憧れてました）のですが、
フリーランスにはこういったしがらみから解放されていて仕事、仕事場、働く時間、報酬、住む地域などが自由なイメージがあり、ここに惹かれて、これらのしがらみから自由になるために必死こいて色々と行動してきたのかなぁと思ってます。&lt;/p&gt;
&lt;p&gt;当然フリーランスなので、能力が低かったり、十分な価値を発揮できてないと会社員以上に不自由になることはあり得るのかもしれませんが、フリーランスの方が良くも悪くもチャンスがあるというのが適当かと思います。&lt;/p&gt;
&lt;p&gt;そうして頑張ってきた結果、今今の短期的な評価でいうと、
仕事自体は自分の好きなプログラミング・Web開発を仕事にできてますし、仕事場は基本リモート(だいたい家でやってるけど)、仕事の時間も自由、報酬もありがたいことに会社員時代の倍以上という結果で良い20代を過ごせたと思ってます。&lt;/p&gt;
&lt;h2 id=&quot;さらなる自由へ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%95%E3%82%89%E3%81%AA%E3%82%8B%E8%87%AA%E7%94%B1%E3%81%B8&quot; aria-label=&quot;さらなる自由へ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;さらなる自由へ&lt;/h2&gt;
&lt;p&gt;ということでひたすら自由を追い求めてきた僕なのですが、まだまだ不自由なこともたくさんあります。&lt;/p&gt;
&lt;p&gt;金銭的な不自由でいうとやはりまだまだ&lt;strong&gt;単価×稼働時間＝収入&lt;/strong&gt;の式から抜け出せず、一定程度の時間拘束されるので行動が制限されます。&lt;/p&gt;
&lt;p&gt;さらに、言語的な不自由も常日頃感じており、フリーランスが自由といっても小さな島国の中だけで&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;英語で書かれた情報を日本語に訳された情報を元に行動して(英語のドキュメントと読みますが理解スピードが速いのは圧倒的に日本語)&lt;/li&gt;
&lt;li&gt;読み手が多いはずの英語でブログを書いてない&lt;/li&gt;
&lt;li&gt;国内の中にしかコネクションがない&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;といった所に不満があります。&lt;/p&gt;
&lt;p&gt;その他まだまだしがらみはありますが今回のカナダ渡航ではこの言語的(地理的)障壁を自分からなくすことができればさらに自由になれるのかなと思ってます。&lt;/p&gt;
&lt;p&gt;そのために、カナダでは現地の企業に所属して英語でコミュニケーションをとり、日本で行っていたのと同レベル以上の仕事ができればここがクリアになるんじゃないかと思って今回の決断に踏み切りました。&lt;/p&gt;
&lt;h2 id=&quot;フリーランスエンジニアとして感じた閉塞感&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E3%81%97%E3%81%A6%E6%84%9F%E3%81%98%E3%81%9F%E9%96%89%E5%A1%9E%E6%84%9F&quot; aria-label=&quot;フリーランスエンジニアとして感じた閉塞感 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フリーランスエンジニアとして感じた閉塞感&lt;/h2&gt;
&lt;p&gt;ここまでだと割とポジティブな事しか話してない感じがあるので、リアルな話としてフリーランスとして2年程度やってきて、&lt;strong&gt;閉塞感やけん怠感&lt;/strong&gt;を感じていたのも事実なのでそこについても触れておきます。&lt;/p&gt;
&lt;p&gt;フリーランスを二年やって感じた負の部分はまとめるとこれら三つになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;フリーランスの立場が弱い&lt;/li&gt;
&lt;li&gt;普通に仕事があれば、ボラティリティの少ない安定した日々&lt;/li&gt;
&lt;li&gt;将来的な市場価値の停滞の可能性&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;立場が弱い&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%AB%8B%E5%A0%B4%E3%81%8C%E5%BC%B1%E3%81%84&quot; aria-label=&quot;立場が弱い permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;立場が弱い&lt;/h3&gt;
&lt;p&gt;普通に仕事している分にはあまり不満はないし、職場内での説得力の持たせ方みたいなものは個人でなんとかする範囲
だと思うので良いのですが、フリーランスとなるとやっぱり商流の下の方に位置せざるをえず、普通に仕事をしていると
「そもそも何をつくるのか？」みたいな部分にあまり影響を与えることができません。&lt;/p&gt;
&lt;p&gt;自分のいない会議で決まってしまうことをなんとか覆そうとかなると結構な労力が必要で、
自分の納得のいくもの（チームにとって良いアウトプット）を作り込めるかというとやっぱり難しかったりします。
ちゃんとサービスを作り込みたいなら、長期間現場にいてとなると思うのですが、そうすると「正社員でよくない？」となります。&lt;/p&gt;
&lt;p&gt;仕事面での立場の弱さもありますが客観的に見て、フリーランスを一企業としてみると売り上げよくて1000万円程度の超零細企業です。&lt;/p&gt;
&lt;p&gt;フリーランスが自由であるのは、その労働形態的に自由という側面もある一方、膨大な企業があるなかでほうっておいても
そこまで問題ない規模の企業だからほっておかれているという側面もある気がしており、&lt;/p&gt;
&lt;p&gt;契約先の経営状況が悪くなったり、業界全体として開発費が削減された場合に削減の対象となるのは
業務委託で契約している人たちにるかと思うので総合的に立場が弱いなというのはフリーランスやりながら常に考えてはいました。&lt;/p&gt;
&lt;h3 id=&quot;ボラティリティの少ない安定した日々&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9C%E3%83%A9%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3%E3%81%AE%E5%B0%91%E3%81%AA%E3%81%84%E5%AE%89%E5%AE%9A%E3%81%97%E3%81%9F%E6%97%A5%E3%80%85&quot; aria-label=&quot;ボラティリティの少ない安定した日々 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ボラティリティの少ない安定した日々&lt;/h3&gt;
&lt;p&gt;なにも乱降下の激しいジェットコースターのような日々を送りたいわけではないのですが、今のエンジニア市場だと
需要がかなりあるので一定程度のスキルがあって現場常駐も気にならなければ普通に会社員以上の収入で技術書や
サーバ代は経費計上という感じでそこそこ良い暮らしはできてしまいます。&lt;/p&gt;
&lt;p&gt;納品ベースの契約をしていたりするとこれからは外れそうですが、月の稼働ベースで契約をしていると本当に会社員と
変わらない感じで安定した日々を送ることができます。&lt;/p&gt;
&lt;p&gt;あとにも書きますが、やっぱりゆったり過ごして変化もないと劇的なスキルの変化もないので、
年をとるにつれて収入が停滞・低下したり、仕事がとれなくなってくるリスクがでかそうで、自分としては何かしなきゃという焦りはありました。&lt;/p&gt;
&lt;h3 id=&quot;将来的な市場価値の停滞の可能性&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%B0%86%E6%9D%A5%E7%9A%84%E3%81%AA%E5%B8%82%E5%A0%B4%E4%BE%A1%E5%80%A4%E3%81%AE%E5%81%9C%E6%BB%9E%E3%81%AE%E5%8F%AF%E8%83%BD%E6%80%A7&quot; aria-label=&quot;将来的な市場価値の停滞の可能性 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;将来的な市場価値の停滞の可能性&lt;/h3&gt;
&lt;p&gt;世間的なながれもあいまって今後フリーランスが増えていくなかで、自分をどう差別化するか考えると今の感じで普通に
開発を続けていてもあまり良い未来は見えそうにありませんでした。&lt;/p&gt;
&lt;p&gt;エンジニアの需要は今後常にあり続けそうですが、5年、10年先の日本経済の停滞等々のリスクを考えた時にこのままの
仕事を続けていて大丈夫かなという不安が常にありました。今は幸い20代でバリバリ働けるので良いのですが、
自分が30代、40代になった時には当然労働力的魅力は落ちるので「はて、どうしたものか？」というのはありました。&lt;/p&gt;
&lt;p&gt; 
 
 &lt;/p&gt;
&lt;p&gt;こうやって書くとこれからフリーランスを目指す人にを脅かすようになってしまうかもしれませんが、短期的な3年程度で
あればこれらのデメリットはあまり気にならないのでやりたい人はどんどんフリーランスに挑戦してみれば良いと思っています。&lt;/p&gt;
&lt;p&gt;ただ、**「会社員時代の何倍の収入！」「自由な働き方！」**みたいなのに気を取られすぎて長期的な視点を失うと３０、４０代で苦しいかな
というのが自分の見立てなのでそれを踏まえてフリーランスに挑戦してみると良いと思います。&lt;/p&gt;
&lt;h2 id=&quot;色々書きましたがしばらくカナダで生活します&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%89%B2%E3%80%85%E6%9B%B8%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F%E3%81%8C%E3%81%97%E3%81%B0%E3%82%89%E3%81%8F%E3%82%AB%E3%83%8A%E3%83%80%E3%81%A7%E7%94%9F%E6%B4%BB%E3%81%97%E3%81%BE%E3%81%99&quot; aria-label=&quot;色々書きましたがしばらくカナダで生活します permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;色々書きましたがしばらくカナダで生活します。&lt;/h2&gt;
&lt;p&gt;ということで、更なる自由とフリーランスとしての閉塞感打破のために暫くカナダで生活します。&lt;/p&gt;
&lt;p&gt;カナダで学校に通いながら、仕事を探すので肩書きは学生ですが空いた時間でこれまで通りフリーランスの仕事もします。&lt;/p&gt;
&lt;p&gt;「フリーランス辞めてないじゃん」と言われればその通りなのですが一つの区切りとして、2年のフリーランス生活を終えてさらにステップアップしたいということで今回の記事を書きました。&lt;/p&gt;
&lt;p&gt;フリーランスの次のステップとして&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;起業する&lt;/li&gt;
&lt;li&gt;会社員に戻る&lt;/li&gt;
&lt;li&gt;専門性を尖らせる&lt;/li&gt;
&lt;li&gt;組織化する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;等々あるかと思いますがこのどれも自分としてはイマイチな選択だったので、20代当初からあった海外で働くという目標に一旦コミットするということにします。&lt;/p&gt;
&lt;p&gt;この目標は達成した後の拡張性も高そうだし、過程も山あり谷ありで楽しめそうなのでひとまず1,2年スパンでの目標達成を目処にやれることをやっていきたいなと思います。
個人的には今まではサラリーマンよりのフリーランスだったので、
フリーランスはフリーランスでもさらに上のステージに立てるようなフリーランスになっていきたいなと思っています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;カナダに行く途中の機内で記事を書き上げましたが、結構な分量になりました。&lt;/p&gt;
&lt;p&gt;色々と書きましたが結局のところ面白そうだからとりあえずやってみるという所がまぁ大半かなという所です。&lt;/p&gt;
&lt;p&gt;収入の話とか、仕事の話とか色々ありますがまぁ一度の人生日本だけで終わるのもったいないよねという所があるのでとりあえずチャレンジしてみます。&lt;/p&gt;
&lt;p&gt;この記事も書きっぱなしは良くないので、定期的な進捗報告やお得な情報等々書いていければと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/10/20191026_move-to-canada-to-find-job/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Request Specでデフォルトのヘッダーを設定する]]></title><description><![CDATA[私がRailsを始めた頃は、rspec…]]></description><link>https://ver-1-0.net/blog/2019/10/06/request-spec-set-header-every-request</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/10/06/request-spec-set-header-every-request</guid><pubDate>Sun, 06 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;私がRailsを始めた頃は、rspecでのコントローラのテストをそのまま書くのが普通ですが、
最近だとコントローラのテストはリクエストスペックが主流のようです。&lt;/p&gt;
&lt;p&gt;そんなことを気にしながらリクエストスペックの設定を進めていると「あれ、これリクエストの
たびに、認証情報などのヘッダ書かないといけないのか？」と思って調べてみたところ、
ちょうど良い方法がわかったのでここにまとめておきます。&lt;/p&gt;
&lt;h2 id=&quot;Request-Specのデフォルトのヘッダーを定義する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Request-Spec%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B&quot; aria-label=&quot;Request Specのデフォルトのヘッダーを定義する permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Request Specのデフォルトのヘッダーを定義する&lt;/h2&gt;
&lt;p&gt;ヘッダをデフォルトで設定するには、requst spec内で呼び出せる、
get, post, patch, put, deleteなどのメソッドをラップしてあげることでspecのファイルごとに毎回
ヘッダを付与する処理を書かなくて済むようにすることができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-head&quot;&gt;RAILS API&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;reqest specの各HTTPメソッドに対応したメソッドはそれぞれ第二引数でheaderを設定することができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;get &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/users/&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;header&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; header&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;なので、このheader部分にラップした関数でデフォルトのヘッダーを付与して楽しちゃおうというのが今回のやり方です。&lt;/p&gt;
&lt;h3 id=&quot;Request-HelperHTTPメソッドのラッパを用意&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Request-HelperHTTP%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E3%83%A9%E3%83%83%E3%83%91%E3%82%92%E7%94%A8%E6%84%8F&quot; aria-label=&quot;Request HelperHTTPメソッドのラッパを用意 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Request Helper(HTTPメソッドのラッパ）を用意&lt;/h3&gt;
&lt;p&gt;まずspec/support配下に下記のようなファイルを用意します。&lt;/p&gt;
&lt;p&gt;spec/support/request_spec_helper.rb&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RequestSpecHelper&lt;/span&gt;
  &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;%i[get post patch put delete head]&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;name&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;define_method&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;to_json&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; default_request_headers&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;merge&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;headers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;define_methodを使ってメタプロしているのでちょっとわかりづらいですが、
実直に書いていくと下記のようになります。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RequestSpecHelper&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;to_json&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; default_request_headers&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;merge&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;headers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;post&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;to_json&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; default_request_headers&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;merge&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;headers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;patch&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;to_json&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; default_request_headers&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;merge&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;headers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;put&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;to_json&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; default_request_headers&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;merge&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;headers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;delete&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;to_json&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; default_request_headers&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;merge&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;headers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;head&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;to_json&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; default_request_headers&lt;span class=&quot;token operator&quot;&gt;&amp;amp;.&lt;/span&gt;merge&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;headers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここでのsuperはもともとのActionDispatch::Integration::RequestHelpersクラスのそれぞれのメソッドをさしています。
コードをよく見るとそれぞれでdefault_request_headersという変数が呼ばれているかと思うのですが、
ここにletなどであらかじめデフォルトの引数を設定しておけばspecファイルの中では&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;post &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/path/to/endpoint&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; params&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;という感じで、認証に使うようなヘッダなど毎回使うものを定義せずにspecを書くことができるようになります。&lt;/p&gt;
&lt;p&gt;このファイルが用意できたらあとは、ファイルを読み込んであげれば良いので、
spec/rails_helper.rbに&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;RSpec&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;configure &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;config&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
   &lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;
  config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt; RequestSpecHelper&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:request&lt;/span&gt;
   &lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;という形でrequest specの時だけ同ファイルを読み込むようにしてあげると上のメソッドが使えるようになります。&lt;/p&gt;
&lt;p&gt;かなり手短にすませましたが、controller specからrequest specに移行するのに必要と思われる手順なのでまとめておきました。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/10/20191006_request-spec-set-header-every-request/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[How to write Circle CI Config 2.1 from basic to advance]]></title><description><![CDATA[Recently, I didn't have a chance to write a lot of config in Cicle CI so far, but I had a chance to touch it at work.
That is why I would…]]></description><link>https://ver-1-0.net/blog/en/2019/09/24/get-start-circle-ci-confg-2-1</link><guid isPermaLink="false">https://ver-1-0.net/blog/en/2019/09/24/get-start-circle-ci-confg-2-1</guid><pubDate>Tue, 24 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently, I didn&apos;t have a chance to write a lot of config in Cicle CI so far, but I had a chance to touch it at work.
That is why I would like to share what I learned there.&lt;/p&gt;
&lt;p&gt;I heard that you can use Github Actions nowadays.
It&apos;s better to compare and contrast these things to see which one is best for your project.
However, Circle CI already was used and I didn&apos;t have any complain about it so I deceided to use it.&lt;/p&gt;
&lt;p&gt;In this case, we had an automated test environment in the current project, but we didn&apos;t have an automated deployment environment
It seems like the deployment procedure is pretty much dependent on the person in charge.
To improve it, we&apos;ve stareted to automate deployments to make the procedure anyone can use.&lt;/p&gt;
&lt;h2 id=&quot;Documentation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Documentation&quot; aria-label=&quot;Documentation permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Documentation.&lt;/h2&gt;
&lt;p&gt;First of all, better material to learn Circle CI is the official documentation, which is pretty well written.
I used that as a reference to automate the deployment process this time.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/docs/ja/2.0/configuration-reference/#section=configuration&quot;&gt;Configure CircleCI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I mean, if you read the documents carefully, you may not have to read much of this article here. LOL!
However, anyway , I&apos;ll try to summarize the documentation and explain it in a way that makes it easier to understand.&lt;/p&gt;
&lt;p&gt;What I&apos;ll be explaining is the 2.1 version of config, which is different from 2.0.&lt;/p&gt;
&lt;p&gt;The 2.1 version of config is different from 2.0, for example you can use &quot;Command&quot;, &quot;Executor&quot; and so on.&lt;/p&gt;
&lt;h2 id=&quot;Summary-of-concepts-to-keep-in-mind-in-Circle-CI&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Summary-of-concepts-to-keep-in-mind-in-Circle-CI&quot; aria-label=&quot;Summary of concepts to keep in mind in Circle CI permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Summary of concepts to keep in mind in Circle CI&lt;/h2&gt;
&lt;p&gt;First of all, I will talk outline of Circle CI.
Circle CI can write CI configuration in .circleci/config.yml from the project&apos;s root directory, and define the processes to be executed in CI.&lt;/p&gt;
&lt;h3 id=&quot;Job-and-Workflow&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Job-and-Workflow&quot; aria-label=&quot;Job and Workflow permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Job and Workflow.&lt;/h3&gt;
&lt;p&gt;In the following, we will explain the concepts necessary to define the process, but as a brief explanation, there is a basic unit of the process called &lt;strong&gt;Job&lt;/strong&gt;, which is
We&apos;ll take that in turn and define a single &lt;strong&gt;Workflow&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Some of you may not understand what a &lt;strong&gt;Workflow&lt;/strong&gt; is, but it is the flow of the entire process as translated.&lt;/p&gt;
&lt;p&gt;In CI,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run the test code.&lt;/li&gt;
&lt;li&gt;make sure it passes the test and deploy&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Workflow is this flow of 1 and 2.&lt;/p&gt;
&lt;p&gt;In the real world, it would be more complicated because it is necessary to test and deploy the source of the API server, test and deploy the source of the front end, and so on.
But the basic concept is the same.&lt;/p&gt;
&lt;p&gt;In this example, the&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Testing of the API server&lt;/li&gt;
&lt;li&gt;Deploying the API server&lt;/li&gt;
&lt;li&gt;Test the frontend&lt;/li&gt;
&lt;li&gt;Deploying the frontend code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The workflow consists of four jobs (1), and the order in which these jobs are executed is the workflow.&lt;/p&gt;
&lt;p&gt;If you write this in a simple yaml, it looks like the following.こめ&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is not the correct format, so please follow the official documentation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The following is an example of a simple yaml file.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2.1&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;jobs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;test
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Test the API server&apos;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;api-deploy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Deploy the API server&apos;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;front-test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Test the frontend&apos;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;front-deploy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Deploy the frontend&apos;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;workflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;test-and-deploy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;jobs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;test
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; front&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;test
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;deploy
            &lt;span class=&quot;token key atrule&quot;&gt;requires&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;test
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; front&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;deploy
            &lt;span class=&quot;token key atrule&quot;&gt;requires&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;deploy
              &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;front&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;In the workflow section, there is a section called &quot;requires&quot;.
You need to write the job. In short, you need to write the dependent tasks for the job.&lt;/p&gt;
&lt;p&gt;If you don&apos;t write the job &lt;code class=&quot;language-text&quot;&gt;requires&lt;/code&gt;, CirecleCI will execute the job without paying attention to the order of the tasks, so you need to write the requires in
It&apos;s also possible that it will be deployed (depending on the number of parallelism). (Depending on the number of parallels)&lt;/p&gt;
&lt;p&gt;In this way, Workflow is a high-level concept for Job and if you understand thes small/large relationship of some concepts,
you can learn how to set up the configuration more easily.&lt;/p&gt;
&lt;h3 id=&quot;Steps&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Steps&quot; aria-label=&quot;Steps permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Steps.&lt;/h3&gt;
&lt;p&gt;Now that we have the definition down, let&apos;s look at the details further.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Job&lt;/strong&gt; consists of &lt;strong&gt;Steps&lt;/strong&gt; and we describe the actual process in Job in the config file.
In Steps, you can execute shell commands and just describe the process in these steps.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;jobs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;api-test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Test the API server&apos;&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; checkout
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Install a library&apos;&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /var/spool
            &lt;span class=&quot;token key atrule&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; bundle install
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Run a test&apos;&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; bundle exec rspec
            bundle exec rspec&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I&apos;ll leave the details to the official documentation, but you can use the &lt;code class=&quot;language-text&quot;&gt;When clause&lt;/code&gt; to control things like executing a command if the previous command fails
and there are also commands for checking out of the repository.&lt;/p&gt;
&lt;p&gt;The actual execution of the commands is mainly done with the run command, but you can specify a working directory or define environment variables that are valid only in run clause.&lt;/p&gt;
&lt;h3 id=&quot;Commandavailable-since-21&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Commandavailable-since-21&quot; aria-label=&quot;Commandavailable since 21 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Command(available since 2.1)&lt;/h3&gt;
&lt;p&gt;Command is one of the features from 2.1 and it makes you be able to commonize Steps with Command.
For example, in many cases, you may want to activate the cache because it is redundant to install a package for every test.&lt;/p&gt;
&lt;p&gt;In order to do so.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Check if the cache exists&lt;/li&gt;
&lt;li&gt;Install the package (use the cache if you have it).&lt;/li&gt;
&lt;li&gt;Overwrite the cache with the latest state.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;but it&apos;s too tedious to copy and paste this process for each job, so we&apos;ll define this process as a Command and reuse it.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;commands&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;package-install&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Package installation with cache&apos;&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; restore&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;cache
        &lt;span class=&quot;token key atrule&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; v1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;server&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;checksum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &apos;Gemfile.lock &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; v1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;server
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; run
        &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;bundle install&apos;&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; bundle install vender/bundle
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; save&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;cache
        &lt;span class=&quot;token key atrule&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; v1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;server&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;checksum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &apos;Gemfile.lock &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; v1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;server
        &lt;span class=&quot;token key atrule&quot;&gt;paths&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; vender/bundle
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you write the package installation commands in advance,
you don&apos;t need to write a process, just call the command, and you can make a DRY configuration.&lt;/p&gt;
&lt;p&gt;In addition, you can also pass parameters to this command in the form of parameters to make it easier to create reusable commands.&lt;/p&gt;
&lt;h3 id=&quot;Executors-available-since-21&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Executors-available-since-21&quot; aria-label=&quot;Executors available since 21 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Executors (available since 2.1)&lt;/h3&gt;
&lt;p&gt;Executors are for reusing your environment; you can create a docker image and use it in your environment.&lt;/p&gt;
&lt;h3 id=&quot;Orbsavailable-since-21&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Orbsavailable-since-21&quot; aria-label=&quot;Orbsavailable since 21 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Orbs(available since 2.1)&lt;/h3&gt;
&lt;p&gt;The word &quot;orbs&quot; may be unfamiliar to you, but in essence it is a library.
Once you write configuration as &quot;orbs&quot; of the Commands and Jobs I&apos;ve introduced and publish the &quot;orbs&quot;,
you can use it in other projects, or more specifically, in all projects that use CircleCI.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/orbs/registry/&quot;&gt;https://circleci.com/orbs/registry/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The registry is for Orbs, so check the Orbs you can use.&lt;/p&gt;
&lt;p&gt;As far as I can see, there are some orbs such as Slack&apos;s orbs, so it seems to be easy to implement notifications by using them.
It&apos;s easy to install a specific version of Ruby, Node and so on to CircleCI.&lt;/p&gt;
&lt;h3 id=&quot;Concepts-Summary&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Concepts-Summary&quot; aria-label=&quot;Concepts Summary permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Concepts Summary&lt;/h3&gt;
&lt;p&gt;To summarize what I&apos;ve been explaining so far&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Workflow&lt;/li&gt;
&lt;li&gt;Jobs.&lt;/li&gt;
&lt;li&gt;Steps.&lt;/li&gt;
&lt;li&gt;Commands&lt;/li&gt;
&lt;li&gt;Executors.&lt;/li&gt;
&lt;li&gt;Orbs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you understand those things, you can start to use CircleCI for now.
And the relationship between each of them is&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Workflow &gt; Jobs &gt; Steps&lt;/strong&gt; with a relationship (dependency) like this
Commands are &lt;strong&gt;common jobs&lt;/strong&gt;, Orbs are &lt;strong&gt;common public jobs across projects&lt;/strong&gt;, and
Executors seems to be better understood as &lt;strong&gt;common execution environment&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;More-in-depth&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#More-in-depth&quot; aria-label=&quot;More in depth permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;More in-depth.&lt;/h2&gt;
&lt;p&gt;The description so far should be enough to get you started with CirecleCI, but I was a little curious to get started.
A somewhat in-depth summary of the content is as follows.&lt;/p&gt;
&lt;h3 id=&quot;Using-Cache&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Using-Cache&quot; aria-label=&quot;Using Cache permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Using Cache.&lt;/h3&gt;
&lt;p&gt;CircleCI allows you to specify a directory and save it as a cache.
It resolves the problem of installing packages envery build.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/docs/ja/2.0/caching/&quot;&gt;dependency cache&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can specify the key and path for caching by using &lt;code class=&quot;language-text&quot;&gt;save_cache&lt;/code&gt; in Steps in Job.
You can use it all the time.&lt;/p&gt;
&lt;h3 id=&quot;Control-on-a-per-branch-basis&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Control-on-a-per-branch-basis&quot; aria-label=&quot;Control on a per branch basis permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Control on a per-branch basis.&lt;/h3&gt;
&lt;p&gt;You can use branches to control which branches run Workflow and Job.&lt;/p&gt;
&lt;p&gt;With this, you can do things like &quot;if merged into develop, deploy after the tests are finished&quot;.
You can also register a regular expression whitelist so you can control which feature branch to run tests on&lt;/p&gt;
&lt;h3 id=&quot;Use-SSH&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Use-SSH&quot; aria-label=&quot;Use SSH permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Use SSH.&lt;/h3&gt;
&lt;p&gt;You may need to do SSH with Ansible, Capistrano, your own scripts, etc., but you will need to use CirecleCI
You can use SSH to log in to the remote server by registering the private key to&lt;/p&gt;
&lt;p&gt;The private key can be registered in the console.
However, if you need to use the private key in your job,
you need to add a commanod &lt;code class=&quot;language-text&quot;&gt;add_ssh_keys&lt;/code&gt; with the key&apos;s fingerprint to use the key.&lt;/p&gt;
&lt;h3 id=&quot;Default-Environment-Variables&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Default-Environment-Variables&quot; aria-label=&quot;Default Environment Variables permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Default Environment Variables.&lt;/h3&gt;
&lt;p&gt;Here are the predefined environment variables.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/docs/ja/2.0/env-vars/#%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0&quot;&gt;Predefined Environment Variables&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The user who created the pull request.&lt;/li&gt;
&lt;li&gt;Current job name.&lt;/li&gt;
&lt;li&gt;The branch name of the current build.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and other build metainformation are defined as environment variables.&lt;/p&gt;
&lt;h3 id=&quot;Scope-of-Environment-Variables&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Scope-of-Environment-Variables&quot; aria-label=&quot;Scope of Environment Variables permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Scope of Environment Variables.&lt;/h3&gt;
&lt;p&gt;Environment variables can be used by defining environment variables in the environments of Workflow, Job, and Executor.
The scope of the variable depends on the location where the variable is defined;&lt;/p&gt;
&lt;p&gt;If you define them in the job, they are valid in the job;
if you define them in the Executor, they are valid in the execution environment.&lt;/p&gt;
&lt;h3 id=&quot;Validation-of-the-Config-file&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Validation-of-the-Config-file&quot; aria-label=&quot;Validation of the Config file permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Validation of the Config file&lt;/h3&gt;
&lt;p&gt;If you are not used to it, you may not be able to follow the syntax of the Config file at first.
If you install CircleCI&apos;s CLI beforehand, you can validate your config file in your local env.&lt;/p&gt;
&lt;p&gt;To avoid unnecessary pushes to the repositories, it is recommended to push the config file after the validation.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/docs/ja/2.0/local-cli/#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot;&gt;Installation Instructions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here&apos;s the command for validation.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;circleci config validate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;Summary&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Summary&quot; aria-label=&quot;Summary permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Summary&lt;/h2&gt;
&lt;p&gt;How do you think of the concept of CircleCI?&lt;/p&gt;
&lt;p&gt;I made the config while referring to the document repeatedly in actual work, but the document is written more carefully and so helpful.
In addition, the original config (befor I worked in) was 2.0, but Commands and Executor came to be able to use, and it became quite comfortable because a lot of processes can be commonized.
Thanks to this, I was able to automate the deployment of my project.&lt;/p&gt;
&lt;p&gt;I will use other features I didn&apos;t use this time like &quot;orbs&quot;.&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/09/20190924_get-start-circle-ci-confg-2-1/thumbnail.png</thumbnailUrl><language>en</language></item><item><title><![CDATA[基本から応用までCircle CIのConfig 2.1の書き方まとめ]]></title><description><![CDATA[最近Cicle CIを触る機会があり、これまであまりガッツリconfig書き込んだりする機会がなかったのですが、 仕事でちょと触れる機会がありましたので、そこで学んだことをまとめて共有していこうかと思います。 Github Actions…]]></description><link>https://ver-1-0.net/blog/2019/09/24/get-start-circle-ci-confg-2-1</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/09/24/get-start-circle-ci-confg-2-1</guid><pubDate>Tue, 24 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近Cicle CIを触る機会があり、これまであまりガッツリconfig書き込んだりする機会がなかったのですが、 仕事でちょと触れる機会がありましたので、そこで学んだことをまとめて共有していこうかと思います。&lt;/p&gt;
&lt;p&gt;Github Actionsなんかも最近は使えるようになっているそうで、
そこらへんともちゃんと比較して自分のプロジェクトにどっちがあっているのかというのを比較検討した方が
良いかとは思ったのですが、すでにCircle CI を使って現状にすごく不満があるとかではないのと自分自身
あまりAPIとフロントがちゃんとあるプロジェクトでCI構築したことがなかったので、まぁまずはメジャーな
CircleCIを使っていこうというのを決めました。&lt;/p&gt;
&lt;p&gt;今回は、自動テストの環境が現プロジェクトにはあったのですが、自動デプロイの環境が整備されておらず
結構デプロイ手順が担当者に依存している感じなので、その改善のために自動デプロイを導入してまぁ誰でも
デプロイできるような環境を作ろうかという経緯でCircleCIを使ったデプロイの自動化をはじめました。&lt;/p&gt;
&lt;h2 id=&quot;ドキュメント&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88&quot; aria-label=&quot;ドキュメント permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;CircleCIを使うにあたってまずは公式のドキュメントが結構ちゃんと書かれているので、
そちらを参考にしてデプロイの自動化を進めていきました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/docs/ja/2.0/configuration-reference/#section=configuration&quot;&gt;CircleCIを設定する&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;というかこちらのドキュメントをしっかり読めば、こっちの記事はあまり読まなくても良いかもしれません。笑
とはいえ、この後読まれないのも悲しいのでドキュメントをまとめてわかりやすくなるように説明していこうと思います。&lt;/p&gt;
&lt;p&gt;今回説明するのはconfigのバージョン2.1で2.0とは異なるので注意してください。&lt;/p&gt;
&lt;p&gt;2.1だとCommandやExecutorなどの定義が使えるようになり処理の共通化がより簡単にできるようになっています。&lt;/p&gt;
&lt;h2 id=&quot;Circle-CIで押さえておきたい概念まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Circle-CI%E3%81%A7%E6%8A%BC%E3%81%95%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E6%A6%82%E5%BF%B5%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;Circle CIで押さえておきたい概念まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Circle CIで押さえておきたい概念まとめ&lt;/h2&gt;
&lt;p&gt;まずCirce CIはプロジェクトのルートディレクトリから.circleci/config.ymlにCIの設定を書くことで、
CIで実行する処理を定義していきます。&lt;/p&gt;
&lt;h3 id=&quot;JobとWorkflow&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Job%E3%81%A8Workflow&quot; aria-label=&quot;JobとWorkflow permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;JobとWorkflow&lt;/h3&gt;
&lt;p&gt;以下でその処理を定義する際に必要な概念を説明しておきますが、先にざっくり説明をすると&lt;strong&gt;Job&lt;/strong&gt;という処理の基本単位があり、
それを順番にして一つの**Workflow(ワークフロー)**を定義していきます。&lt;/p&gt;
&lt;p&gt;**Workflow(ワークフロー)**というのがパッとわからない人もいるかと思いますが、まぁ訳した通り作業全体の流というに形になります。
CIだと&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;テストコードを実行&lt;/li&gt;
&lt;li&gt;1.にパスすることを確認してデプロイ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という流れが一般的ですがこの1と2の流れがWorkflowです。&lt;/p&gt;
&lt;p&gt;実際の現場では、APIサーバのソースをテスト・デプロイ、フロントのソースをテスト・デプロイする必要があるなど少し複雑に
なりますが基本の考え方は変わりません。&lt;/p&gt;
&lt;p&gt;この例だと、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;APIサーバのテスト&lt;/li&gt;
&lt;li&gt;APIサーバのデプロイ&lt;/li&gt;
&lt;li&gt;フロントのテスト&lt;/li&gt;
&lt;li&gt;フロントのデプロイ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;の４つのJobから構成され、これらをどういう順番で実行するかというのがWorkflowです。&lt;/p&gt;
&lt;p&gt;これを簡易的なyamlで書くと以下のようなイメージです。&lt;/p&gt;
&lt;p&gt;※正しい形式ではないので、実際には公式ドキュメントにならって記述してください。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2.1&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;jobs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;api-test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;APIサーバのテスト&apos;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;api-deploy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;APIサーバのデプロイ&apos;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;front-test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;フロントのテスト&apos;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;front-deploy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;フロントのデプロイ&apos;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;workflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;test-and-deploy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;jobs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;test
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; front&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;test
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;deploy
            &lt;span class=&quot;token key atrule&quot;&gt;requires&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;test
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; front&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;deploy
            &lt;span class=&quot;token key atrule&quot;&gt;requires&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;deploy
              &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;front&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;workflowのところにrequiresというのがありますが、ここにはjobを実行する前に終わらしておきたい
Jobを書いておきます。要はそのJobの依存タスクを書いておく必要があります。
これを書いておかないとCirecleCIは順番を気にせずじゃんじゃか実行してしまうのでテストが終わる前に
デプロイされてしまうなんてこともありえます。（並列数にもよりますが）&lt;/p&gt;
&lt;p&gt;WorkflowはJobの上位の概念として覚えておければ良いかと思います。&lt;/p&gt;
&lt;h3 id=&quot;Steps&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Steps&quot; aria-label=&quot;Steps permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Steps&lt;/h3&gt;
&lt;p&gt;次に、この定義を押さえた上でさらに細かい部分を見ていくと&lt;strong&gt;Job&lt;/strong&gt;は&lt;strong&gt;Steps&lt;/strong&gt;から構成されStepsでは、
Jobの中で実際行う処理を記述していきます。
Stepsの中では、シェルコマンドが実行できここにひたすら、処理を記述していきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;jobs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;api-test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;APIサーバのテスト&apos;&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; checkout
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;ライブラリのインストール&apos;&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;token scalar string&quot;&gt;
            bundle install&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;テストの実行&apos;&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;token scalar string&quot;&gt;
            bundle exec rspec&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;詳しくは公式のドキュメントに譲りますが、When句で前のコマンドが失敗したらコマンドを実行するなどの制御
ができたり、リポジトリからのチェックアウトなどを行うコマンドも用意されています。&lt;/p&gt;
&lt;p&gt;実際のコマンドの実行には主にrunコマンドを使いますが、runでは作業ディレクトリを指定したりそのコマンドの
中だけで有効な環境変数を定義したりすることができます。&lt;/p&gt;
&lt;h3 id=&quot;Command21から使用可&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Command21%E3%81%8B%E3%82%89%E4%BD%BF%E7%94%A8%E5%8F%AF&quot; aria-label=&quot;Command21から使用可 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Command(2.1から使用可)&lt;/h3&gt;
&lt;p&gt;Commandは2.1からの昨日ですが、Commandを活用することでStepsを共通化することができます。
例えば多くの場合、毎回テストのたびにパッケージをインストールするのは冗長なのでキャッシュを効かせたくなるかと思いますが、
そのためには、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;キャッシュが存在するかチェック&lt;/li&gt;
&lt;li&gt;パッケージをインストール（キャッシュがあればそれを使う）&lt;/li&gt;
&lt;li&gt;最新の状態でキャッシュを上書き&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ということをすると思うのですが、この処理を各ジョブで毎回コピペして書くのはかったるいので、
ここの処理だけCommandとして定義して再利用します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;commands&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;package-install&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;キャッシュを使ったパッケージインストール&apos;&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; restore&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;cache
        &lt;span class=&quot;token key atrule&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; v1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;server&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;checksum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &apos;Gemfile.lock &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; v1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;server
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; run
        &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;bundle install&apos;&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; bundle install vender/bundle
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; save&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;cache
        &lt;span class=&quot;token key atrule&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; v1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;server&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;checksum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &apos;Gemfile.lock &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; v1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;hoge&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;server
        &lt;span class=&quot;token key atrule&quot;&gt;paths&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; vender/bundle
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こうやってあらかじめパッケージインストールのコマンドを書いておけばデプロイ前とテスト前にイチイチこの
処理を書く必要なく、コマンドを呼び出すだけで事足りるようになり、DRYなconfigができあがります。&lt;/p&gt;
&lt;p&gt;parametersという形で引数もこのコマンドに渡せるのでパラメータも使うとより再利用可能なコマンドが作り易くなるかと思います。&lt;/p&gt;
&lt;h3 id=&quot;Executors21から使用可&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Executors21%E3%81%8B%E3%82%89%E4%BD%BF%E7%94%A8%E5%8F%AF&quot; aria-label=&quot;Executors21から使用可 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Executors(2.1から使用可)&lt;/h3&gt;
&lt;p&gt;Executorsは環境を再利用するためのものです。dockerのイメージを環境を作ってそれを使い回すことができます。&lt;/p&gt;
&lt;h3 id=&quot;Orbs21から使用可&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Orbs21%E3%81%8B%E3%82%89%E4%BD%BF%E7%94%A8%E5%8F%AF&quot; aria-label=&quot;Orbs21から使用可 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Orbs(2.1から使用可)&lt;/h3&gt;
&lt;p&gt;Orbsというワードは聞きなれないかもしれませんが、要はライブラリです。ここまでに紹介したCommandsやJobsはプロジェクト内での
共通化ができましたが、Orbsは一度使って公開すると他のプロジェクト、もっと言うとCircleCIを使う全プロジェクトで使うことができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/orbs/registry/&quot;&gt;https://circleci.com/orbs/registry/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらがOrbsのレジストリになるので使えるOrbsを見ておくと良いかと思います。&lt;/p&gt;
&lt;p&gt;僕が見た限りではSlackのorbsなどがあったので、それを使うと通知とかが手軽に実装できそうだなという感じでした。
その他、Ruby, Nodeなどのorbsなどもあったので、CircleCIに指定のバージョンの言語をインストールするなんていうのも手軽できそうです。&lt;/p&gt;
&lt;h3 id=&quot;概念まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%A6%82%E5%BF%B5%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;概念まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;概念まとめ&lt;/h3&gt;
&lt;p&gt;ここまでで説明してきたものをまとめておくと&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Workflow&lt;/li&gt;
&lt;li&gt;Jobs&lt;/li&gt;
&lt;li&gt;Steps&lt;/li&gt;
&lt;li&gt;Commands&lt;/li&gt;
&lt;li&gt;Executors&lt;/li&gt;
&lt;li&gt;Orbs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あたりを理解しておけばとりあえずCircleCIを始められそうです。
またそれぞれの関係が&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Workflow &gt; Jobs &gt; Steps&lt;/strong&gt; という感じの関係（依存関係）で
Commandsは&lt;strong&gt;Jobを共通化&lt;/strong&gt;するもの、Orbsは&lt;strong&gt;プロジェクトを横断するパブリックなJobの共通化&lt;/strong&gt;、
Executorsは&lt;strong&gt;実行環境の共通化&lt;/strong&gt;と言う感じで理解しておくのが良さそうです。&lt;/p&gt;
&lt;h2 id=&quot;さらに踏み込んだ内容&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%95%E3%82%89%E3%81%AB%E8%B8%8F%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A0%E5%86%85%E5%AE%B9&quot; aria-label=&quot;さらに踏み込んだ内容 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;さらに踏み込んだ内容&lt;/h2&gt;
&lt;p&gt;CirecleCIを使い始めるにはこれまでの説明で足りそうですが、僕が始めるにあたってちょっと気になり、
多少踏み込んだ内容をまとめておくと以下のようになります。&lt;/p&gt;
&lt;h3 id=&quot;キャッシュを使う&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E4%BD%BF%E3%81%86&quot; aria-label=&quot;キャッシュを使う permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;キャッシュを使う&lt;/h3&gt;
&lt;p&gt;CircleCIでは、ディレクトリを指定してキャッシュとして保存しておけるので、一回のビルドで毎回パッケージをインストール
しないといけないという問題を解消することができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/docs/ja/2.0/caching/&quot;&gt;依存関係のキャッシュ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Job内Stepsで使える&lt;code class=&quot;language-text&quot;&gt;save_cache&lt;/code&gt;を使うとキャッシュ時のキーとパスを指定して、キャッシュ、&lt;code class=&quot;language-text&quot;&gt;restore_cache&lt;/code&gt;でキャッシュを
使い回すことができます。&lt;/p&gt;
&lt;h3 id=&quot;ブランチごとに制御する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%94%E3%81%A8%E3%81%AB%E5%88%B6%E5%BE%A1%E3%81%99%E3%82%8B&quot; aria-label=&quot;ブランチごとに制御する permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ブランチごとに制御する&lt;/h3&gt;
&lt;p&gt;branchesを使うとWorkflow, Jobを実行するブランチを制御することができます。&lt;/p&gt;
&lt;p&gt;これで「developにマージされたら、テスト終了後にデプロイを走らせる」といったことが可能になります。
また、正規表現でのホワイトリストの登録もできるのでfeatureブランチにはテストを実行するといった制御も可能です。&lt;/p&gt;
&lt;h3 id=&quot;SSHを使用する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#SSH%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B&quot; aria-label=&quot;SSHを使用する permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SSHを使用する&lt;/h3&gt;
&lt;p&gt;Ansible, Capistrano, 自作のスクリプトなどでSSHをする必要がある場合がありますが、あらかじめCirecleCI
に秘密鍵を登録しておくことでSSHを利用してリモートサーバにログインさせることが可能です。&lt;/p&gt;
&lt;p&gt;秘密鍵の登録はコンソール画面からできますが、鍵を登録された後にそれをJob内で使用する必要がある場合は
&lt;code class=&quot;language-text&quot;&gt;add_ssh_keys&lt;/code&gt;でfingerprintを指定して使用する鍵を登録する必要があります。&lt;/p&gt;
&lt;h3 id=&quot;デフォルトの環境変数&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0&quot; aria-label=&quot;デフォルトの環境変数 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;デフォルトの環境変数&lt;/h3&gt;
&lt;p&gt;定義済み環境変数はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/docs/ja/2.0/env-vars/#%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0&quot;&gt;定義済み環境変数&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プルリクエストを作成したユーザ名&lt;/li&gt;
&lt;li&gt;現在のジョブ名称&lt;/li&gt;
&lt;li&gt;現在ビルドしているブランチ名&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などなどビルドのメタ情報が環境変数として定義されています。&lt;/p&gt;
&lt;h3 id=&quot;環境変数のスコープ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AE%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97&quot; aria-label=&quot;環境変数のスコープ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;環境変数のスコープ&lt;/h3&gt;
&lt;p&gt;環境変数はWorkflow, Job, Executor内のenvironmentsで環境変数を定義して使うことができます。
変数のスコープはそれぞれ定義した場所により、Jobで定義すればそのJob内、Executorで定義すればその実行環境内で有効です。&lt;/p&gt;
&lt;p&gt;その他、シェルコマンドやステップ内でも環境変数を設定できますがこちらもそれぞれのスコープのみで有効です。&lt;/p&gt;
&lt;h3 id=&quot;Configファイルのバリデーション&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Config%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&quot; aria-label=&quot;Configファイルのバリデーション permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Configファイルのバリデーション&lt;/h3&gt;
&lt;p&gt;最初のうちなれないとConfigファイルのシンタックスに添えずエラーになることがあるかと思いますが、
あらかじめCircleCIのCLIをインストールしておくとローカルでconfigファイルの検証ができます。&lt;/p&gt;
&lt;p&gt;これの検証を通ったらpushするようにするとリポジトリに無駄にプッシュするのを避けることができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://circleci.com/docs/ja/2.0/local-cli/#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot;&gt;インストール手順&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;検証のコマンドはこちらです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;circleci config validate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまでざーっとCircleCIの概念や導入の際に気になる点をまとめてみましたがいかがでしょうか？&lt;/p&gt;
&lt;p&gt;実作業ではドキュメントを繰り返し参照しながらConfigを作りましたが、日本語のドキュメントが結構丁寧に書かれているので意外とすんなり入り込めると思います。
また、元のconfigが2.0だったのですが、CommandsとExecutorが使えるようになり、かなりの処理を共通化できるので結構快適になりました。
おかげで現場のデプロイをサクッと自動化できました。Orbsあたりはまだ使えていなかったので、今後のCIのエンハンスとしてすきをみて使っていきたいなと
思います。&lt;/p&gt;
&lt;p&gt;では&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/09/20190924_get-start-circle-ci-confg-2-1/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[引っ越しの荷物をまとめながら考えた読んでためになった技術書&その他本のリスト]]></title><description><![CDATA[どうも、最近サボリ気味だったブログの更新も週次でやっていきたいなんて考えていますが、
こうしてまた記事を書いているのでなんとか継続できそうな予感がしています。 このところちょっとした用事で引っ越しをすることになったので荷物をまとめていました。
荷物というと家電からPC…]]></description><link>https://ver-1-0.net/blog/2019/09/22/summary-of-useful-books</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/09/22/summary-of-useful-books</guid><pubDate>Sun, 22 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうも、最近サボリ気味だったブログの更新も週次でやっていきたいなんて考えていますが、
こうしてまた記事を書いているのでなんとか継続できそうな予感がしています。&lt;/p&gt;
&lt;p&gt;このところちょっとした用事で引っ越しをすることになったので荷物をまとめていました。
荷物というと家電からPCの周辺機器などなどあるのですが、その中でもやはり本がそれなりの
割合を締めてくるので整理するわけで、読みたいときにパッと手に取りたい本とそうでない本を
仕分けてみるのですが、手に取りたい本の多いこと笑。&lt;/p&gt;
&lt;p&gt;今改めてそれぞれの本を見てみると「あぁこれ良い本だよなぁ」という本が数冊あったのでそれらを
まとめて紹介したいと思います。&lt;/p&gt;
&lt;p&gt;良い本はやっぱりネットで取り上げられていることも多くかぶる面もありそうですが、とりあえず一斉に
紹介できればと思っています。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2019/03/28/three-phase-reading&quot;&gt;難解な本、分厚い本の読み方。本を三段階に分けてよむ。&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id=&quot;早速本の紹介&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%97%A9%E9%80%9F%E6%9C%AC%E3%81%AE%E7%B4%B9%E4%BB%8B&quot; aria-label=&quot;早速本の紹介 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;早速本の紹介&lt;/h2&gt;
&lt;h3 id=&quot;技術の本&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8A%80%E8%A1%93%E3%81%AE%E6%9C%AC&quot; aria-label=&quot;技術の本 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;技術の本&lt;/h3&gt;
&lt;h4&gt;プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976/ref=as_li_ss_il?ie=UTF8&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=b9621ca721c0f36fed65a16e4741b052&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4774193976&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4774193976&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/336xWAb&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rubyの入門書ですが、タイトルの通りRubyの言語仕様（トップレベルオブジェクト継承関係など）からデバッグ技法について丁寧に説明されています。&lt;/p&gt;
&lt;p&gt;初心者の方が一読してRubyを理解するのにも良いですし、中級者があれここの仕様どうなってたっけ？みたいなリファレンスとして使うにも良です。
私自身仕事でRubyを使うことも多いのですが、あまり使っていない部分が頭から抜け落ちていたりするのでその都度この本を参照して再度思い出したりしています。&lt;/p&gt;
&lt;p&gt;今のRubyを取り巻く環境的にRubyを触る＝Railsを触るということだと思うのですが、普段遣いではほとんどRailsを触ることが多いかと思いますが、
Rubyを触る人は最低でもこちらのような網羅的な知識の書かれた本を持っておいて繰り返し参照するとRubyおよびRailsでかけるコードの幅が広がります。&lt;/p&gt;
&lt;p&gt;また、このように情報量の多い本では一回読んだだけでは全て使えるようにならないので繰り返し本に目を通すのが良いです。
日々の仕事やプログラミングで蓄積された経験がこの本を読むことで「なるほどこういうことができるのか！次使ってみよう」というようなアクションありきの
インプットができるので記憶の定着と実用性の高いインプットができると思います。&lt;/p&gt;
&lt;p&gt;Rubyを書いていると「Rubyを書いていると思ったらRailsを書いている」状態になってしまう
(Railsを使わないコードで、Railsでしか使えないメソッドを呼び出ししてハマるなど）
こともあるのでRailsガイドやネットの情報に止まらず、
このような&quot;Ruby&quot;の本を一冊持っておくと「RubyでできることとRailsでできること」を理解してコードをかけるようになるかと思います。&lt;/p&gt;
&lt;h4&gt;Ruby on Rails 5 アプリケーションプログラミング&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Ruby-Rails-5%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4774188832/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1I7DS74S3WJ26&amp;keywords=ruby+on+rails+5%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&amp;qid=1569122462&amp;s=books&amp;sprefix=Ruby+on+R,stripbooks,248&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=29f02cf2ac1be96625c9c10d2a8ae30c&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4774188832&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4774188832&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/353fOsm&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;先に説明したのはRubyの本ですがこちらはRailsの本になります。Railsでできることが一通り書かれているのでパッと全体に目を通して気になる部分をさらに読み進める。
ちょっと暇な時に繰り返し目を通すというような使い方ができるとRailsの習熟に役立てることができると思います。&lt;/p&gt;
&lt;p&gt;RailsはTwitterではちらほらオワコンだみたいな意見も見受けられますが、
個人的な意見としてはフルスタックフレームワークとしてここまでライブラリの環境が整備されていて、Railsのルールに沿ってプログラミングをしていけば
これほど素早くシステムを作り上げられるフレームワークは少ないと思うので、まだまだ勉強する価値があるかなと思います。&lt;/p&gt;
&lt;p&gt;Rails自体はすでにバージョン6.0がリリースされていますが、一部カバーできていない部分あるかと思いますが基本的な部分はカバーできているはずなので
こちらを買っておいても損ではないです。（同シリーズの6.0があればそちらが良いかも）&lt;/p&gt;
&lt;h4&gt;キタミ式イラストIT塾 基本情報技術者 平成31/01年 (情報処理技術者試験)&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%82%AD%E3%82%BF%E3%83%9F%E5%BC%8F%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88IT%E5%A1%BE-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85-%E5%B9%B3%E6%88%9031-01%E5%B9%B4-%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93/dp/4297102110/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=39AYVGT8O7CM4&amp;keywords=%E3%82%AD%E3%82%BF%E3%83%9F%E5%BC%8F%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88it%E5%A1%BE+%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85&amp;qid=1569121630&amp;s=books&amp;sprefix=%E3%82%AD%E3%82%BF%E3%83%9F%E5%BC%8F,stripbooks,329&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=3e36586b98a0f107ea1b91d3252436c7&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4297102110&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4297102110&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30zJHgE&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;意外かもしれませんがIPAが認定している資格の基本情報技術者の参考書になります。&lt;/p&gt;
&lt;p&gt;ネットだと資格は割とディスられる傾向になりますが、資格試験の参考書はよくまとまっていてわかりやすく網羅的に解説
しているものも多いので資格取らずとも本を買うというのは全然ありです。&lt;/p&gt;
&lt;p&gt;こちらの本は初心者向けで、これまでIT業界にいなかったけどプログラミングの勉強を始めたいなんて人におすすめです。
例え話や図を入れながらわかりやすく解説してくれています。&lt;/p&gt;
&lt;p&gt;プログラミングとなるとRailsやReactなどプログラミング言語自体アプリケーションの層の話題になることが多いですが、
初心者のうちにつまずくのは一般的あまり語られないコンピュータの構造(CPUって？メモリって？コンピュータってそもそもどうやって動くのなど）
の話やネットワークの部分なのでこういったIT知識を網羅的に紹介した本があると心強いかと思います。&lt;/p&gt;
&lt;p&gt;すでにエンジニアとして働いている人も新人に教える時にどうやって説明しようかな？という時の参考にのぞいたり、
基礎的すぎて人にききづらいときにこっそり参照してみると良いと思います。&lt;/p&gt;
&lt;h4&gt;Java言語で学ぶデザインパターン入門&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=38902OEUO9M1P&amp;keywords=java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80&amp;qid=1569123345&amp;s=books&amp;sprefix=Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3,office-products,387&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=e7c0c48a81174e0749d0219a65091f22&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4797327030&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4797327030&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2V6s8Ue&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらは中級者向けという感じですが、エンジニアとして仕事するのであれば持っておきたい本の一つだと個人的には思っています。
割と有名な本ですが一応説明しとくと、GoF(詳しくはググってください）の23のオブジェクト指向プログラミングにおける設計のパターンを一つずつ解説している本になります。&lt;/p&gt;
&lt;p&gt;23個すべてを頭に入れておくのは結構しんどいので完コピせよとは思いませんが、Singleton, Facade, Strategy, Factory, Observer, Template Method, Composition, Decolatorなどなど
有名どころはおさえておくとどの言語を書く時にも役立ちます。&lt;/p&gt;
&lt;p&gt;またこれらの知識が公式ドキュメントで暗黙的な前提知識として語られていることもあるので、これらを知っていないと
ドキュメントを読むのが辛くか理解が浅くなってしまうというリスクを回避するためにも要点はおさえておきたい所です。&lt;/p&gt;
&lt;p&gt;またデザインパターン自体がオブジェクト指向の良い例を集め具体例の集合体みたいなものなのでオブジェクト指向を具体例から理解するのにちょうど良いリファレンスだと思います。
自身もこれを読み進めることで「あ、良く設計されたコードってこういうことを言うのね」みたいなを実感できました。&lt;/p&gt;
&lt;p&gt;本自体が分厚く一気に倒すのは結構骨が折れるので、今日はSingletonを倒そう、明日はStrategyを倒そうみたいな感じで一つずつ倒すようにしていったら
日常で遭遇するものはだいたい実際に活用する時には調べながらやるけど、頭にインデックスを作れているくらいにはなったかなという感じです。&lt;/p&gt;
&lt;h4&gt;プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B7%E3%83%97%E3%83%AB-%E3%82%AA%E3%83%96-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B03%E5%B9%B4%E7%9B%AE%E3%81%BE%E3%81%A7%E3%81%AB%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%81%9F%E3%81%84%E4%B8%80%E7%94%9F%E5%BD%B9%E7%AB%8B%E3%81%A4101%E3%81%AE%E5%8E%9F%E7%90%86%E5%8E%9F%E5%89%87-%E4%B8%8A%E7%94%B0-%E5%8B%B2/dp/4798046140/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B7%E3%83%97%E3%83%AB%E3%82%AA%E3%83%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&amp;qid=1569124266&amp;s=books&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=b685a2134b0a8d8bf1c55cf0d3283ed5&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4798046140&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4798046140&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/34Z2KEx&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらはプログラミングにおける設計思想や理論についてひたすら紹介されている本です。タイトルの通り3年目までに身に付けたい内容がブワッと書かれている
感じですね。抽象的な内容が多いのである程度実務経験がないと実践は難しいのですが、日々コードを書く際に気をつけたことが良いリストがつめこまれています。&lt;/p&gt;
&lt;p&gt;また、業界で良く使われる専門用語集のようでもあり、この本を読んでおくと技術的なブログを読むと時の文脈を理解しながら読めるようになるので一度は目を通して
置けると良いかと重ます。&lt;/p&gt;
&lt;p&gt;ボーイスカウトの原則、技術的負債、割れた窓の法則、車輪の再発明、DRY、関心の分離などなどが紹介されていますがこれらの単語で良く知らない言葉がある方は
購入して一読されるのをおすすめします。&lt;/p&gt;
&lt;h4&gt;リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89&amp;qid=1569133900&amp;s=books&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=a421dbb1660c18b4c995e52f3a3589af&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4873115655&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4873115655&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30dYzpy&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらもプログラミングをする上でのお作法的な話にはなりますがリーダブルコードの方がプリンシプルオブプログラミングよりは、命名の大切さやインデントを揃える
ネストを避ける、コードを小さく保つなどの”読みやすい”コードをかくための方法が紹介されています。&lt;/p&gt;
&lt;p&gt;プリンシプルオブプログラミングが設計などの話に関しても踏み込んでいるに対して、こちらは適切な命名を元にコードを共通化し、一度に一つのことを行うモジュールをつなげて
コードを読みやすくするという部分に焦点を絞ってまとめてあります。&lt;/p&gt;
&lt;p&gt;コメントに関する考え方や命名の大事さなどが説かれているので一度は目を通しておくと良いでしょう。&lt;/p&gt;
&lt;h4&gt;関数型プログラミングの基礎 JavaScriptを使って学ぶ&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E-JavaScript%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%AD%A6%E3%81%B6-%E7%AB%8B%E5%B7%9D%E5%AF%9F%E7%90%86/dp/4865940596/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=ECVHBPYMF4PS&amp;keywords=%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E&amp;qid=1569133961&amp;s=books&amp;sprefix=%E9%96%A2%E6%95%B0%E5%9E%8B,stripbooks,274&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=108a73704f6757e8c56b3dc919876f11&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4865940596&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4865940596&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2Ii5rXX&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RubyやPHPなどのバックエンドのコードを書いているとあまり必要ないのかもしれませんが（多くはオブジェクト指向にのっとった形で開発するので）、
フロントのコードを変えてくると関数型プログラミングの考え方が役に立ちます。ReactやVueなどのライブラリではコンポーネント(関数）にデータを与えると
必要なコンポーネントが描画され、データが変わると見た目やテキストが変わり、同じデータを与えたら全く同じ結果になるというのが基本の考え方になっています。&lt;/p&gt;
&lt;p&gt;変数をイミュータブルに保ったり、高階関数の考え方はJavaScriptを使う上で必要不可欠なのでフロントをやりたい方は一度関数型プログラミングの基礎に
触れておくと良いかと思います。&lt;/p&gt;
&lt;p&gt;こちらの本は割と身近な関数型言語であるJavaScript（ここら辺は色々な意見ありそうですが）を使って関数型プログラミングとはなんぞやということを
解説してくれています。&lt;/p&gt;
&lt;h4&gt;実践Vim　思考のスピードで編集しよう！&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Vim-%E6%80%9D%E8%80%83%E3%81%AE%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%A7%E7%B7%A8%E9%9B%86%E3%81%97%E3%82%88%E3%81%86%EF%BC%81-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E6%9B%B8%E7%B1%8D-%EF%BC%A4%EF%BD%92%EF%BD%85%EF%BD%97-%EF%BC%AE%EF%BD%85%EF%BD%89%EF%BD%8C-ebook/dp/B00HWLJI3U/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=%E5%AE%9F%E8%B7%B5Vim&amp;qid=1569134305&amp;s=books&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=e3c4198302ab7f5fc7c8dbfed349236f&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00HWLJI3U&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=B00HWLJI3U&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/336L0FJ&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;私の普段遣いのエディタはVimで様々なプラグインを入れていて快適にテキストの編集ができるようにはしているのですが、こちらの本では
Vimのデフォルトの機能を最大限り活用するための様々なTipsが紹介されています。&lt;/p&gt;
&lt;p&gt;例えば、vimにはビジュアルモードと挿入モードという二つのモードを行き来しながら編集を行なっていくのですがvimではc -&gt; i -&gt; w というたった3つのキーを連続で
押すことで単語レベルで文字列を削除した後に挿入モードに移れ(書き換えが楽）たり、ヴィジュアルモードでドットを押すと前の操作を繰り返すことができるので
これを使って操作を自動化したり、マクロという機能を使って操作を記録して作業を自動化できるといったことがリストになって紹介されています。&lt;/p&gt;
&lt;p&gt;VimmerやこれからVimmerになろうとしている方にオススメの一冊です。&lt;/p&gt;
&lt;h4&gt;SQLアンチパターン&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/SQL%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-Bill-Karwin/dp/4873115892/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=SQL%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3&amp;qid=1569134389&amp;s=books&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=a99cc7ae0a73b2c89c51d75f17dfe278&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4873115892&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4873115892&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30dZqGM&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;名前の通りSQLにおけるアンチパターンを紹介している本です。ある程度の規模のシステムを設計してて、納期が近かったりするとうっかりこちらの本に
あるようなパターンを作り込んでしまっている場合があるのですが、定期的にこちらの目次を見て自分の関わっているシステムがアンチパターンに陥って
ないかどうかを確認したい所です。&lt;/p&gt;
&lt;p&gt;まずはアンチパターンにどのようなものがあるかを知っておかないと防げるものも防げないのでこちらの本で一度確認させれると良いかと思います。&lt;/p&gt;
&lt;h3 id=&quot;その他&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%9D%E3%81%AE%E4%BB%96&quot; aria-label=&quot;その他 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;その他&lt;/h3&gt;
&lt;p&gt;持っている本が技術書ばかりですが、他にもよかった本がいくつかあるので紹介させていただきます。&lt;/p&gt;
&lt;h4&gt;音声ダウンロード付】実践IELTS英単語3500&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%80%90%E9%9F%B3%E5%A3%B0%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E4%BB%98%E3%80%91%E5%AE%9F%E8%B7%B5IELTS%E8%8B%B1%E5%8D%98%E8%AA%9E3500-%E5%86%85%E5%AE%AE-%E6%85%B6%E4%B8%80/dp/4010941855/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=IELTS+%E5%9F%BA%E7%A4%8E%E8%8B%B1%E5%8D%98%E8%AA%9E&amp;qid=1569134518&amp;s=books&amp;sr=1-2-fkmr1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=71da38deb4167411d4b52e52fe43a2a5&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4010941855&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4010941855&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30ik6xy&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;単語帳です。近々IELTSを受ける予定なのでこちらを購入して、まだ完全に覚えてはいないのですが、音声付きというのが良いです。
単語を覚えるときには音と一緒に覚えた方が記憶に残りやすいし、会話で単語を聞いた時のイメージの湧き方が違うので単語帳はいつも音声付きの
ものを使うようにしています。&lt;/p&gt;
&lt;h4&gt;反省させると犯罪者になります&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E5%8F%8D%E7%9C%81%E3%81%95%E3%81%9B%E3%82%8B%E3%81%A8%E7%8A%AF%E7%BD%AA%E8%80%85%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99-%E6%96%B0%E6%BD%AE%E6%96%B0%E6%9B%B8-%E5%B2%A1%E6%9C%AC-%E8%8C%82%E6%A8%B9/dp/4106105209/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1ANTH4WV4VEGY&amp;keywords=%E5%8F%8D%E7%9C%81%E3%81%95%E3%81%9B%E3%82%8B%E3%81%A8%E7%8A%AF%E7%BD%AA%E8%80%85%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99&amp;qid=1569134570&amp;s=books&amp;sprefix=%E5%8F%8D%E7%9C%81%E3%81%95%E3%81%9B%E3%82%8B%E3%81%A8,stripbooks,703&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=82fcefff373a673c947395c39442b57b&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4106105209&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4106105209&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2Igf75y&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なかなかショッキングなタイトルなのですが、受刑者と長く関わった経験から問題行動→即反省を求めるような風潮に警鐘をならすような本になっています。&lt;/p&gt;
&lt;p&gt;本の中では、犯罪などの問題行動を起こした後に沸き起こる感情がまず最初に反省であるべきということが不自然で、人はまず問題行動の後に「誰々に迷惑をかけてしまい申し訳ない」
と思うより「あぁなんあんなことしたんだろう・・・」「あいつのせいで・・・」など反省とは別の後悔や他人を責める感情が自然であるということが指摘されています。&lt;/p&gt;
&lt;p&gt;本冒頭では、筆者自身が接触事故を起こした際の感情を例に上記のことを説明していますが、自分が対物の事故をおこしてしまった時も「同乗者に申し訳ない・・・」という感情より
「なんであそこに石があるのに気づけなかったんだろう・・」などなど「こんなところで事故るなんてついてないなどなど」割と自己本位なことを考えていた記憶が蘇り、実感として確かにそうかもしれないと思わされました。&lt;/p&gt;
&lt;p&gt;こちらの本は、タイトルのショッキングさや一般的にあまり言われていない話でもうちょっと知りたいと思って買った本なのですが、
読んでみるともう少し生々しい話や実例なども交えて説明していたりして読んでいて非常に気づきがありました。&lt;/p&gt;
&lt;p&gt;刑務所での話が主になりますが人の本質的なところを語っているようで面白いので興味のある人は一度読んでみると良いかと思います。&lt;/p&gt;
&lt;h4&gt;なぜあなたの仕事は終わらないのか&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E4%BB%95%E4%BA%8B%E3%81%AF%E7%B5%82%E3%82%8F%E3%82%89%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%AF%E6%9C%80%E5%BC%B7%E3%81%AE%E6%AD%A6%E5%99%A8%E3%81%A7%E3%81%82%E3%82%8B-%E4%B8%AD%E5%B3%B6%E8%81%A1/dp/4905073413/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=24PQXE7H9JDED&amp;keywords=%E3%81%AA%E3%81%9C%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E4%BB%95%E4%BA%8B%E3%81%AF%E7%B5%82%E3%82%8F%E3%82%89%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B&amp;qid=1569134638&amp;s=books&amp;sprefix=%E3%81%AA%E3%81%9C%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE,stripbooks,282&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=114689e1777fa3d7a398f6b58a054690&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4905073413&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4905073413&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30lVRxu&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらは最近チラチラネットの動画でお顔を拝見する中島聡さんの本です。仕事術の本として読んでいてい面白いのですが、中島聡さんのマイクロソフト時代のエピソード
の話などがあって面白いです。&lt;/p&gt;
&lt;p&gt;本書でメインで語られている「ロケットスタート仕事術」ですが、これには結構同意していてエンジニアって頼まれた仕事だけやっていると本当に発注元が必要と
思う機能を実装するだけの仕事に終始してしまったり、システムの見積もり自体が難しいのでプログダクトの価値にクリティカルなもの以外は一定程度のバッファをとって納品するのが
ベストだと思っているのですが、これがまさにそれを体現する仕事術で全面的に賛成したい仕事の進め方でした。&lt;/p&gt;
&lt;p&gt;エンジニア界隈だと業務時間外に勉強しないといけないのか！みたいな話がありますが、個人レベルでは要は業務時間外に勉強しなくて済むような仕組みを作るか、
キャリアアップを諦めて少ない遺産を取り潰しながら仕事するかという選択な問題な気がしています。&lt;/p&gt;
&lt;p&gt;業務時間外に勉強したくないのであれば時間内に勉強できるような仕組みを作れば良いだけで、この「ロケットスタート仕事術」はそれのヒントになるのかなと思っています。
ロケットスタート仕事術では、見積もり期間の前半で全力でものを仕上げて後半は仕様の追加等なければ流すという内容なので、そこで勉強したい人は後半の空いている時間で勉強すれば良いということです。&lt;/p&gt;
&lt;p&gt;ちょっと色々書きましたが、仕事術としても当時のMSの状況を知る上でも面白いのでおすすめです。&lt;/p&gt;
&lt;p&gt;中島聡さんのブログ自体もなかなか読み応えがあるのでおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://satoshi.blogs.com/life/&quot;&gt;Life is beautiful&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;自分の時間を取り戻そう―――ゆとりも成功も手に入れられるたった1つの考え方&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E8%87%AA%E5%88%86%E3%81%AE%E6%99%82%E9%96%93%E3%82%92%E5%8F%96%E3%82%8A%E6%88%BB%E3%81%9D%E3%81%86%E2%80%95%E2%80%95%E2%80%95%E3%82%86%E3%81%A8%E3%82%8A%E3%82%82%E6%88%90%E5%8A%9F%E3%82%82%E6%89%8B%E3%81%AB%E5%85%A5%E3%82%8C%E3%82%89%E3%82%8C%E3%82%8B%E3%81%9F%E3%81%A3%E3%81%9F1%E3%81%A4%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9-%E3%81%A1%E3%81%8D%E3%82%8A%E3%82%93/dp/4478101558/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=%E8%87%AA%E5%88%86%E3%81%AE%E6%99%82%E9%96%93%E3%82%92%E5%8F%96%E3%82%8A%E6%88%BB%E3%81%9D%E3%81%86&amp;qid=1569134700&amp;s=books&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=f16cb65de51f4abbdb6a035a990f2048&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4478101558&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4478101558&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30CmL07&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらはちきりんさんの有名な本です。&lt;/p&gt;
&lt;p&gt;個人的にちきりんさんの本が本質をついているのに簡単な表現を使いながらわかりやすく言いたいことをまとめているのに驚いていて、
いくつか本を購入しているのですが、こちらは正社員時代に読んでなるほどと思った本になります。&lt;/p&gt;
&lt;p&gt;まず生産性という考え方をしっかり説明するところから、実際に4人のモデルケースを示しながらそれぞれのケースで仕事を効率化して生産性を高めて
「自分の時間」をいかに増やしていくかということを示す本になります。&lt;/p&gt;
&lt;p&gt;個人的にこの本で面白いと思ったのは、男性サラリーマンや共働きの女性などの一般的に家事や長時間労働に悩まされていそうな層以外に起業家をモデルケース
に取り上げている点になります。&lt;/p&gt;
&lt;p&gt;一般的に長時間労働が問題視される男女問はず忙しい社会であるというのは理解されているのですが、
起業家などは「好きでやっているんでしょ」とか「仕事とプライベート関係ないんでしょ」といった雰囲気のある層にも「自分の時間を取り戻そう」という提案をしているところが面白いと思いました。&lt;/p&gt;
&lt;p&gt;個人的に起業してある程度組織ができてくると自分が作ったはずなのにその組織に縛られてしまうみたいなことは
まぁまぁあると思っていてそれで悩んでいる人も一定程度いると思うのですが、そこをモデルケース組み込んで提案しているのは新鮮でした。&lt;/p&gt;
&lt;p&gt;こちらの本を読むとそもそも「生産性ってなんだっけ？」というところから考えることができるのでおすすめです。&lt;/p&gt;
&lt;h4&gt;マーケット感覚を身につけよう---「これから何が売れるのか?」わかる人になる5つの方法&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E6%84%9F%E8%A6%9A%E3%82%92%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%82%88%E3%81%86-%E3%80%8C%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E4%BD%95%E3%81%8C%E5%A3%B2%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%8B-%E3%80%8D%E3%82%8F%E3%81%8B%E3%82%8B%E4%BA%BA%E3%81%AB%E3%81%AA%E3%82%8B5%E3%81%A4%E3%81%AE%E6%96%B9%E6%B3%95-%E3%81%A1%E3%81%8D%E3%82%8A%E3%82%93/dp/4478064784/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1ZC9X2DWBBWYG&amp;keywords=%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E6%84%9F%E8%A6%9A%E3%82%92%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%82%88%E3%81%86&amp;qid=1569134752&amp;s=books&amp;sprefix=%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E6%84%9F%E8%A6%9A%E3%82%92,stripbooks,261&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=fb34b7c50ed93a3d6b8a8630501655a6&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4478064784&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4478064784&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2V7S6qx&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらはフリーランスになってからと、なる直前になるほどと思った本です。&lt;/p&gt;
&lt;p&gt;マーケット感覚とは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;商品やサービスが売買されている現場の、リアルな状況を想像できる能力&lt;/li&gt;
&lt;li&gt;顧客が、市場で価値を取引す場面を、直感的に思い浮かべられる能力&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;とのことなのですが、フリーランスともなるとやっぱりお客さんがどういったことをメリットと感じて契約してくれるのかというところを
考えないとダメだよねと思っているのですが、エンジニアのフリーランスだと間にエージェントが入ってくれたりしてなんとなくやれちゃう
風潮はあると思います。&lt;/p&gt;
&lt;p&gt;そんなかで、エージェント抜いて仕事取りたいだとか、単価あげたいという風に思った時にここら辺の感覚は大事になってくると思います。
エンジニアはシステム開発のお手伝いをすることでそのフィーをもらうことで価値の交換をしているのですが、単純な技術力だけだとお客さん側自体が
エンジニアでないことも多く区別がつかず報酬が平準化してしまいます。&lt;/p&gt;
&lt;p&gt;エンジニアとしてベースの技術力を高めることは必要不可欠ではあるのですが、技術力だけが単価に直結すると考えるのは少し視野が狭いかとも思うので、
フリーランスとして生活するのであれば自分がフリーランスとしてどのような価値を提供していてるのか？または他に提供できる価値はあるか？という視点で
日々の仕事を見返せると良いかと思います。&lt;/p&gt;
&lt;p&gt;この本はその考えるキッカケになるかと思うので手にとってみると良いかと思います。&lt;/p&gt;
&lt;h4&gt;Illustrator しっかり入門 増補改訂 第２版 【CC完全対応】［Mac &amp;#x26; Windows 対応］&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Illustrator-%E3%81%97%E3%81%A3%E3%81%8B%E3%82%8A%E5%85%A5%E9%96%80-%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82-%E3%80%90CC%E5%AE%8C%E5%85%A8%E5%AF%BE%E5%BF%9C%E3%80%91%EF%BC%BBMac-Windows/dp/479739725X/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=illustrator+%E3%81%97%E3%81%A3%E3%81%8B%E3%82%8A%E5%85%A5%E9%96%80&amp;qid=1569134859&amp;s=books&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=102c9a0001fb5a19c7a6106023a00d94&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=479739725X&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=479739725X&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30DiVUD&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;タイトル通りIllustlatorの入門書です。ネット上には断片的な情報や動画などはあるのですがとりあえず基本的なところを総ざらいするのであれば
本が一番良いかなと思い購入しました。&lt;/p&gt;
&lt;p&gt;自分でアプリ作ったりブログを作ったりしているとロゴ作ったりサムネイル作ったりをIllustlatorでやるので、
もっとちゃんと知れると便利だなということでネットでデザイナーさんが進めているものを購入しました。&lt;/p&gt;
&lt;p&gt;先に紹介したRailsの本のように機能が一通り紹介されているので、それとどうように網羅的にツールの機能を把握するのと使うところをつまみ読みする用途で使っています。&lt;/p&gt;
&lt;h4&gt;UI デザイナーのための Sketch 入門＆実践ガイド&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/UI%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AESketch%E5%85%A5%E9%96%80-%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88-%E5%90%89%E7%AB%B9-%E9%81%BC/dp/4802511159/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=UI+%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE+Sketch+%E5%85%A5%E9%96%80%EF%BC%86%E5%AE%9F%E8%B7%B5&amp;qid=1569134982&amp;s=books&amp;sr=1-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=b276b77f6637d63d01df3a4f8815640c&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4802511159&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4802511159&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2V9rNQX&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらもIllustlatorの同じ目的で購入した本です。やっぱりSketchは使われているだけでワイヤーフレーム的な複数画面をデザインする時はシンボルなどの機能が
あって便利なので、Illustratorと合わせてこちらの本を購入しました。&lt;/p&gt;
&lt;h3 id=&quot;番外編&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%95%AA%E5%A4%96%E7%B7%A8&quot; aria-label=&quot;番外編 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;番外編&lt;/h3&gt;
&lt;h4&gt;ブックタワー&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%83%AB%E3%83%8D%E3%82%BB%E3%82%A4%E3%82%B3%E3%82%A6-%E3%82%BF%E3%83%AF%E3%83%BC%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%95-Shateau-%E3%82%B7%E3%83%A3%E3%83%88%E3%83%BC-SHT-130/dp/B001V9KFQ8/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=SHT130(A)&amp;qid=1569135066&amp;s=books&amp;sr=8-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=7f0d0b19684eda6131b8adb9450c6015&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B001V9KFQ8&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=B001V9KFQ8&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2Ve39hV&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これは番外編ですが、本からちょっと引いて本棚の紹介です。&lt;/p&gt;
&lt;p&gt;先にも本は繰り返し読むというようなことをかいておいたのでできるだけ取り出しやすい位置に本を置いておきたいのですが、
そのまま机においておくとどこかちらかった感じになってしまい見栄えがあまりよくないです。&lt;/p&gt;
&lt;p&gt;が、このブックタワーだと暇な時にちょっと本をとったり、積み上げたりするのがかなり気軽にできます。&lt;/p&gt;
&lt;p&gt;本棚にしまうのも億劫な人にはこちらのブックタワーを使われることおすすめしておきます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;というわけで引っ越しを間近に控えた中で読んでよかった本をリストにまとめてみました。
一部本棚という番外編もまとめてみましたが、気になるものがあったらぜひ購入してみてください。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/09/20190922_summary-of-useful-books/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[NAS(ネットワークHDD)を使って"KonMari"してMackbook Proの容量を30GB近くあけた話]]></title><description><![CDATA[最近こんな記事を見つけて英語圏ではこんまりは動詞なんだなぁと感慨深かったのですが、(ちょっと古いですがFacebookするみたいな感じですかね) そういえば最近NASを使ってMacBook…]]></description><link>https://ver-1-0.net/blog/2019/09/09/exec-konmari-with-nas</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/09/09/exec-konmari-with-nas</guid><pubDate>Mon, 09 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近こんな記事を見つけて英語圏ではこんまりは動詞なんだなぁと感慨深かったのですが、(ちょっと古いですがFacebookするみたいな感じですかね)&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;ときめかない社員はレイオフされちゃうのか😭 &lt;a href=&quot;https://t.co/Mhiffc4uMG&quot;&gt;https://t.co/Mhiffc4uMG&lt;/a&gt;&lt;/p&gt;&amp;mdash; version1 (@version1_2017) &lt;a href=&quot;https://twitter.com/version1_2017/status/1170925813283225600?ref_src=twsrc%5Etfw&quot;&gt;September 9, 2019&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;そういえば最近NASを使ってMacBookの容量をこんまりしたら随分と快適になったなぁというのがあったのでその話を記事にまとめてみます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;NASって&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#NAS%E3%81%A3%E3%81%A6&quot; aria-label=&quot;NASって permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;NASって&lt;/h2&gt;
&lt;p&gt;IT業界にいても意外とNASという言葉を知らない人も多いのかなぁと思うのですがネットワークHDDのことです。
外付けのHDDはUSBで繋いでデータ通信しますが、それを無線でやるやつです。&lt;/p&gt;
&lt;p&gt;NASがあると家のWiFi環境下でデータ通信ができるので、家の中にいればスマートフォンやPCと連携した様々な便利な使い方ができたりします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.buffalo.jp/topics/knowledge/detail/nas-life.html&quot;&gt;NASってなに | バッファロー - Buffalo&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;MacBookProの容量256GBは限界&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#MacBookPro%E3%81%AE%E5%AE%B9%E9%87%8F256GB%E3%81%AF%E9%99%90%E7%95%8C&quot; aria-label=&quot;MacBookProの容量256GBは限界 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MacBookProの容量256GBは限界？&lt;/h2&gt;
&lt;p&gt;今使っているMacBookProの容量は256GBなのですが、すでに対策前の空き容量が10GB程度しかありません。。&lt;/p&gt;
&lt;p&gt;残り10GBならまだ意外と使えるかと思いきやXcodeのアップデートに容量が足りないと言われるし、Slack,Docker,Node,Chromeなんかを同時に立ち上げた日にはメモリが、
足りずにスワップファイルをガンガン吐き出して気づいた時には空き容量が2GBしかないなんてことが頻発してました。&lt;/p&gt;
&lt;p&gt;やはり256GBでは限界かと思っていた矢先仕事柄データが吹っ飛んだりすると業務にかなり支障が出るのでバックアップをとっておこうと思ってあったNASがあるのを思い出し、
NASを使ってこんまりしてみたところなんと30GB近く削減し、だいぶ余裕をもって作業ができるようになりました。&lt;/p&gt;
&lt;p&gt;MacBookを新たに買い換えて512GBのSSDなどにすると20万弱かかってしまうところを新たなNASの購入(あとで紹介しますが1万円程度)だけで済ませられたのでかなり得した気分になりました。&lt;/p&gt;
&lt;h2 id=&quot;NASを使ってMacBookの容量削減&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#NAS%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6MacBook%E3%81%AE%E5%AE%B9%E9%87%8F%E5%89%8A%E6%B8%9B&quot; aria-label=&quot;NASを使ってMacBookの容量削減 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;NASを使ってMacBookの容量削減&lt;/h2&gt;
&lt;p&gt;NASとかいう難しい単語が出てくると何やら難しいことをしてそうですが、要は外付けのHDDにPCの重いファイルを追いやったということです。&lt;/p&gt;
&lt;p&gt;NASはこちらのバッファローのNASです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/34KN5sg&quot;&gt;BUFFALO NAS スマホ/タブレット/PC対応 ネットワークHDD 2TB LS210D0201G&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B07GT1G71N/ref=as_li_ss_il?ie=UTF8&amp;psc=1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=9dc419772964ab20174900c9f027a755&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B07GT1G71N&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=B07GT1G71N&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;1万円するのでちょっとためらうかもしれませんが、これ一つ家に置いておけばPCのバックアップやスマホのバックアップなどを
このHDDに保存しておけますし、常に使うわけではない容量の大きいファイルをこちらにうつしておけばlaptopの容量も削減できます。&lt;/p&gt;
&lt;p&gt;僕は2TBのものを買いましたが、記事を買いている時にみてみると1TBも2TBも全然値段かわらないみたいです。
バックアップファイルのことを考えると1TBだとちょっと不安なので2TBを購入しました。&lt;/p&gt;
&lt;h3 id=&quot;MacBook-ProからNASに移動する対象のファイル&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#MacBook-Pro%E3%81%8B%E3%82%89NAS%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B%E5%AF%BE%E8%B1%A1%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&quot; aria-label=&quot;MacBook ProからNASに移動する対象のファイル permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MacBook ProからNASに移動する対象のファイル&lt;/h3&gt;
&lt;p&gt;今回PCの容量を開ける時にMacbookから移動したファイルは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;スマホのバックアップファイル（10GB弱)&lt;/li&gt;
&lt;li&gt;iTunesの音声ファイル(20GB程度）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;です。スマホのバックアップファイルはまぁなるほどという感じだとおもうのですが、
iTunesの音声ファイルが特におすすめです。音声ファイルというとちょっと無機質な感じですが
昔から秘伝のタレのようにつくりあげられた好きなミュージシャンの曲のリストたちです。&lt;/p&gt;
&lt;p&gt;音楽って普段聞かないけど、なぜか急に無性に聞きたくなるときとか気分を変えて昔のアルバムかけてみたりとかする時が
ありなかなか消せなかったりします。長年積み上げていくと本当にバカにならないくらいかさばります。&lt;/p&gt;
&lt;p&gt;ファイルを移動する前は、**「聞きたい時に毎回HDDから吸い上げて聞くのちょっと怠いな」**と思っていたのですが、
調べてみるとiTunesのミュージックの保存先は自分で設定できるし、PCをNASに接続しておけばNASのディレクトリをマウント（PCのディレクトリのように扱えるようにする）
できるので、&lt;strong&gt;PCを立ち上げてNASの中にある曲を直接聞く&lt;/strong&gt;なんてことができます。&lt;/p&gt;
&lt;h3 id=&quot;iTunesでNASにある曲を聞くための設定方法&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#iTunes%E3%81%A7NAS%E3%81%AB%E3%81%82%E3%82%8B%E6%9B%B2%E3%82%92%E8%81%9E%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95&quot; aria-label=&quot;iTunesでNASにある曲を聞くための設定方法 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;iTunesでNASにある曲を聞くための設定方法&lt;/h3&gt;
&lt;p&gt;手順としては&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PCにあるファイルをNASの特定のフォルダに移動&lt;/li&gt;
&lt;li&gt;iTunesの曲のリストを削除&lt;/li&gt;
&lt;li&gt;iTunesで音声ファイルの保存先の設定で1.のフォルダを指定&lt;/li&gt;
&lt;li&gt;iTunesのメニューからライブラリに追加でNASに移したファイルを指定して読み込み&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;となります。&lt;/p&gt;
&lt;p&gt;2.の部分で曲のリストを削除するときは、iTunesのライブラリから削除するのであって&lt;strong&gt;ファイル自体を消すわけではない&lt;/strong&gt;ので注意してください。
iTunesから右クリック削除で最初に「本当に消しますか？」と着替えてyes、次に「パソコンからファイルを消しますか？」と聞かれるのでここでNoを選べば
iTunesのライブラリから削除するだけですみます。&lt;/p&gt;
&lt;p&gt;またPCとNASの接続方法やマウント方法は各端末のマニュアルにしたがって頂ければと思います。&lt;/p&gt;
&lt;h4&gt;1. NASの特定のフォルダに移動&lt;/h4&gt;
&lt;p&gt;こちらはタイトル通り、iTunesのフォルダに保存されているファイルをNASの特定のフォルダに移動します。
サイズがでかい場合は何回かステップを分けて移動すると良いかと思います。&lt;/p&gt;
&lt;p&gt;iTunesの音楽ファイルは「Finder &gt; Music &gt; iTunes &gt; iTunes Media &gt; Music」配下にアーティストごと置いてあるので
Music配下のフォルダを階層ごとNASのディレクトリに移動します。&lt;/p&gt;
&lt;h4&gt;2. iTunesの曲のリストを削除&lt;/h4&gt;
&lt;p&gt;音声ファイルを再読み込みをするのに一旦iTunesのライブラリから曲を削除します。この時に先に書いたようにファイルごと削除してしまわないように気をつけてください。&lt;/p&gt;
&lt;p&gt;当初iTunesの音声ファイルの保存先を移動したらいい感じに読み込んでくれるのかなと思ったのですが、
保存先を変更した後に曲を再生するとファイルが見つかりませんとなってうまく行かなかったので、保存先を変更する前に一度
ファイルをライブラリから削除しておくと良いと思います。&lt;/p&gt;
&lt;h4&gt;3. iTunesの保存先を変更&lt;/h4&gt;
&lt;p&gt;iTunesの保存先の変更はiTunesからできます。 「iTunes メニュー &gt; 環境設定 &gt; 詳細 &gt; フォルダの場所「変更...」」から変更できます。&lt;/p&gt;
&lt;h4&gt;4. NASに移動したファイルの読み込み&lt;/h4&gt;
&lt;p&gt;「iTunes メニュー &gt; ファイル &gt; ライブラリに追加」からNASに移動したファイルを指定してNASのファイルを読み込みます。&lt;/p&gt;
&lt;p&gt;以上、ここまでの手順でiTunesの音声ファイルをNASに移動してPCの容量を空けながら、お気に入りの音楽を聞くことができるようになります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回は、iTunesの音声ファイルを移動する方法でのNASの活用方法を紹介しましたが、まだまだNASを活用して容量をあけることがで来そうな気がします。&lt;/p&gt;
&lt;p&gt;ストレージは本当に容量を大きくすれば大きくしただけスペースを埋めてしまうので本当に際限ないです。特にストレージがSSDとかになると結構
コストもかかってくるのでHDDとうまく使い分けてコスパよく運用できると良さそうです。&lt;/p&gt;
&lt;p&gt;PCの中でもよく使うファイルと時々使うファイルが分かれるので、そこをうまく切り分けて使用頻度の少ないものはNASに移すということができると良さそうですね。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/09/20190909_exec-konmari-with-nas/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Oculus Quest + Immersed VRでVR空間でプログラミング]]></title><description><![CDATA[前回の記事で紹介したようにOculus Questを購入したわけなのですが、
購入の動機に「VR空間でプログラミングできるか試したい！」というのがありました。 VR…]]></description><link>https://ver-1-0.net/blog/2019/08/25/oculus-quest-immersed</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/08/25/oculus-quest-immersed</guid><pubDate>Tue, 27 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/blog/20190824/review-oculus-quest&quot;&gt;前回の記事&lt;/a&gt;で紹介したようにOculus Questを購入したわけなのですが、
購入の動機に「VR空間でプログラミングできるか試したい！」というのがありました。&lt;/p&gt;
&lt;p&gt;VR空間でのプログラミングをする時の考えうるメリットは、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ディスプレイなしで大画面を映し出してコードがかける&lt;/li&gt;
&lt;li&gt;自分の好きな仮想オフィスで空間の雰囲気を楽しみながらコードをかける&lt;/li&gt;
&lt;li&gt;アバターなどを使って、仮想オフィスを実現できる？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;あたりかと思っているのですが、どうでしょうか？&lt;/p&gt;
&lt;p&gt;ディスプレイなしで大画面を映し出せるなんて、自分の家の省スペースにもなるし、旅先でちょっとコード書きたい
なという時とかにゴーグルつけてプログラミングできたら最高ですよね（外出先などでやるのは多少勇気が必要ではありますが・・）&lt;/p&gt;
&lt;p&gt;今回はOculus Quest + 最近無料トライアルが開始されたImmersed VRで仮想デスクトップ環境を楽しんでみます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;MacではVirtual-Desktopが使えない&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Mac%E3%81%A7%E3%81%AFVirtual-Desktop%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84&quot; aria-label=&quot;MacではVirtual Desktopが使えない permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MacではVirtual Desktopが使えない・・・&lt;/h2&gt;
&lt;p&gt;Oculusを手に入れた後に、よっしゃVR空間でプログラミングしようと思って、ちょっと調べてみると
なにやらVirtual DesktopというアプリでPCにログインして、その画面をVR空間に映し出せるそうなのですが、
なんとこれMacには対応していないようで嬉々としてVirtual Desktopに期待していた自分はかなり落ち込みました。
(実はまちがって購入してしまいました・・・）&lt;/p&gt;
&lt;p&gt;なんとかMacでも自分のPCをVRの大画面に写し込んで作業ができないのか、大画面のディスプレイを使う代わりにVRゴーグルで代替できないかというのを調べてみるとなんと、
Redditのでなにやら&lt;strong&gt;Immersed&lt;/strong&gt;というアプリが人生を変えたみたいな大げさな書き込みを発見したのでImmersedというワードで調べてみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://immersedvr.com/&quot;&gt;https://immersedvr.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Immersed自体はアメリカのベンチャーらしいのですが、会社のページに飛んでみると実際にImmersedを使用している映像が動画で公開されています。
動画をみてみるとなにやらVR空間にブラウザやエディタのスクリーンが映し出されていておぉぉぉ！まさにこれぞ求めていたものという感じです。&lt;/p&gt;
&lt;p&gt;さらに今なら14日間の無料トライアルがあるそうなので、試してみました。&lt;/p&gt;
&lt;h2 id=&quot;Immersedを試してみる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Immersed%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B&quot; aria-label=&quot;Immersedを試してみる permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Immersedを試してみる&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190825_oculus-quest-immersed/immersed.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;セットアップの仕方やインストールの仕方など細々した話はあると思いますが、まずこの動画をみてもらえるとImmersedをより
リアルにわかってもらえるかと思います。&lt;/p&gt;
&lt;p&gt;動画を見てもらえばわかる通り、アプリを起動すると自分が仮想オフィスにいるような状態でスタートし、目の前にメニュー画面が
表示されて仮想オフィスの設定やらなにやらができるようになっています。&lt;/p&gt;
&lt;h3 id=&quot;仮想オフィスの設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BB%AE%E6%83%B3%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9%E3%81%AE%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;仮想オフィスの設定 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;仮想オフィスの設定&lt;/h3&gt;
&lt;p&gt;ここで、強調しておきたい一つ目が&lt;strong&gt;仮想オフィスの部屋や背景をメニュー画面から変更&lt;/strong&gt;をすることができます。&lt;/p&gt;
&lt;p&gt;こんな感じで雲の上で作業しても良いし
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190825_oculus-quest-immersed/Immersed-sky.jpg&quot; alt=&quot;immersed start&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こんな感じで緑豊かな草原のど真ん中で作業しても良いし、宇宙船のような中で作業するもよしです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190825_oculus-quest-immersed/Immersed-glass.jpg&quot; alt=&quot;immersed glass&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;背景自体はメニュー画面からかなり手軽に変えられるので、ちょっと気分変えたいなとおもったら変えたりできるのでPCの
デスクトップのような感じの気軽さで変更できてしまいます。&lt;/p&gt;
&lt;p&gt;最初メニュー画面を操作をしていて、メニュー画面をクリックして背景を変えようと思ったのですが、何回クリックしても
変わらないみたいな現象があり、「全然使えないじゃん」と思ったのですが、どうやらメニュー画面の裏にキーボードがあると
うまく反応してくれないらしくメニュー画面をいじるときはソフトウェアキーボードをしまうかメニュー画面の裏にこないように
ずらすなどしてあげると良さそうです。&lt;/p&gt;
&lt;h3 id=&quot;Eliteプランで最大5つまで伸縮自在のスクリーンを表示可能&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Elite%E3%83%97%E3%83%A9%E3%83%B3%E3%81%A7%E6%9C%80%E5%A4%A75%E3%81%A4%E3%81%BE%E3%81%A7%E4%BC%B8%E7%B8%AE%E8%87%AA%E5%9C%A8%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%92%E8%A1%A8%E7%A4%BA%E5%8F%AF%E8%83%BD&quot; aria-label=&quot;Eliteプランで最大5つまで伸縮自在のスクリーンを表示可能 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Eliteプランで最大5つまで伸縮自在のスクリーンを表示可能&lt;/h3&gt;
&lt;p&gt;ほかにも標準でホワイトボードが使えるようなサブ機能もあるのですが、
なんといっても一番大事なPCスクリーンをVR空間に映し出す部分に関してはかなり融通がきくようになっています。&lt;/p&gt;
&lt;p&gt;４つある料金プランのうちのトライアルで体験できるEliteプランの場合、&lt;strong&gt;最大5つまでの仮想スクリーン&lt;/strong&gt;を立ち上げることができます。
動画ですと三つまでしか表示してないですが、プランに応じて複数枚のスクリーンを写しだすことができます。&lt;/p&gt;
&lt;p&gt;また、それぞれのスクリーンは伸縮自在の遠近も変更できます。
メインの画面は前側に写して、サブの画面は後ろにおいやるとかも全然できます。&lt;/p&gt;
&lt;p&gt;画面のサイズは自分にあった程よいサイズを選択することができそうで、若干文字が見づらいなどがある場合は解像度の調整を加えて
ちょうど良いバランスを見つけてあげると良さそうです。&lt;/p&gt;
&lt;h3 id=&quot;キーボードはそのままPCのキーボードを使用できる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AF%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BEPC%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B&quot; aria-label=&quot;キーボードはそのままPCのキーボードを使用できる permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;キーボードはそのままPCのキーボードを使用できる&lt;/h3&gt;
&lt;p&gt;これは当たり前かもしれませんが、一応断っておくとPCのスクリーンはVR空間に映し出されますが実際の操作は
Macのキーボードやトラックパッドで操作できます。外付けのキーボードを使っている方はそのまま外付けのキーボードを使うことができます。&lt;/p&gt;
&lt;p&gt;VR空間上にはソフトウェアキーボードが映し出されますが、物理キーボードがそのまま使えて、jキーを押せばソフトウェアキーボードの
jキーが光るという感じでキーボードの対応はしています。普段キーボードで入力をする際にあまり手元を見ている感覚はないのですが、
実際にゴーグルをかぶった状態でタイプしろと言われると結構ミスるようになります。（というか、慣れないと全然ダメ）&lt;/p&gt;
&lt;p&gt;物理キーボードで入力できるのでわざわざソフトウェアキーボード表示させる必要ないとも思ったのですが、意外とソフトウェアキーボードがないと
自分がどこを打ってミスっているのかわからないので、ソフトウェアキーボードは画面のチラ見できる位置に置いておくと良いのかもしれません。&lt;/p&gt;
&lt;p&gt;Immersed社のサイトを見てもQuestへのキーボードの直接接続にも対応すると書いてあったりするので、もしかしたらいつか自分の物理キーボードを
VR空間常に表示できてほとんどリアルと変わらずにタイプできる日がやってくるのかもしれません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;とまぁ一旦ここまでで紹介は終わりにし後回しにしていたインストールの手順などを簡単に説明してきたいと思います。&lt;/p&gt;
&lt;h2 id=&quot;セットアップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97&quot; aria-label=&quot;セットアップ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;セットアップ&lt;/h2&gt;
&lt;p&gt;早速、セットアップの説明を進めていくとOculus QuestでImmersedを使う場合はこちらから無料トライアルを開始できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://immersedvr.com/quest&quot;&gt;https://immersedvr.com/quest&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;フォームにメールを打ち込んで送信を行うとメールが届きます。無料トライアルではEliteプランを楽しめるそうで
Eliteプランだと5つのヴァーチャルスクリーンやオフラインモードなどなどが楽しめるそうです。Eliteプランの料金は&lt;strong&gt;月額だと9.99ドル&lt;/strong&gt;で利用可能だそうです。
(だいたい 1 Netflix くらいですかね)&lt;/p&gt;
&lt;p&gt;料金表をみるとEliteプランの下のProプランと料金が一緒なのは期間限定なんでしょうか？？ちょっとわからずですがとりあえずトライアルを試してみましょう。&lt;/p&gt;
&lt;h4&gt;Oculusへアプリをインストール&lt;/h4&gt;
&lt;p&gt;早速先ほどの招待画面からメールアドレスを入力して送信するとImmersedから招待コードへのリンク付きのメールが送られてきます。&lt;/p&gt;
&lt;p&gt;招待コードをOculusの設定画面から入力するとOculusにアプリをインストールすることができます。&lt;/p&gt;
&lt;h4&gt;Macに画面共有用のエージェントアプリをインストール&lt;/h4&gt;
&lt;p&gt;Oculus側にアプリがインストールできたら、今度はMac側にAgentアプリをインストールします。
（アプリはメールで送られるリンク先からダウンロードできます。）&lt;/p&gt;
&lt;p&gt;ダウンロードのあとPCの再起動などが必要ですが、アプリの画面の指示にしたがってインストールを行なっていきます。&lt;/p&gt;
&lt;h4&gt;エージェントアプリを立ち上げつつ、OculusでImmersedを立ち上げ&lt;/h4&gt;
&lt;p&gt;Mac側のエージェントアプリがインストールできたら、あとはそのアプリを立ち上げたままOculus側でImmersedを立ち上げて、
メニュー画面でConnectというボタンを押すだけです。&lt;/p&gt;
&lt;p&gt;ここまですごく簡単にではありますが、インストール方法を書きましたが、まぁそこまで難しいこともないと思います。
メールやメールで送られてくるリンクなどにしたがって設定していけばすんなりセットアップできるかと思います。&lt;/p&gt;
&lt;h2 id=&quot;Immersedは実運用に耐えるのか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Immersed%E3%81%AF%E5%AE%9F%E9%81%8B%E7%94%A8%E3%81%AB%E8%80%90%E3%81%88%E3%82%8B%E3%81%AE%E3%81%8B&quot; aria-label=&quot;Immersedは実運用に耐えるのか permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Immersedは実運用に耐えるのか？&lt;/h2&gt;
&lt;p&gt;ちょっとセットアップと紹介の順序がバラバラになってしまいあれなのですが、最後はちょっとImmersedを触ってみて
実際にImmersedを使って仕事したり、趣味のコードを書いたりできるのか？というところをまとめて置こうかと思います。&lt;/p&gt;
&lt;p&gt;結論としては、
&lt;strong&gt;実導入にはまだちょっと早いかな&lt;/strong&gt;というのが今回使ってみた感想です。&lt;/p&gt;
&lt;p&gt;ただ、実際問題として引越しのたびに巨大な物理ディスプレイを箱に詰めて運んだり、購入したりとかってやっぱり相当
面倒ですし、自宅に何枚ものディスプレイを設置してなんかしていると相当場所とるしお金もかかるのでかなり、
こういったVR空間のオフィスみたいなものには期待しています。&lt;/p&gt;
&lt;p&gt;Immersedには他のユーザとのコラボレート機能もあるようなので機会があったら試してみたいのですが、VR上のオフィスを
実際に運用できると通勤の手間などなくなってよくて憧れますよね。&lt;/p&gt;
&lt;p&gt;その他、使ってみて気になる点としては、やっぱり&lt;strong&gt;キーボード&lt;/strong&gt;のところでなれの問題もあるかとは思うのですが、ゴーグルつけながらの
キーボードになれずタイプミスがかなり起きてしまいます。物理キーボードをVR空間に表示できるとかなりここは改善できそう
な気がするのですがどうなんでしょう？（VRの開発については無知なので完全に雰囲気で書いてます）&lt;/p&gt;
&lt;p&gt;また、入力時のラグがやはり若干あるかと思っていて普通のPCになれているとちょっとストレスに感じるかもしれません。
またちょこちょこポインタが動かなくなったり、クリックできなくなったりというのがあるのでこれも含めてまだちょっと早いという
ジャッジでした。&lt;/p&gt;
&lt;p&gt;そのほか&lt;strong&gt;デバイスの問題&lt;/strong&gt;もあり、Questの場合、充電満タンからでも2, 3時間程度しか充電がもたなかったりするのでそういった
障害もありそうです。ゴーグルが重い問題は、最初は感じましたがその他ゲームなどやるうちにだんだん慣れてきて意外と気にならないのかな
という感じです。&lt;/p&gt;
&lt;p&gt;ImmersedのCEOのブログでVRで作業しているなどなど書いてあったのでやろうと思えればできるっぽいです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.immersed.team/working-in-vr-8-hrs-day-e8308b6791f0&quot;&gt;Working in VR 8+ hrs/day&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;というわけで、今回はVR空間での作業空間をつくるツールとしてImmersedを紹介してみました。&lt;/p&gt;
&lt;p&gt;先にも書きましたように、実際に使えるか？といわれるとハッキリとyesとは答えられませんが、思ったよりはリアルと変わらずにプログラミングしたり、
記事を書いたりできそうです。&lt;/p&gt;
&lt;p&gt;今回は個人での利用に絞って記事をかきましたが、Immersedは部屋を作って人を招待したりもできる他ユーザとのコラボレートの機能もあるようなので、
機会があれば試してみたいですね。試したらまた記事書くかもしれません。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30ti9KM&quot;&gt;Oculus Quest (オキュラス クエスト) 2019 単体型VRヘッドセット&lt;/br&gt;スマホPC不要 (64GB) [並行輸入品]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Oculus-Quest-%E3%82%AA%E3%82%AD%E3%83%A5%E3%83%A9%E3%82%B9-%E5%8D%98%E4%BD%93%E5%9E%8BVR%E3%83%98%E3%83%83%E3%83%89%E3%82%BB%E3%83%83%E3%83%88-%E3%82%B9%E3%83%9E%E3%83%9BPC%E4%B8%8D%E8%A6%81/dp/B07R969TWG/ref=as_li_ss_il?&amp;hvadid=342493870461&amp;hvpos=1o1&amp;hvnetw=g&amp;hvrand=16440189435732123424&amp;hvpone=&amp;hvptwo=&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=1009310&amp;hvtargid=pla-758684229535&amp;psc=1&amp;tag=&amp;ref=&amp;adgrpid=70578044762&amp;hvpone=&amp;hvptwo=&amp;hvadid=342493870461&amp;hvpos=1o1&amp;hvnetw=g&amp;hvrand=16440189435732123424&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=1009310&amp;hvtargid=pla-758684229535&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=2ad6804f92715766f8ce1cc3a76969b5&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B07R969TWG&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=B07R969TWG&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/08/20190825_oculus-quest-immersed/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[VRゴーグルのOculus Quest(クエスト)が届いたのでその感想]]></title><description><![CDATA[Oculus Questとは？ Oqulus Questとは今年6月にOculus社から発売されたスタンドアローン型(PCと繋がなくてすむ)のVRゴーグルです。 Oculusから出ているゴーグルには他にもRift, Goなどなどの製品がありQuest…]]></description><link>https://ver-1-0.net/blog/2019/08/24/review-oculus-quest</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/08/24/review-oculus-quest</guid><pubDate>Sat, 24 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;Oculus-Questとは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Oculus-Quest%E3%81%A8%E3%81%AF&quot; aria-label=&quot;Oculus Questとは permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Oculus Questとは？&lt;/h2&gt;
&lt;p&gt;Oqulus Questとは今年6月にOculus社から発売されたスタンドアローン型(PCと繋がなくてすむ)のVRゴーグルです。&lt;/p&gt;
&lt;p&gt;Oculusから出ているゴーグルには他にもRift, Goなどなどの製品がありQuestはその新作です。&lt;/p&gt;
&lt;p&gt;カンファレンス等々でVRゴーグルは試したことはあるのですが(そのゴーグルがなんだったかは覚えていない。。)、手元にあるだけで自分で開発して遊んだりできるので今回思い切って購入してみました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;Oculus-Questの購入設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Oculus-Quest%E3%81%AE%E8%B3%BC%E5%85%A5%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;Oculus Questの購入設定 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Oculus Questの購入・設定&lt;/h2&gt;
&lt;p&gt; 
QuestはOculus社の公式サイトから購入できますが、Amazonでも買えるようです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/30ti9KM&quot;&gt;Oculus Quest (オキュラス クエスト) 2019 単体型VRヘッドセット&lt;/br&gt;スマホPC不要 (64GB) [並行輸入品]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Oculus-Quest-%E3%82%AA%E3%82%AD%E3%83%A5%E3%83%A9%E3%82%B9-%E5%8D%98%E4%BD%93%E5%9E%8BVR%E3%83%98%E3%83%83%E3%83%89%E3%82%BB%E3%83%83%E3%83%88-%E3%82%B9%E3%83%9E%E3%83%9BPC%E4%B8%8D%E8%A6%81/dp/B07R969TWG/ref=as_li_ss_il?&amp;hvadid=342493870461&amp;hvpos=1o1&amp;hvnetw=g&amp;hvrand=16440189435732123424&amp;hvpone=&amp;hvptwo=&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=1009310&amp;hvtargid=pla-758684229535&amp;psc=1&amp;tag=&amp;ref=&amp;adgrpid=70578044762&amp;hvpone=&amp;hvptwo=&amp;hvadid=342493870461&amp;hvpos=1o1&amp;hvnetw=g&amp;hvrand=16440189435732123424&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=1009310&amp;hvtargid=pla-758684229535&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=2ad6804f92715766f8ce1cc3a76969b5&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B07R969TWG&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=B07R969TWG&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;p&gt;ただ結局Amazonですと在庫がなかったりとか、表示が分かりづらく違ったものを買ってしまったり、正規の値段より高く買ってしまうのが嫌だったので今回は公式サイトから購入しました。
(これを書いている段階でAmazonと公式の値段を比べてみると公式の方が安そうですね。）&lt;/p&gt;
&lt;p&gt;公式サイトから購入フローを完了させると、メールでトラッキングのリンクが送られてくるので、それで発送日時が分かります。&lt;/p&gt;
&lt;p&gt;今回は注文してから1週間程度で届きました。ここらへんにかかる時間はやっぱりAmazonの方が早いのかもしれません。&lt;/p&gt;
&lt;p&gt;というわけで、&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190824_review-oculus-quest/oculus_box.jpg&quot; alt=&quot;oculus 箱&quot;&gt;&lt;/p&gt;
&lt;p&gt;無事クエストさんが届きました。&lt;/p&gt;
&lt;p&gt;箱のふたをあけるとこんな感じ&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190824_review-oculus-quest/oculus_open.jpg&quot; alt=&quot;oculus 開けた時&quot;&gt;&lt;/p&gt;
&lt;p&gt;でして、同梱物は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ゴーグル&lt;/li&gt;
&lt;li&gt;メガネ用のスペーサ&lt;/li&gt;
&lt;li&gt;コントローラ二個 + 電池&lt;/li&gt;
&lt;li&gt;充電ケーブル&lt;/li&gt;
&lt;li&gt;説明書&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のようになっています。普段自身がメガネをかけているのでメガネをかけながらでもゴーグルをつけて
楽しめるかちょっと不安でしたが、メガネ用のスペーサも一緒に入っておりメガネをつけて遊ぶ人はこのスペーサを
取り付けてメガネをつけながらでもVRの世界を楽しむことができます。&lt;/p&gt;
&lt;p&gt;セットアップは、携帯にアプリをインストールして行いますが難しいことはありませんでした。
アプリをインストール後簡単な設定をしてゴーグルをWifiに繋いで、ちょっと設定をするとすぎにQuestのチュートリアルを
始めることができました。&lt;/p&gt;
&lt;p&gt;最初にゴーグルをつけてみるとわかるんですが、やっぱり没入感が半端ないです。クエストを遊ぶ前に
VRの空間上に動き回れるエリアを設定できるのですが、コントローラで部屋の中の安全なエリアのラインを書くと
そのまま仮想の壁が浮き上がってきて遊ぶ前からバーチャルな壁が見えてテンションが上がります。&lt;/p&gt;
&lt;p&gt;いきなりお目当のゲームを購入して遊ぶのでもよかったのですが、部屋の一室にいるだけなんですがゴーグルをつけてると
ホームのスペース（webでいうトップ画面、メニュー画面てきなところ）が広すぎて立派なインテリアとかがあるので
それを見渡すだけでも十分楽しめました。&lt;/p&gt;
&lt;p&gt;また、コントローラをいじりながらどんなゲームがあるのかなぁとかをみているとデモのゲームがあったので
それで遊びがてらVR空間になれるというのをやっていきました。デフォルトで遊べるのはデモのゲームと
ブラウザでしたがデモでも何回もやっても楽しい感じでついついデモで遊びすぎました。&lt;/p&gt;
&lt;p&gt;あとで紹介するCreedやBeet Saberなどがデモで遊べるのでOculus Questを購入したら最初遊んでみると良いかと思います。&lt;/p&gt;
&lt;h2 id=&quot;Oculus-Questで充電できない&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Oculus-Quest%E3%81%A7%E5%85%85%E9%9B%BB%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84&quot; aria-label=&quot;Oculus Questで充電できない permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Oculus Questで充電できない&lt;/h2&gt;
&lt;p&gt;デモでも楽しめるくらいのOculus Questですが、その楽しい時間もつかの間、開封したままの十分じゃない充電状態から
夢中になって遊んでいると、画面には充電が20%を切った表示が出てしばらくすると電池が切れて電源が切れてしまいました。&lt;/p&gt;
&lt;p&gt;「今日はこれくらいにしてやるか・・・」という感じでその日は、正規の充電コードにつないで寝ました。&lt;/p&gt;
&lt;p&gt;次の日また、VR空間を楽しみにゴーグルをつけて見てみるとなんと夜一杯充電したにも関わらず、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;電池残量が5%ということで全然充電できていませんでした。。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Questはデフォルトでゴーグルをかぶるとセンサーが反応して電源がつくのですがなんかそれが悪さしてあまり電源が消費されちゃったのかな
と思いながら、我慢してまた半日ゴーグルを充電しました。&lt;/p&gt;
&lt;p&gt;半日経ったあと再度充電を確認すると今度は電池残量20%・・・現代社会では体感したことのないくらいの充電速度で
「最新のゲーム機ってやっぱこういうもんなの・・」と考えながら長い時間かけて進めたスーパーファミコンのRPGのデータが
平気で吹っ飛ぶ理不尽さが頭をよぎりました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まだチュートリアルとデモ程度してか遊んでないゴーグルでこんだけしか遊べないという危機感からネットの情報を漁ってみると&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oculusのゴーグルは43度以上になると充電されない仕様となっている&lt;/li&gt;
&lt;li&gt;ゴーグルの置き方に気をつけないとセンサーが作動して電源が入ってしまう&lt;/li&gt;
&lt;li&gt;バッテリーが新しいと充電が遅い？？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などなどの情報がでてきました。
※ネットの情報で真偽は不明なので参考にする際は十分注意してください&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ということでこれらの情報を頭におきつつ色々と気をつけて充電をしてみますが、一時間充電しても充電が1, 2%しか増えないという危機的な情報でした。
そろそろちゃんと公式に問い合わせをしようと重い腰をあげようとしたのですが、ふと&lt;strong&gt;正規のコードが悪いのでは&lt;/strong&gt;とおもったので
別のコード（普通にどこにでもあるUSB =&gt; USB Type-Cのコード）で充電すると&lt;strong&gt;みるみるうちに充電が溜まっていきます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ということで、なんと正規品のコードが原因で充電がたまらなかったようです。。初期不良なのかなんなのかわからないのですが
わざわざ問い合わせてもらってコードを交換してもらう必要もなさそうだしまぁいいかということで今は普通にそこらへんのコードで充電しています。&lt;/p&gt;
&lt;p&gt;なにはともあれ、初期不良とかでゴーグルごと交換されてしばらく遊べないとかは避けられたのでひとまずほっとしました。&lt;/p&gt;
&lt;h2 id=&quot;Oculus-Questで遊んでみた感想&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Oculus-Quest%E3%81%A7%E9%81%8A%E3%82%93%E3%81%A7%E3%81%BF%E3%81%9F%E6%84%9F%E6%83%B3&quot; aria-label=&quot;Oculus Questで遊んでみた感想 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Oculus Questで遊んでみた感想&lt;/h2&gt;
&lt;p&gt;と、そんなこんなでなんとかクエストで無事遊べるようになったわけなのですが、レビューらしいことも書いていなかったので、
感想を書いてみます。&lt;/p&gt;
&lt;p&gt;やはりスタンドアローン型ということで、実際に立ち上がってあるいたり、VR空間上の物を掴めたり、自分の動きがVR空間にリアルタイムで
反映されてというところで相当な没入感を味わうことができます。&lt;/p&gt;
&lt;p&gt;実際に歩くとなるとそもそも部屋の中でそんなスペースがとれるわけではないので、腕を振ることで移動を代替はしていますが、
自分の動きと空間内のキャラクタの動きが連動していて自分がVR空間の一員であることを十分に感じることができます。&lt;/p&gt;
&lt;p&gt;バッテリーに関しては満タンまで充電して、2、3時間遊べるという感じでゲームに熱中しているとちょっと足りないかなと思うこともあるのですが、
Beat Saberなどのようなガンガン体を動かすゲームだと結構体力的にも消費されるのでまぁちょうど良いかなと感じる部分もあるかと思います。&lt;/p&gt;
&lt;p&gt;ここからは自分が遊んだゲームを順番に紹介していきます。&lt;/p&gt;
&lt;h4&gt;Beat Saber&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190824_review-oculus-quest/beat-saber-title.png&quot; alt=&quot;Beat Saber Title&quot;&gt;&lt;/p&gt;
&lt;p&gt;Beat Saberは、Questを買ったら遊ぶべきゲームタイトル！みたいなやつにはほとんど入っています。
というか、最初からデモからインストールされているので、プレイする人は多くいるんじゃないかと思います。&lt;/p&gt;
&lt;p&gt;ゲーム自体は、ライトセーバーを両手に持ってリズムに合わせながら、流れてくる赤や青のボックスをひたすら叩き斬るリズムゲームです。
これまでにヒットしたリズムゲームは太鼓の達人やダンレボなどなどありますが、このBeat Saberは実際にボックスが自分に流れてくるので、
プレイに没頭すると本当に現実世界でライトセイバーを操り、ボックスを切っている感覚に没入できます。&lt;/p&gt;
&lt;p&gt;また、ボックスを切った時の音やアニメーションがとてもよく、爽快感を味わうことができます。
（個人的には二本のライトセーバーを合わせた時のジーーという感じでコントローラも合わせて振動する感じがすきです）&lt;/p&gt;
&lt;p&gt;実際にプレイしている感じはこんな感じです。&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190824_review-oculus-quest/beat-saber-play.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;h4&gt;Creed Rise To Glory&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190824_review-oculus-quest/creed-title.png&quot; alt=&quot;creed rise to glory title&quot;&gt;&lt;/p&gt;
&lt;p&gt;こちらはロッキーの続編映画「クリード チャンプをつぐ男」を元にしたボクシングゲームです。
パンチはもちろん、スウェーなどの動きもQuestの6DoFの機能を最大限に生かして再現したゲームになっています。&lt;/p&gt;
&lt;p&gt;リングにいる相手選手やバトルの映像はかなり迫力があり、
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190824_review-oculus-quest/creed-battle.png&quot; alt=&quot;creed battle&quot;&gt;&lt;/p&gt;
&lt;p&gt;画像のようなヤバイ肉体の人が目の前にいたらゾッとするななんて思わせるほど臨場感がありました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/08/20190824_review-oculus-quest/creed-enemy.png&quot; alt=&quot;creed enemy&quot;&gt;&lt;/p&gt;
&lt;p&gt;VRなので、もちろん会場の様子やレフェリーなど360度あたりを見回すことができて迫力の映像を体験することができます。
ゲーム自体は、操作方法がイマイチよくわからずやりこんではいないのですが、相手を倒した時の爽快感がやっぱりいいですね。&lt;/p&gt;
&lt;p&gt;僕は熱中しすぎて拳を壁にぶつけてしまい痛い思いをしたりもしたので、プレイする際は十分気をつけると良いかと思います。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;というわけで、プレイした感想やOculus充電できない問題に遭遇した問題などなどを紹介させていただきました。&lt;/p&gt;
&lt;p&gt;Go など他のVRゴーグルに触れたことがないので、それらの比較などはできないのですがVR初心者として予想以上に
没入感がすごく、わかっていても360度の映像を体験するとついつい感動してしまいました。&lt;/p&gt;
&lt;p&gt;VRゴーグルではまだゲーム用途での使い方しかしていないので、ほかに動画をみたりとか、ゴーグル使ってプログラミングしてみたり
などなど色んな使い方をためしてみたいですね。ゲーム方面だといまいまアクション系しかためしていないので、他のパズル系のゲームとか
も楽しめるとよいかもしれません。&lt;/p&gt;
&lt;p&gt;VRゴーグルの面白い使い方がみつかったらまたここで紹介するかもしれないです。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/08/20190824_review-oculus-quest/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Create React+TypeScript+ES6 template for Electron]]></title><description><![CDATA[It's been a while since I've posted. I have a feeling that a lot of things are going to change these days, and I'm going to have to deal…]]></description><link>https://ver-1-0.net/blog/en/2019/07/14/electron-react-ts-es6</link><guid isPermaLink="false">https://ver-1-0.net/blog/en/2019/07/14/electron-react-ts-es6</guid><pubDate>Sun, 14 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It&apos;s been a while since I&apos;ve posted.&lt;/p&gt;
&lt;p&gt;I have a feeling that a lot of things are going to change these days, and I&apos;m going to have to deal with that.
I haven&apos;t been able to update this page, but I hope I can update this page periodically as well.&lt;/p&gt;
&lt;p&gt;I&apos;ve been using electron for my personal project, so I&apos;ll write about that.
I thought it would be fun to make apps on the desktop a long time ago, so I tried to use electron a little bit so I started to use it since then.&lt;/p&gt;
&lt;p&gt;I was writing in Vallila js then so naturally, I want to use React in it this time.&lt;/p&gt;
&lt;p&gt;Once I install React into the project, I started to fell like writing code in TypeScript, so I tried with create-react-app.
However, the fact that the main process does not support import statements is becoming more and more worrisome.&lt;/p&gt;
&lt;p&gt;When the app is small, I can ignore the fact that the main process is responsible for the old way of writing style, but I&apos;ve been able to use the electron API to tweak window and
The amount of code that you have to do is gradually increasing as you go through all of this, and it&apos;s getting harder and harder. Plus, you have to use the same constants between both processes.
Thus, I would have to write the code in the old way like export, modules or something like that.&lt;/p&gt;
&lt;p&gt;In order to solve this problem, I made a template repository for React + TypeScript + ES6 for Electron.&lt;/p&gt;
&lt;p&gt;Here is repository. Check it out.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/electron-react-ts-es6&quot;&gt;version-1/electron-react-ts-es6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can easily start Electron with React + TypeScript + ES6 (if you are familiar with it) which you are used to in your projects.&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;Main-Process-and-Renderer-Process&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Main-Process-and-Renderer-Process&quot; aria-label=&quot;Main Process and Renderer Process permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Main Process and Renderer Process.&lt;/h2&gt;
&lt;p&gt;If you don&apos;t know Electron in depth, you won&apos;t know what &lt;strong&gt;Main Process&lt;/strong&gt; and &lt;strong&gt;Renderer Process&lt;/strong&gt; are.
The main process, which exists only one process per application, is the one that starts up first when you run Electron.&lt;/p&gt;
&lt;p&gt;On the other hand, render process is fired up for each window , and one application has multiple renderer processes.&lt;/p&gt;
&lt;p&gt;The main process, as the name suggests, can  handle &lt;strong&gt;ready&lt;/strong&gt; and &lt;strong&gt;all-window-close&lt;/strong&gt; ready, executes callbacks, creates new windows (renderer process), and so on.
You can also handle each renderer process by operating on a specific window.&lt;/p&gt;
&lt;h3 id=&quot;Example-Code-for-Main-Process-Entry-Point&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Example-Code-for-Main-Process-Entry-Point&quot; aria-label=&quot;Example Code for Main Process Entry Point permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Example Code for Main Process (Entry Point)&lt;/h3&gt;
&lt;p&gt;The following is the entry point for the repository I mentioned earlier, which creates an instance of BrowserWindow (starts the renderer process) at the time of launching the app, and exits the app itself when all the windows are closed.
This is the kind of process I&apos;ve written.&lt;/p&gt;
&lt;p&gt;When you create a more complex app, you need to add process like closing window or change the menu depending on input in render process.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; app&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; BrowserWindow &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;onReady&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;win&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; BrowserWindow &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;
  win &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BrowserWindow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  win&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;loadURL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;http://localhost:8080&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// Open the Chromium Dev tool.&lt;/span&gt;
  win&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;webContents&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;openDevTools&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  win&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;closed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    win &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;once&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;ready&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; onReady&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;window-all-closed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;quit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Example-Code-for-Renderer-Process-Entry-Point&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Example-Code-for-Renderer-Process-Entry-Point&quot; aria-label=&quot;Example Code for Renderer Process Entry Point permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Example Code for Renderer Process (Entry Point)&lt;/h3&gt;
&lt;p&gt;On the other hand, you can think of Electron&apos;s renderer process as the front page of a web service, and most of the web development know-how can be directly transferred here, and React runs on the renderer process.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; styled &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;styled-components&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; GlobalStyle &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;styles/Index&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Container &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; styled&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;div&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  max-width: 200px;
  height: 100%;
  width: 100%;
  margin: auto;
  display: flex;
  align-items: center;
}
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; styled&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;h2&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  text-align: center;
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Description &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; styled&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;p&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  text-align: center;
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;App&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Container&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;GlobalStyle &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Title&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;Hello World&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Title&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Title&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;Hello World&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Description&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;This is a sample &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;ES6&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; TypeScript &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; Electron&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Description
      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;div&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Container&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; App
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As you can see here, you can write code almost the same way as you can run React on the web: if you want to use Redux or Hooks in your project, you can do in same way.&lt;/p&gt;
&lt;h3 id=&quot;IPC-The-communitation-style-between-two-processes&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#IPC-The-communitation-style-between-two-processes&quot; aria-label=&quot;IPC The communitation style between two processes permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;IPC (The communitation style between two processes)&lt;/h3&gt;
&lt;p&gt;By now, you may understand the difference between the main process and the renderer process, but as a matter of course, when you actually develop, the communication (state synchronization) between the main process and the renderer process.
In the case of Electron, this is accomplished by &lt;strong&gt;IPC&lt;/strong&gt;.
It is basically done by registering a listener in the main process and waiting for the renderer process to send messages to the listener.&lt;/p&gt;
&lt;p&gt;To borrow an example from &lt;a href=&quot;https://electronjs.org/docs/api/ipc-main#sending-messages&quot;&gt;official&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Main Process.&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; ipcMain &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
ipcMain&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;asynchronous-message&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;event&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// prints &quot;ping&quot;&lt;/span&gt;
  event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reply&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;asynchronous-reply&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;pong&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;Renderer Process.&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; ipcRenderer &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

ipcRenderer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;asynchronous-message&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;ping&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
ipcRenderer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;asynchronous-reply&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;event&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// prints &quot;pong&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As shown in the above example, the main process registers a listener named &lt;strong&gt;&quot;asynchronous-message &quot;&lt;/strong&gt; in the main process and sends a request from the renderer process at any given time.&lt;/p&gt;
&lt;p&gt;So, in summary, the main process will be the parent process of the app, and the parent-child communication will be done using the IPC communication method&lt;/p&gt;
&lt;p&gt;Let&apos;s get back to the main topic.&lt;/p&gt;
&lt;p&gt;** When we make a complex application, the main process that manages the renderer process is going to be quite large and complicated, isn&apos;t it? **&lt;/p&gt;
&lt;p&gt;** It&apos;s hard not to be able to share constants and other things between the renderer and the main process. **&lt;/p&gt;
&lt;p&gt;This was my big concern about Electron app.
That is wahy I have explained about the main process and the renderer process in the hope that you will understand what I mean.&lt;/p&gt;
&lt;p&gt;So, in order to solve this problem, I created a template for both the main process and the renderer process that can be applied to ES6 (especially import).&lt;/p&gt;
&lt;h2 id=&quot;Configure-Webpack-to-call-the-main-process-with-the-ES6-syntax&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Configure-Webpack-to-call-the-main-process-with-the-ES6-syntax&quot; aria-label=&quot;Configure Webpack to call the main process with the ES6 syntax permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Configure Webpack to call the main process with the ES6 syntax&lt;/h2&gt;
&lt;p&gt;From now on, I will focus on how to convert Electron to ES6.&lt;/p&gt;
&lt;p&gt;First of all, the renderer process is really easier, such as importing, reacting and installing TypeScript.&lt;/p&gt;
&lt;p&gt;As I wrote earlier, the renderer process can take over the know-how of web development almost as it is, so you can do something like create-react-app, and then you will be able to do it by googling.
You can build an ES6 + React + TypeScript environment in just a few minutes, just by imitating the way you would find the article.&lt;/p&gt;
&lt;p&gt;But for the main process, there are not so many articles about it, and you have to dive into the webpack world by yourself to configure it and use ES6 syntax.
(It&apos;s very useful for writing react-script and renderer processes, but I ejected it because it&apos;s black-boxed and seems to be hard to configure).&lt;/p&gt;
&lt;p&gt;The result is the repository I mentioned earlier.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/electron-react-ts-es6&quot;&gt;version-1/electron-react-ts-es6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The key part of webpack configuration is to &lt;strong&gt;output entry points of main process and renderer process separately&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The code for the main process is put together under &lt;code class=&quot;language-text&quot;&gt;src/main&lt;/code&gt; and the renderer process code is put together under &lt;code class=&quot;language-text&quot;&gt;src/renderer&lt;/code&gt; beforehand.
The following is the configuration.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;env &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;main&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;defaultConf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;entry&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;... /src/main&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;... /public&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;main.js&apos;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;electron-main&apos;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// for renderer&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;renderer&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;defaultConf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;entry&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;... /src/renderer&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;... /public&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;renderer.js&apos;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;web&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With this configuration, the renderer process code is rendered as &lt;code class=&quot;language-text&quot;&gt;public/renderer.js&lt;/code&gt; and the main process code is rendered as &lt;code class=&quot;language-text&quot;&gt;public/main.js.&lt;/code&gt;
In this way, Electron can be converted to ES6 by bundling the renderer process and the main process code separately.&lt;/p&gt;
&lt;p&gt;It is also convenient to use webpack-dev-server to distribute the renderer process.
In the repository, we deliver code from &lt;code class=&quot;language-text&quot;&gt;http://loalhost:8080&lt;/code&gt; and can hot-reload it if we change the code during development.&lt;/p&gt;
&lt;p&gt;Here are the commands for developing in the repository (scripts in package.json)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;yarn build:main &amp;amp;&amp;amp; electron .&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;start:inspect&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;yarn build:main &amp;amp;&amp;amp; electron --inspect=5858 .&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;start:inspect-brk&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;yarn build:main &amp;amp;&amp;amp; electron --inspect-brk=5858 .&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;develop&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;webpack-dev-server --host 0.0.0.0 --hot --config config config/webpack.config.js --config-name renderer&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;build:main&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;webpack --config config config/webpack.config.js --config-name main&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When you develop Electron, you need to set up a server of the renderer process (webpack-dev-server) with the &lt;code class=&quot;language-text&quot;&gt;yarn develop&lt;/code&gt; command.
In parallel, it starts the main process as &lt;code class=&quot;language-text&quot;&gt;yarn start&lt;/code&gt; in a separate window (as you can see, it builds and starts electron based on the built files.) The main process is launched as &lt;code class=&quot;language-text&quot;&gt;yarn start&lt;/code&gt; (as you can see, once built, it launches electron from the built files) in a separate window.&lt;/p&gt;
&lt;p&gt;In this development environment, the webpack-dev-server automatically hot-loads the code and reloads it for the renderer process only if you fix it a little bit.
The main process code needs to be restarted by &lt;code class=&quot;language-text&quot;&gt;yarn start&lt;/code&gt; after you modify the code.&lt;/p&gt;
&lt;p&gt;Ideally, it would be nice to be able to hot reload the main process code as well, but I&apos;ll give you the repository at this point.
(If you want to hot reload it, use nodemon.)&lt;/p&gt;
&lt;h2 id=&quot;Summary&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Summary&quot; aria-label=&quot;Summary permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Summary&lt;/h2&gt;
&lt;p&gt;So, I wrote a story about how I set up the environment to be able to develop in ES6 syntax and TypeScript for both the main process and the renderer process.&lt;/p&gt;
&lt;p&gt;I like javascript, but it&apos;s a bit troublesome to set up this kind of environment. If you don&apos;t care about ES6, you may not need such a setting.
It&apos;s important to be stress-free while developing because those troublesome setting affects my motivation to write the code.&lt;/p&gt;
&lt;p&gt;It is fun and refreshing to see the application I made working on the desktop, but there is no best practices for Electron system design (as long as I know) like the web.
It&apos;s not easy. It seems to be good to make the main process as the server side of the web (or rather, as an API), .
But it runs on the same place so it&apos;s hard to think about the design because you can share the model and so on. (I&apos;d like to know if there are best practices somewhere...)&lt;/p&gt;
&lt;p&gt;However, once the JS environment is set up like this one, you can write code comfortably afterwards, so if you are annoyed with building an environment, I hope you can use it while referring to this repository or forking it.&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/07/20190714_electron-react-ts-es6/thumbnail.png</thumbnailUrl><language>en</language></item><item><title><![CDATA[ElectronでReact+TypeScript+ES6開発環境を整えてみた]]></title><description><![CDATA[久しぶりの投稿です。ここのところ色々と変化が起きそうな予感しておりその対応で
こちらを更新できずにいるのですが、できればこちらも定期的に更新できれば良いかなと思っております。 ここのところ個人の開発でelectron…]]></description><link>https://ver-1-0.net/blog/2019/07/14/electron-react-ts-es6</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/07/14/electron-react-ts-es6</guid><pubDate>Sun, 14 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;久しぶりの投稿です。ここのところ色々と変化が起きそうな予感しておりその対応で
こちらを更新できずにいるのですが、できればこちらも定期的に更新できれば良いかなと思っております。&lt;/p&gt;
&lt;p&gt;ここのところ個人の開発でelectronを触るのでそこらへんを書こうと思います。
すっごい昔にデスクトップでもアプリ作れたら楽しいよねというのりでちょっとElectronを触ってみてはいたのですが、
electronはその時以来になります。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2017/04/09/electron-calculator-1&quot; &gt;Electron の勉強がてら電卓を作ってみた~その① - インストール編 -~&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2017/04/10/electron-calculator-2&quot; &gt;Electron の勉強がてら電卓を作ってみた~その② - 実装編- ~&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;今みるとこの記事2017年とかに書いてるんですね。二年前とかなのでそこまで昔ではないのかもしれませんが、個人的にはこの間に
正社員からフリーランスへの転身を経て生活スタイルがだいぶ変わったので、すっごい昔に感じます。&lt;/p&gt;
&lt;p&gt;この頃はReactも触っていなかったので生jsで書いていたと思うのですが、今回久しぶりにelectronで何かアプリ作ろうかなと触ってみたら
当然のごとくReact入れたいね。ってなりました。&lt;/p&gt;
&lt;p&gt;React入れるとTypeScript入れたいねってなって、create-react-appと少々の設定でTypeScriptを入れてみたりしました。
ここまではなんのこともないのですが、だんだんとメインプロセス周りがimport文でかけないことが気になってきます。&lt;/p&gt;
&lt;p&gt;アプリが小さいうちは、メインプロセスが古い書き方担っているのに目をつむることもできるのですが、electronのAPIを使ってwindowをいじったり、
もろもろをしているとだんだんとコード量も増えてきて辛くなってきます。さらには、レンダラープロセスとメインプロセスで共通の定数を使わないといけない
となるとexport.modulesとか古い書き方で書いてあげないと共通で使えないなどの問題が出てきます。&lt;/p&gt;
&lt;p&gt;そこで今回は、React + TypeScript + ES6 で動かすElectron用テンプレートリポジトリみたいなものを作りました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/electron-react-ts-es6&quot;&gt;version-1/electron-react-ts-es6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;jestなどは入れていないですが、普段プロジェクトで慣れているReact + TypeScript + ES6(慣れている人はですが）で気軽にElectronを始めることができます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;メインプロセスとレンダラープロセス&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%A8%E3%83%AC%E3%83%B3%E3%83%80%E3%83%A9%E3%83%BC%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9&quot; aria-label=&quot;メインプロセスとレンダラープロセス permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;メインプロセスとレンダラープロセス&lt;/h2&gt;
&lt;p&gt;Electronを深く知らない方は、&lt;strong&gt;メインプロセス&lt;/strong&gt;と&lt;strong&gt;レンダラープロセス&lt;/strong&gt;というのが何かわからないと思うのですが、
アプリケーションに対して一つだけ存在するプロセスでElectronを起動した時に最初に起動するのがメインプロセスです。&lt;/p&gt;
&lt;p&gt;対して、ウィンドウごとに立ち上がるプロセスはレンダラープロセスと呼ばれ、こちらはアプリケーションに対して複数存在するプロセスです。&lt;/p&gt;
&lt;p&gt;メインプロセスはその名のごとく、&lt;strong&gt;readyイベント&lt;/strong&gt;や&lt;strong&gt;all-window-close&lt;/strong&gt;イベントなどを拾ってコールバックを実行したり、新しいウィンドウ（レンダラープロセス）を作成したり、
特定のウィンドウに対して操作を行うなど各レンダラープロセスを取り仕切ることができます。&lt;/p&gt;
&lt;h3 id=&quot;メインプロセスのコード例エントリーポイント&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E4%BE%8B%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88&quot; aria-label=&quot;メインプロセスのコード例エントリーポイント permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;メインプロセスのコード例(エントリーポイント)&lt;/h3&gt;
&lt;p&gt;下記は先ほど紹介したリポジトリのエントリーポイントですが、アプリの起動するタイミングでBrowserWindowのインスタンスを生成し（レンダラープロセスを起動）、全てのウィンドウが閉じられたらアプリ自体を終了する。
というような処理を書いています。&lt;/p&gt;
&lt;p&gt;より複雑なアプリを作るとレンダラープロセスでの入力を受けて新しいウィンドウを作るといった処理も必要になるので、
メニューを変更したり、ウィンドウを閉じたりメインプロセスでしかできない処理はこちらに書くことになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; app&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; BrowserWindow &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;onReady&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;win&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; BrowserWindow &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;
  win &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BrowserWindow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  win&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;loadURL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;http://localhost:8080&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// ChromiumのDevツールを開く&lt;/span&gt;
  win&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;webContents&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;openDevTools&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  win&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;closed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    win &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;once&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;ready&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; onReady&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;window-all-closed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;quit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;レンダラープロセスのコード例エントリーポイント&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AC%E3%83%B3%E3%83%80%E3%83%A9%E3%83%BC%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E4%BE%8B%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88&quot; aria-label=&quot;レンダラープロセスのコード例エントリーポイント permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;レンダラープロセスのコード例(エントリーポイント)&lt;/h3&gt;
&lt;p&gt;一方ElectronのレンダラープロセスはほぼWebサービスのフロント画面と考えてもらえればよく、Web開発のノウハウのほとんどがそのままこちらに転用でき、Reactもレンダラープロセス上で動きます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; styled &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;styled-components&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; GlobalStyle &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;styles/Index&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Container &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; styled&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;div&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  max-width: 200px;
  height: 100%;
  width: 100%;
  margin: auto;
  display: flex;
  align-items: center;
}
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; styled&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;h2&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  text-align: center;
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Description &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; styled&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;p&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  text-align: center;
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;App&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Container&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;GlobalStyle &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Title&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;Hello World&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Title&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Description&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;This is a sample &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;ES6&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; TypeScript &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; Electron&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Description&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;div&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Container&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; App
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こちらを見てわかるようにwebでReactを動かすのとほとんど変わりなくコードを書いていくことができます。Reduxを入れたければ、webと同じようにRedux入れれば良いし、Hooksで書きたければHooks
で書くも良しということでここではWeb開発のノウハウがそのまま使えます。&lt;/p&gt;
&lt;h3 id=&quot;IPC通信&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#IPC%E9%80%9A%E4%BF%A1&quot; aria-label=&quot;IPC通信 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;IPC通信&lt;/h3&gt;
&lt;p&gt;ここまでで、なんとなくメインプロセスとレンダラープロセスの違いはわかってきたかと思うのですが、実際に開発を行なっていると当然のごとくこのメインプロセスとレンダラプロセスの通信（状態の同期）が
必要になってきます。Electronの場合これを&lt;strong&gt;IPC通信&lt;/strong&gt;という方法で実現しているのですが、基本的にメインプロセス側でリスナーを登録して待ち構えて、レンダラープロセスで任意のタイミングでリスナーに対して
リクエストを送るという形になります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://electronjs.org/docs/api/ipc-main#sending-messages&quot;&gt;公式&lt;/a&gt;から例を借りてくると&lt;/p&gt;
&lt;h4&gt;メインプロセス&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; ipcMain &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
ipcMain&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;asynchronous-message&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;event&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// prints &quot;ping&quot;&lt;/span&gt;
  event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reply&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;asynchronous-reply&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;pong&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;レンダラプロセス&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; ipcRenderer &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

ipcRenderer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;asynchronous-message&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;ping&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
ipcRenderer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;asynchronous-reply&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;event&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// prints &quot;pong&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のように、メインプロセスで**&quot;asynchronous-message&quot;**というリスナーを登録して、任意のタイミングでレンダラープロセスからリクエストを送る形になります。&lt;/p&gt;
&lt;p&gt;というわけでここまでで、ざっくりまとめると、メインプロセスはアプリの親プロセスとしてレンダラープロセスをまとめて、親子の通信はIPC通信という方法を使って
データの同期(通信）を行うというところまで説明できたかと思います。&lt;/p&gt;
&lt;p&gt;ここまでだと完全にElectronのアーキテクチャの話になってしまって脇道にそれているのですが、本題に話を戻すと、それなりに複雑なアプリケーションを作るとなると
「レンダラープロセスを取り仕切るメインプロセスのコードって大きくなるよね」そこがrequireとかで書かれていてレンダラープロセスとかと違う書き方で実装するとなると
**「レンダラーとメインで共通で使う定数とか共有できなくて辛いよね。」**というのをわかってほしくてここまで長々とメインプロセスとレンダラープロセスについて説明してきました。&lt;/p&gt;
&lt;p&gt;ということで、今回はこの問題を解決するべくメインプロセスもレンダラープロセスもES6(特にimport)でかけるテンプレートを作ってみました。&lt;/p&gt;
&lt;h2 id=&quot;メインプロセスをES6構文でかけるようにWebpackを設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92ES6%E6%A7%8B%E6%96%87%E3%81%A7%E3%81%8B%E3%81%91%E3%82%8B%E3%82%88%E3%81%86%E3%81%ABWebpack%E3%82%92%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;メインプロセスをES6構文でかけるようにWebpackを設定 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;メインプロセスをES6構文でかけるようにWebpackを設定&lt;/h2&gt;
&lt;p&gt;前振りが長くなりましたが、ここからはElectronをどうやってES6化して書くかということにフォーカスして説明していきます。&lt;/p&gt;
&lt;p&gt;まずはじめに&lt;strong&gt;レンダラープロセス&lt;/strong&gt;の方はimport文かけるようにしたり、reactのインストール、TypeScriptのインストールとかは本当に簡単です。&lt;/p&gt;
&lt;p&gt;先ほど書いたようにレンダラープロセスはweb開発のノウハウをほぼそのまま引き継げるのでcreate-react-appとかして、Google先生で検索した上位の記事の
見よう見まねでものの数分でES6 + React + TypeScriptの環境を構築することができます。&lt;/p&gt;
&lt;p&gt;しかし、肝心の&lt;strong&gt;メインプロセス&lt;/strong&gt;の方は、そういった記事も少なく、自らwebpackの世界に乗り出し設定を行いES6の構文を使えるようにしていかなければなりません。
(react-scriptとかレンダラープロセス書く分にはとても便利なのですが、ブラックボックス化されていて設定しんどそうなのでejectしました。）&lt;/p&gt;
&lt;p&gt;結果完成したのが先ほども載せたこちらのリポジトリです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/electron-react-ts-es6&quot;&gt;version-1/electron-react-ts-es6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Electron + React + TS + ES6(メインプロセスも含め)　の構成で何かアプリ作りたいのであれば割と始めやすいリポジトリになっているかと思います。
JavaScriptのプロジェクトであればだいたい使うであろうlodashやmomentあたりのユーティリティライブラリも入れておきました。(styled-componentも個人的な趣味ですが入れてます)&lt;/p&gt;
&lt;p&gt;webpackの設定の肝の部分は&lt;strong&gt;メインプロセスとレンダラープロセスのjsを別々に吐き出す&lt;/strong&gt;ことです。&lt;/p&gt;
&lt;p&gt;あらかじめメインプロセスのコードはsrc/main配下にまとめておいて、レンダラープロセスのコードはsrc/renderer配下にまとめておきます。
その状態でwebpackを設定すると下記のような設定になります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;env &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;main&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;defaultConf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;entry&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;../src/main&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;../public&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;main.js&apos;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;electron-main&apos;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// for renderer&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;renderer&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;defaultConf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;entry&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;../src/renderer&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;../public&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;renderer.js&apos;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;web&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この設定だとレンダラープロセスのコードはpublic/renderer.js、メインプロセスのコードはpublic/main.jsとして吐き出されます。
Electronではこのようにレンダラープロセスとメインプロセスのコードを別々にバンドルすることでES6化することができます。&lt;/p&gt;
&lt;p&gt;また、レンダラープロセス側はwebpack-dev-serverで配信する形にすると開発の時も便利です。
リポジトリでは、&lt;a href=&quot;http://loalhost:8080&quot;&gt;http://loalhost:8080&lt;/a&gt; からコードを配信して、開発中にコードを変更したらホットリロードができる構成にしています。&lt;/p&gt;
&lt;p&gt;こちらがこのリポジトリで開発する時のコマンドになるのですが（package.jsonのscripts)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;yarn build:main &amp;amp;&amp;amp; electron .&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;start:inspect&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;yarn build:main &amp;amp;&amp;amp; electron --inspect=5858 .&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;start:inspect-brk&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;yarn build:main &amp;amp;&amp;amp; electron --inspect-brk=5858 .&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;develop&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;webpack-dev-server --host 0.0.0.0 --hot --config config/webpack.config.js --config-name renderer&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;build:main&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;webpack --config config/webpack.config.js --config-name main&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;自身がElectronの開発を行う際には、&lt;code class=&quot;language-text&quot;&gt;yarn develop&lt;/code&gt;でレンダラープロセスのサーバ(webpack-dev-server)を立ち上げ、
それと並行して別ウィンドウで&lt;code class=&quot;language-text&quot;&gt;yarn start&lt;/code&gt;(見てわかるように一旦ビルドしてビルドされたファイルをもとにelectronを起動しています。)としてメインプロセスを立ち上げています。&lt;/p&gt;
&lt;p&gt;この開発環境はレンダラープロセスに限っては、コードをちょっと直しただけで自動でwebpack-dev-serverがホットリロードで再読み込みしてくれるのですが、
メインプロセス側のコードはコードを修正したら&lt;code class=&quot;language-text&quot;&gt;yarn start&lt;/code&gt;で再度サーバを立ち上げ直す必要があります。&lt;/p&gt;
&lt;p&gt;理想をいうとメインプロセス側についてもホットリロードできると良いですが一旦ここまででレポジトリをあげておきます。
(ホットリロードしたい方はnodemonなどを使って頂ければ実現できるかと思います）&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;というわけで、メインプロセスもレンダラープロセスもES6のシンタックスかつTypeScriptで開発が行えるように環境を整えた話を書きました。&lt;/p&gt;
&lt;p&gt;javascriptは割と好きなのですが、こういった環境設定が多少面倒くさいですね。。ES6とかこだわらなければそこまで設定もいらないかもしれないのですが、DXというか
開発をしている時の気持ち良さ（というよりストレスレスであることが大事そう）ってやっぱりコードを書く時のモチベーションとかに影響するのでついついこだわってしまいますね。&lt;/p&gt;
&lt;p&gt;最近個人でElectronのアプリをつくっていて、自分で作ったアプリがデスクトップで動くのは新鮮で楽しいのですが、ElectronはWebみたいに決まった設計の形みたいなのがなく逐一考えながら
実装していかないといけないので、なかなか大変ですね。メインプロセスをWebでいうサーバサイド（というか一APIとして）作っていくのが良さそうなのですが、同じプラットフォームで動くので
モデルを共有できるとかもなるので、設計考えるのが大変です。（どこかにベストプラクティスがあれば知りたい・・）&lt;/p&gt;
&lt;p&gt;ただ、JSは今回のように一旦環境を揃えられるとあとは快適にコードを書いていけることが多いので、環境構築めんどくさいという方はこのリポジトリを参考にしたりフォークしたりしながら使って頂ければと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/07/20190714_electron-react-ts-es6/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Tried to Create Crud API Gin+Gorm+GraphQL(gqlgen)]]></title><description><![CDATA[I have been studying after coming Reiwa era. Now, I tried to develop web API with Go and GraphQL. My Repository.
gin-gorm-gqlgen-sample
I…]]></description><link>https://ver-1-0.net/blog/en/2019/05/13/gin-gorm-gqlgen-crud</link><guid isPermaLink="false">https://ver-1-0.net/blog/en/2019/05/13/gin-gorm-gqlgen-crud</guid><pubDate>Sat, 15 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have been studying after coming Reiwa era. Now, I tried to develop web API with Go and GraphQL.&lt;/p&gt;
&lt;p&gt;My Repository.
&lt;a href=&quot;https://github.com/version-1/gin-gorm-gqlgen-sample&quot;&gt;gin-gorm-gqlgen-sample&lt;/a&gt;
I usually develop backend with Ruby on Rails so I&apos;m not famillier with golang and it takes long time to create this repository...&lt;/p&gt;
&lt;p&gt;I will explain about entire flow. Next, I will talk about stack point I was working in.&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;Technolodies-I-used&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Technolodies-I-used&quot; aria-label=&quot;Technolodies I used permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Technolodies I used&lt;/h2&gt;
&lt;p&gt;Followings are technolodies I used this time,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Dep (package manager)&lt;/li&gt;
&lt;li&gt;Gin (WAF)&lt;/li&gt;
&lt;li&gt;Gorm (ORM)&lt;/li&gt;
&lt;li&gt;gqlgen (GraphQL Library)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Gin&lt;/h4&gt;
&lt;p&gt;Gin is one of the Go language WAF. It have got the most star on github in go lang WAF(as far as I know).&lt;/p&gt;
&lt;h4&gt;Gorm&lt;/h4&gt;
&lt;p&gt;Gorm is Go Lang ORM. According to web articles, its interface is like Rails&apos;s ActiveRecord.
I am familliar with Rails so I choose this library.&lt;/p&gt;
&lt;h4&gt;Dep&lt;/h4&gt;
&lt;p&gt;Dep is pacakge manager. I need to &quot;go get&quot; to install some libraries but it seems like disturbing my Dockerfile.
So I used dep&lt;/p&gt;
&lt;h4&gt;gqlgen&lt;/h4&gt;
&lt;p&gt;gqlgen is GraphQL server library. There are some graphql libraries for golang such as &lt;a href=&quot;https://github.com/graphql-go/graphql&quot;&gt;graphql-go/graphql&lt;/a&gt;.
But I selected gqlgen becuase I really like a point of generating code after I defined schema.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/99designs/gqlgen&quot;&gt;99designs/gqlgen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you use gqlgen, you can proceed your development with following procedure.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Define Schema&lt;/li&gt;
&lt;li&gt;Write logic about query in resolvers&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In this process, you can focus on writing logic and you don&apos;t need to write boring code because gqlgen genearate code based on your schema.&lt;/p&gt;
&lt;h2 id=&quot;Entire-Flow&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Entire-Flow&quot; aria-label=&quot;Entire Flow permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Entire Flow&lt;/h2&gt;
&lt;p&gt;The gqlgen sample in the document is baout Todo List. If you will read &quot;Getting Start&quot;, you start it easily.
But, I need to do something when you use it with Gorm or you develop CRUD. So, I will explain those way, So, I will explain those way.&lt;/p&gt;
&lt;h3 id=&quot;Install-gqlgen-with-dep&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Install-gqlgen-with-dep&quot; aria-label=&quot;Install gqlgen with dep permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Install gqlgen with dep&lt;/h3&gt;
&lt;p&gt;You can install gqlgen by &quot;go get&quot; but if you use dep, you have to prepare wrapper scripts to generate boilerplate.&lt;/p&gt;
&lt;p&gt;scripts/gqlgen.go&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;github.com/99designs/gqlgen/cmd&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	cmd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you do this,&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$go&lt;/span&gt; run scripts/gqlgen.go init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;you will be able to execute it like this.
When you finished to write scripts, make files you need on gqlgen.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$go&lt;/span&gt; run scripts/gqlgen.go init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Gqlgen will generate followings files.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gqlgen.yml ・・・ Configure file. you write the configure fo generated code.&lt;/li&gt;
&lt;li&gt;genereated.go ・・・ When you define schema and execute scripts, this file will be generatted. Must not edit manually because it is generated.&lt;/li&gt;
&lt;li&gt;models_gen.go ・・・ This file is also generated from schema. Must not edit manually because it is generated.&lt;/li&gt;
&lt;li&gt;resolver.go ・・・ This is generated if you yet to create this name file.&lt;/li&gt;
&lt;li&gt;server/server.go ・・・ Entrypoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;When you generate code, excecute following command and install pacakges.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;dep ensure&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Create-Entry-Point-for-Gin&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Create-Entry-Point-for-Gin&quot; aria-label=&quot;Create Entry Point for Gin permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Create Entry Point for Gin&lt;/h3&gt;
&lt;p&gt;I have to prepare entry point for gin if you want to use gin.
prepare two endpoints.( for playground and main)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;github.com/99designs/gqlgen/handler&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;github.com/gin-gonic/gin&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Defining the Graphql handler&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;graphqlHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HandlerFunc &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  h &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; handler&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GraphQL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;NewExecutableSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Config&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Resolvers&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;Resolver&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    h&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ServeHTTP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Writer&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Request&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Defining the Playground handler&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;playgroundHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HandlerFunc &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  h &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; handler&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Playground&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;GraphQL&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/query&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    h&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ServeHTTP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Writer&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Request&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// Setting up Gin&lt;/span&gt;
  r &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/query&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;graphqlHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;playgroundHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Prepare-Gorm-Model&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Prepare-Gorm-Model&quot; aria-label=&quot;Prepare Gorm Model permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Prepare Gorm Model&lt;/h3&gt;
&lt;p&gt;Next, I will define model which are used on schema definition.
I put it on internal/models according to go language standard layout.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// user.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; models

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;time&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; User &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	ID        &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	Name      &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
	Todos     &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;Todo
	CreatedAt time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Time
	UpdatedAt time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Time
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// todo.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; models

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;time&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Todo &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	ID        &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	Text      &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
	Done      &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;
	UserID    &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	User      User
	CreatedAt time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Time
	UpdatedAt time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Time
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Certainly I think it is preferd to wirte it with embed (please refer to Gorm documents)
but errors occur when I excecuted. I wrote all attributes..(I would like to know better way..)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// todo.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; models

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;time&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Todo &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  gorm&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Model
	Text      &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
	Done      &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;
	UserID    &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	User      User
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;If you finish to define your model, you have to wirte mapping of model in gqlgen.yml.
Followings is definition in this case.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;models&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  Todo&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    model&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; gin_graphql&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;internal&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo
  User&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    model&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; gin_graphql&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;internal&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Define-Schema&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Define-Schema&quot; aria-label=&quot;Define Schema permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Define Schema&lt;/h3&gt;
&lt;p&gt;What I introduced until now is to prepare to develop in schema drriven, I&apos;ll to write the code and logic for api from now.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Todo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;   Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  done&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Boolean&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  userID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  user&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  createdAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  updatedAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; User &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  createdAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  updatedAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Query &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  todos&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  users&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;User&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;todo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; FetchTodo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

input NewTodo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  userId&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

input EditTodo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

input NewUser &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

input FetchTodo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Mutation &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;createTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; NewTodo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;updateTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; EditTodo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;deleteTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;createUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; NewUser&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

scalar Time&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Above is schema.graphql to realize CRUD. You have to use graphql syntax to write this.
Processes to change resouce is wrriten in Mutations and Processes to read it is wrriten in Query.
And Types you need is also defined in schema.graphql.&lt;/p&gt;
&lt;p&gt;Until now, you got reday to generate code and you start to edit resolver.In resolver, IO is defined by schema.graphql and it is generated automatically.
So you focus on writing logic between input and output.&lt;/p&gt;
&lt;h3 id=&quot;Implemntaion-Resolver&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Implemntaion-Resolver&quot; aria-label=&quot;Implemntaion Resolver permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Implemntaion Resolver&lt;/h3&gt;
&lt;p&gt;In resolver, write code to get data from database or create some records.
You have to know that resolver is not overwritten when it is already exist.&lt;/p&gt;
&lt;p&gt;Following is resolver I wrote. I can&apos;t explain all because it is about gorm and bored for us.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Resolver &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;Resolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Mutation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; MutationResolver &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;Resolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Query&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; QueryResolver &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;queryResolver&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; mutationResolver &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;Resolver &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CreateUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input NewUser&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	user &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		Name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CreateTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input NewTodo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	todo &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		Text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;   input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		UserID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserID&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		Done&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;UpdateTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input EditTodo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	todo &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	todo&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Text &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Text
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;DeleteTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	todo &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		ID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; queryResolver &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;Resolver &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;queryResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Todo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;FetchTodo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; todo models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Preload&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;User&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;queryResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Todos&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; todos &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Preload&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;User&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; todos&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;queryResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Users&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; users &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;users&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; users&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Run&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Run&quot; aria-label=&quot;Run permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Run&lt;/h3&gt;
&lt;p&gt;Finally, you can run your code if you finish process I introduced.
The entrypoint of the repositry I prepared is cmd/app/main.go so you can run following command.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;ENV&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;development &lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt; run cmd&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;app&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We should pass env in this command because I implemented it to load configuration by env.
When you success to run the server, you can try it on &lt;a href=&quot;http://localhost:8080&quot;&gt;http://localhost:8080&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;Stack-Points&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Stack-Points&quot; aria-label=&quot;Stack Points permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Stack Points&lt;/h2&gt;
&lt;p&gt;Next, I will write about points I stacked while I was building.&lt;/p&gt;
&lt;h3 id=&quot;How-can-I-define-type-of-Time-like-CreatedAt-and-Updated&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#How-can-I-define-type-of-Time-like-CreatedAt-and-Updated&quot; aria-label=&quot;How can I define type of Time like CreatedAt and Updated permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How can I define type of Time like CreatedAt and Updated?&lt;/h3&gt;
&lt;p&gt;Schema Types are only 5.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ID&lt;/li&gt;
&lt;li&gt;Int&lt;/li&gt;
&lt;li&gt;Float&lt;/li&gt;
&lt;li&gt;String&lt;/li&gt;
&lt;li&gt;Boolean&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So we have to define types we need such as Date.&lt;/p&gt;
&lt;p&gt;When I create this sample, I&apos;m stack here but I found gqlgen provide Time Type so I can use it.&lt;/p&gt;
&lt;p&gt;You only do like this as above schema definition.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;scalar Time&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After you declare the type, the type is mapped to Go Embeded tim.Time Type.
Gqlgen support Map, Upload and Any type so if you want to use their type, only declare it with scalar declaration.&lt;/p&gt;
&lt;h3 id=&quot;Error-Occured-in-Gorm-Model-while-I-generate-code&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Error-Occured-in-Gorm-Model-while-I-generate-code&quot; aria-label=&quot;Error Occured in Gorm Model while I generate code permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Error Occured in Gorm Model while I generate code.&lt;/h3&gt;
&lt;p&gt;This problem is not resolved. I got away with it by workaround though..
I defined a model with gorm embed type but error occured during generation...&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; User &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  gorm&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Model
  name
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I got away with writing all attributes but it is not good.
If anyone know better way, I would like to teach me.&lt;/p&gt;
&lt;h3 id=&quot;Get-association-model-while-I-get-list&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Get-association-model-while-I-get-list&quot; aria-label=&quot;Get association model while I get list permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Get association model while I get list&lt;/h3&gt;
&lt;p&gt;This is about not GraphQL but Gorm. I often get list which include associated model so I tried it in this sample, too.
That is simpler than I expeceted. All you need is to add fields to struct.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Todo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;   Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  done&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Boolean&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  userID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  user&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  createdAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  updatedAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For example, when you define Todo model, you can do that by adding userId and user fields to Todo model.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Preload&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;User&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And add this line to resolver.&lt;/p&gt;
&lt;p&gt;You already write preload clasue so you already solved N+1 problem.
This is sql when I execute.You can make sure that users query is preloaded.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;app&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;src&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;gin_graphql&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;resolver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;go:&lt;span class=&quot;token number&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;token number&quot;&gt;27&lt;/span&gt;:&lt;span class=&quot;token number&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90&lt;/span&gt;ms&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ASC&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;rows&lt;/span&gt; affected &lt;span class=&quot;token operator&quot;&gt;or&lt;/span&gt; returned &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;app&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;src&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;gin_graphql&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;resolver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;go:&lt;span class=&quot;token number&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;token number&quot;&gt;27&lt;/span&gt;:&lt;span class=&quot;token number&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2.65&lt;/span&gt;ms&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;users&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;users&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ASC&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;rows&lt;/span&gt; affected &lt;span class=&quot;token operator&quot;&gt;or&lt;/span&gt; returned &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;Wrrap-Up&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Wrrap-Up&quot; aria-label=&quot;Wrrap Up permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Wrrap Up&lt;/h2&gt;
&lt;p&gt;I tryied to build hot stacks of Web API and Graphql.&lt;/p&gt;
&lt;p&gt;I currently feel the limit of REST API while I develop system with it so I feel stronger the good points of graphql.
In REST API, When I create new endpoint, I have to write code to request that endpoint in client-side.&lt;/p&gt;
&lt;p&gt;In GraphQL, if you define schema once, you can fetch necessary resouce anytime.
When I develop api in REST, I think how I don&apos;t depned on frontend but I often need to change code of server-side code when the front is changed.&lt;/p&gt;
&lt;p&gt;I think such problems will be solved by GraphQL (many people say so though..)
Certainly, I learn it deeply and I would know that drawbacks and I can never know that now but I can feel that potential.&lt;/p&gt;
&lt;p&gt;If you are familiar with REST or are sick of creating Web API, try GraphQL&lt;/p&gt;
&lt;p&gt;Thank you,&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/05/20190513_gin-gorm-gqlgen-crud/thumbnail.png</thumbnailUrl><language>en</language></item><item><title><![CDATA[6月の土曜日に3人と英語面接したエンジニアの話]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2019/06/10/have-three-engilish-interveiew-in-a-day</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/06/10/have-three-engilish-interveiew-in-a-day</guid><pubDate>Mon, 10 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;しばらく更新が途絶えていましたが、久しぶりの投稿です。&lt;/p&gt;
&lt;p&gt;ここのところ仕事が忙しくなったり、ポートフォリオサイト作っていたり、当サイトの英語対応を進めていたりしてなかなか更新が出来ていませんでした。&lt;/p&gt;
&lt;p&gt;繁忙期というのはうまく分散できなくて何故かまとめてハードなタスクが降ってくるものですが、今回はその中の一つで結構ヘビーな6月の土曜日に英語で３人と立て続けに面談をするというイベント？に参加してきました。&lt;/p&gt;
&lt;p&gt;自身英語での面接は初めてでチャレンジグだった上に中々無い経験で楽しめたので、記事にまとめておきます。&lt;/p&gt;
&lt;h2 id=&quot;面談に至った経緯&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%9D%A2%E8%AB%87%E3%81%AB%E8%87%B3%E3%81%A3%E3%81%9F%E7%B5%8C%E7%B7%AF&quot; aria-label=&quot;面談に至った経緯 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;面談に至った経緯&lt;/h2&gt;
&lt;p&gt;実のところここ最近フリーランスに飽き始め、飽き始めたというと語弊があるのですが1年ちょっとフリーランスをやって収入面でもタスク面でもだいぶ安定してきて「このまま普通にやってたらあと10年くらい普通よりちょっと高めの収入を維持しながらやってけるんじゃね」&lt;/p&gt;
&lt;p&gt;とほのかに思うと同時に自分の成長の鈍化を感じ始め「そういえば最近、全然バリュー出てないヤバい！とか全然わからない笑。全然できない笑。みたいな窮地に立たされてないなー」&lt;/p&gt;
&lt;p&gt;というのに気づきました。&lt;/p&gt;
&lt;p&gt;できれば半年前くらいの自分ショボwくらいの感じで過去の自分を恥じれるくらいなにかしらレベルアップし続けるのが理想なので、いまいち満足できない日々が続いていました。&lt;/p&gt;
&lt;p&gt;そんな悶々としている中であるリクルーターさんから某外資企業がエンジニアを探してるので面談しませんか？というお誘いがLinkedinであり、&lt;/p&gt;
&lt;p&gt;その企業名が以前から知っていて少し興味があったので、じゃあ話を聞いてみるかということでとりあえずリクルーターさんと面談することとなりました。&lt;/p&gt;
&lt;p&gt;リクルーターさんとの面談は例によって自分の経歴の説明とやりたいことの説明、リクルーターさんからの企業の説明等々を行いました。&lt;/p&gt;
&lt;p&gt;その話の中でその某企業さんが6月の土曜日に1日使って、３人の人と面談をして採用するかどうかを決める。しかも面接は全部英語。英語での面接 、さらにプログラミングのアルゴリズムの話をしたりしないといけないという&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「ちょっとどういうこと？！」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;な内容なのですが、話を聞く限りインターナショナルなチームでグロース段階の面白そうな環境にあるということで、不安ではありましたがチャレンジしてみることにしました。&lt;/p&gt;
&lt;h2 id=&quot;はじめての英語レジュメ作成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E8%8B%B1%E8%AA%9E%E3%83%AC%E3%82%B8%E3%83%A5%E3%83%A1%E4%BD%9C%E6%88%90&quot; aria-label=&quot;はじめての英語レジュメ作成 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;はじめての英語レジュメ作成&lt;/h2&gt;
&lt;p&gt;ということでその企業さんにアプライすることとなったのですが、「やべ、英語の面接の準備しなきゃ」なんて面接に進めるかもわからないのに面接のことを考えている私をよそにリクルーターさんからの「それでは後ほど英語のレジュメを送って頂けますか？」という先制パンチがありました。&lt;/p&gt;
&lt;p&gt;英語でのレジュメ作成なんてやったことなかったのですが、ネットで色々調べながら見よう見まねでなんとかレジュメを完成させ、
「はじめてのレジュメなんですけどこんな感じでいいんですかね？」と恐る恐るリクルーターさんにメールでレジュメを提出すると&lt;/p&gt;
&lt;p&gt;「ありがとうございます！それではこちら先方にお送りしますね！」というはじめてのレジュメをスルーしたビジネスライク？な返信が返ってきました笑。(まぁそんな細々修正してもしょうがないしね。。)&lt;/p&gt;
&lt;p&gt;その後なんかレジュメだけだと物足りないし、フリーランスとしてもポートフォリオとかあると便利だしなーなんて考えてポートフォリオサイトをちゃちゃっと作って後追いで提出しました。&lt;/p&gt;
&lt;p&gt;レジュメとポートフォリオを提出してからしばらくしても連絡がなかったのでダメだったのかなー。なんて考えながらいたのですが、次の週の後半くらいに返信があり、どうやら書類ベースでは選考を通過したそうで無事6月の土曜日に一気に三人と英語でテクニカルな面談をするという鬼畜な催し(慣れてる人にはどうってことないんだろうけど。。)に招かれました。&lt;/p&gt;
&lt;h2 id=&quot;いざ面接&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%84%E3%81%96%E9%9D%A2%E6%8E%A5&quot; aria-label=&quot;いざ面接 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;いざ面接&lt;/h2&gt;
&lt;p&gt;面接に招待されてから当日まで4日間くらいしかないというまたまた鬼畜なスケジュールでろくな準備もできないまま面接当日を迎えました。&lt;/p&gt;
&lt;p&gt;面接は朝の10時からで3人と面談と聞いていたので、だいたい3時間、4時間程度かなと思っていたのですが会場に到着すると10人ほど他の候補者もいたのでなるほど結構な長丁場になりそうだなと感じました。&lt;/p&gt;
&lt;p&gt;案の定スケジュールは押していて、一人目の面談が終わったのが13時過ぎという感じでだいぶ長い待ち時間がありました。&lt;/p&gt;
&lt;p&gt;待ち時間の間に面接官の方に簡単なwebテストとを受けてと言われ、言われた通りと開いてみると所要時間45分で回答するというそれなりに精神ポイントを削られるテストを受けました。詳細なテスト内容は流石に書けないのですが、フロントエンド向けのテストで色々な概念に関するメリット・デメリットを挙げてそれについて説明したり等々でした。&lt;/p&gt;
&lt;p&gt;全部英語で回答も英語なので結構体力が削られたのですがなんとか時間内に全て回答してwebテストを終了させました。&lt;/p&gt;
&lt;p&gt;テストを受け終わった後、最初の面接に案内される間に人事の方から「テストの結果良かったよ！」と言われたので自分で割と不十分なところも感じていたのですがまぁ結果は良かったようです。&lt;/p&gt;
&lt;h2 id=&quot;1人目との面接&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1%E4%BA%BA%E7%9B%AE%E3%81%A8%E3%81%AE%E9%9D%A2%E6%8E%A5&quot; aria-label=&quot;1人目との面接 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1人目との面接&lt;/h2&gt;
&lt;p&gt;というわけで、無事Webテストを終わらせ一人目の方との面談があったのですが面談は個室のような場所に通されるでもなく、割と開けたスペースに案内されそこで面接官の方と面談しました。&lt;/p&gt;
&lt;p&gt;面接官と書くと堅苦しいですが、お互いカジュアルな格好でコワーキングスペースでMackbook片手にという感じだったのでいわゆる面接いうほど堅苦しくはないです。&lt;/p&gt;
&lt;p&gt;面接自体は全てがテクニカルな質問で、これまで受けてきた面接でのなんで志望したの？とか人となりを聞くような質問は皆無でした。&lt;/p&gt;
&lt;p&gt;質問されたのはJavaScriptやReact等々の仕様などなど。&lt;/p&gt;
&lt;p&gt;回答自体は全て完答出来たかというとそうでもないのですがまぁ出来は悪くないかなという印象でした。英語での会話も結構文法がズタボロで何度か聞き返したりもしましたが、最低限のコミュニケーションはとれたかなと思っています。&lt;/p&gt;
&lt;p&gt;テクニカルな質問が終わるとこちらからの質問タイムがあったのですが、面接官がエンジニアなので普段どういう開発をしてるんですかー？やどういう働き方をしてますかー？等々実際の開発の雰囲気を聞く質問をしました。&lt;/p&gt;
&lt;p&gt;話を聞く限り面接官はWebの質問をバリバリしてきたのですが、話を聞く限り実はネイティブエンジニアだそう笑。ただ、React Nativeを使っているのでJavaScritはわかるようでした。
(expoつかっていないそうなので、大変そうだなーなんて考えつつ）&lt;/p&gt;
&lt;h2 id=&quot;2人目の面接&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2%E4%BA%BA%E7%9B%AE%E3%81%AE%E9%9D%A2%E6%8E%A5&quot; aria-label=&quot;2人目の面接 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2人目の面接&lt;/h2&gt;
&lt;p&gt;2回目の面接は前述した通りスケジュールが押して、1回目の面接が終わったのが13時過ぎだったのでお昼休憩を挟んで14時半から面接をしました。
(余談ですがお昼休みはスマホがお亡くなりになりかけていたので充電器探しと電源の使えるカフェ探しに奔走していました。）&lt;/p&gt;
&lt;p&gt;面接内容は基本的なアルゴリズムに関する問題を聞かれて、それを紙に書いて回答するといった内容でした。&lt;/p&gt;
&lt;p&gt;基本的なアルゴリズムと言った割には結果が壊滅的で、面接官のインド系訛りが強く、英語聞き取れない、、問題理解できない、、そもそもアルゴリズムへの理解が甘く問題解けないという感じで散々でした。&lt;/p&gt;
&lt;p&gt;データ構造とアルゴリズムは元々苦手意識があり、今まで避けてきた部分があったのですが、今回の試験結果を見る限りちょっとちゃんと勉強しないとダメですね。。twitter等々でも議論されてましたが、やっぱり基本的なCSの知識がエンジニアの根幹を支えるスキルになるので基本的な所はやっぱりちゃんとやっておきたい所です。&lt;/p&gt;
&lt;p&gt;面接は散々でしたが面接官のエンジニアの方は親切で自分の英語スキルに合わせてゆっくり話しをしたり問題の説明を例を出しながら説明したり丁寧で凄い好印象でした。&lt;/p&gt;
&lt;h2 id=&quot;最後の面接&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%80%E5%BE%8C%E3%81%AE%E9%9D%A2%E6%8E%A5&quot; aria-label=&quot;最後の面接 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;最後の面接&lt;/h2&gt;
&lt;p&gt;最後の面接は、エンジニアチームのマネージャーとの一対一の面談です。&lt;/p&gt;
&lt;p&gt;マネージャーというとちょっと権威がある感じかと思うんですがマネージャーさんも物腰柔らかで、自分の辿々しい英語に耳を傾けてくれました。&lt;/p&gt;
&lt;p&gt;面接ではこれまで関わってきたシステムについての説明をしたり、会社に興味を持った理由などなどを話しました。&lt;/p&gt;
&lt;p&gt;聞かれた事が結構サーバー、インフラ寄りでどうやってトラフィック捌くかとかの話になってちょっとこれまでそこまでトラフィックが問題でインフラエンジニアのいないチームで働く機会が少なく、
雲行き怪しげではあったのですが、マネージャーさんの人柄もあってか面接自体は終始良い雰囲気ではあったのかなと思ってます(というかそうであってほしい。)&lt;/p&gt;
&lt;h2 id=&quot;まとめ総括&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81%E7%B7%8F%E6%8B%AC&quot; aria-label=&quot;まとめ総括 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ・総括&lt;/h2&gt;
&lt;p&gt;ということで無事3人との面談も終えて帰宅の途についたのですが、やっぱり英語スキルが低いせいで十分に説明できてない感は否めませんでした。&lt;/p&gt;
&lt;p&gt;なんていうか頭でわかってるんだけど英語で表現できないもどかしさが常にあって内心「グァー」ってなりながら英語で会話してました。&lt;/p&gt;
&lt;p&gt;全然関係ないんですけど、新しいプログラミング言語を学び始めて &lt;strong&gt;頭では処理の方法がわかってる、あるいは慣れ親しんだ言語ではわかるんだけど、この言語での書き方がわからない！！&lt;/strong&gt; っいうときのフラストレーションに非常に似てますね。
最近自分がGoを書いている時の感じに似ています。&lt;/p&gt;
&lt;p&gt;話を戻すと、2人目の面接官にも「もし君がジョインするなら英語の勉強必要ダネ。」とも言われたので本当に英語はネックになりそうです。&lt;/p&gt;
&lt;p&gt;そんな感じの未熟な英語スキルではあったのですが、個人的には思ったよりやれたかな感は多少ありました。(まあ初めてだし笑、あまり自分を責めてもしょうがないし)&lt;/p&gt;
&lt;p&gt;技術的にわかることはやっぱり英語でも端的に説明してあいてにも解ってもらえるのですが、技術的にわからない、不安な部分はやっぱり説明の精度が下がります。日本語でも同じだと思うのでこればかりはしょうがないですが、技術力＋語学力の底上げは永遠の課題として着実に伸ばしていきたいですね。&lt;/p&gt;
&lt;p&gt;面談の結果はまだ出ていないので不明ですが、あまり時間待たずに分かるはずなので結果わかればまたこちらに書くかもしれません。
受かってたら結構嬉しいのですが、まぁ落ちてても一つ経験できたし英語面接の練習とか技術的なところの課題とか発見できたし良いかなという感じです。(こうして記事にもなってますし)&lt;/p&gt;
&lt;p&gt;手応え的にはちょっとわからないですし、企業さん側がどれくらいの採用基準なのかなっていうのに寄るのかなと思っています。やっぱりエンジニアは足りてないらしくて、人は欲しそうですがそのレベルに自分が達していたかどうか正直わかりません。まぁコード書きながら、寝ながら待ちます。&lt;/p&gt;
&lt;p&gt;という感じでただただ自分の体験を共有しただけではありますがここまでで締めさせていただきます。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/06/20190610_have-three-engilish-interveiew-in-a-day/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Gin+Gorm+GraphQL(gqlgen)でCRUDできるAPIをつくってみた]]></title><description><![CDATA[元号ももう令和に代わり粛々とGoの勉強を続けているのですが、今回はGOとGraphQLを使って
CRUDできるAPIを作ってみました。 gin-gorm-gqlgen-sample
そもそもGO…]]></description><link>https://ver-1-0.net/blog/2019/05/13/gin-gorm-gqlgen-crud</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/05/13/gin-gorm-gqlgen-crud</guid><pubDate>Mon, 13 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;元号ももう令和に代わり粛々とGoの勉強を続けているのですが、今回はGOとGraphQLを使って
CRUDできるAPIを作ってみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/gin-gorm-gqlgen-sample&quot;&gt;gin-gorm-gqlgen-sample&lt;/a&gt;
そもそもGOに慣れていなかったり各種ライブラリの情報が少なかったりで結構時間かかりましたが、
なんとかそれらしきものができたのでリポジトリを共有しておきます。&lt;/p&gt;
&lt;p&gt;前回の記事でも、最初にながれを説明して詰まったところを最後にまとめて終わりという形だったので
今回も同じ形でいければななんて思っています。&lt;/p&gt;
&lt;p&gt;サンプルを作るにあたり色々と情報を漁ったのですがGormとgqlgenを組み合わせの情報が少なく苦労したので
そこらへんの情報ものせていければ。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/05/02/docker-gin-gorm-dep-crud&quot;&gt;Docker, Gin, Gorm, DepでCRUDできるAPI作成&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;使用技術&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BD%BF%E7%94%A8%E6%8A%80%E8%A1%93&quot; aria-label=&quot;使用技術 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;使用技術&lt;/h2&gt;
&lt;p&gt;今回GraphQLサーバ構築に使った大きな部分の技術をまとめると&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Dep (パッケージ管理)&lt;/li&gt;
&lt;li&gt;Gin (Webフレームーク)&lt;/li&gt;
&lt;li&gt;Gorm (ORM)&lt;/li&gt;
&lt;li&gt;gqlgen (GraphQLサーバライブラリ)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;となります。gqlgen以外は&lt;a href=&quot;/blog/2019/05/02/docker-gin-gorm-dep-crud&quot;&gt;前回の記事&lt;/a&gt;とほぼ一緒なのでかぶっているやつは説明しません。&lt;/p&gt;
&lt;h4&gt;gqlgen&lt;/h4&gt;
&lt;p&gt;gqlgenはgraphQLのサーバライブラリです。goのgraphQLサーバ用のライブラリは&lt;a href=&quot;https://github.com/graphql-go/graphql&quot;&gt;graphql-go/graphql&lt;/a&gt;
などもあるのですが、スキーマドリブンで開発が進められそうな&lt;a href=&quot;https://github.com/99designs/gqlgen&quot;&gt;99designs/gqlgen&lt;/a&gt;を使ってみました。&lt;/p&gt;
&lt;p&gt;graphql-goの方はinterface{}が大量にでてきて、せっかくの型情報が有効に使えず微妙なので使うのはやめておきました。
gqlgenを使うと&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;schemaを定義&lt;/li&gt;
&lt;li&gt;resolverにクエリに対するロジックを定義&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という順序で開発を進められresolverの実装に集中できるので、最初の慣れは必要ですが慣れてくると軽快に実装を進められそうな感触はうけました。&lt;/p&gt;
&lt;h2 id=&quot;実装の流れ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%9F%E8%A3%85%E3%81%AE%E6%B5%81%E3%82%8C&quot; aria-label=&quot;実装の流れ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;実装の流れ&lt;/h2&gt;
&lt;p&gt;gqlgenのサンプルにあるのは、TodoリストでGetting Startを見ればするっと始めることができるのですが、
そこから一歩進んでGormと一緒に使ったり、CRUDしたりするとなるとまた一工夫必要なので簡単な流れを書いていきます。&lt;/p&gt;
&lt;h3 id=&quot;gqlgenをdepでインストール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#gqlgen%E3%82%92dep%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; aria-label=&quot;gqlgenをdepでインストール permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;gqlgenをdepでインストール&lt;/h3&gt;
&lt;p&gt;depを使わなければ普通にgo getすれば良いのですが、dep使う場合はschemaからボイラープレートを吐き出すための
ラッパースクリプトを用意する必要があります。&lt;/p&gt;
&lt;p&gt;scripts/gqlgen.go&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;github.com/99designs/gqlgen/cmd&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	cmd&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これを作っておくと、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$go&lt;/span&gt; run scripts/gqlgen.go init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;という感じでgqlgenのコマンドを実行できるようになります。
ラッパースクリプトができたら下記のコマンドgqlgenでの開発に必要なファイルを準備します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$go&lt;/span&gt; run scripts/gqlgen.go init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;initが完了すると、gqlgenのファイルが作成されるのですがそれぞれのファイルを簡単に説明すると&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gqlgen.yml ・・・ gqlの設定ファイル。生成されるコードの設定を書いていきます。&lt;/li&gt;
&lt;li&gt;genereated.go ・・・ schemaを定義してスクリプトを叩くと生成されるファイル。スクリプトで生成されるので手動で編集するのはダメ。&lt;/li&gt;
&lt;li&gt;models_gen.go ・・・ schema定義から生成されるモデル群が定義されたファイル。スクリプトで生成されるので手動で編集するのはダメ。&lt;/li&gt;
&lt;li&gt;resolver.go ・・・ こちらはresolver.goというファイルがなければ自動で生成される。&lt;/li&gt;
&lt;li&gt;server/server.go ・・・ サーバーのエントリーポイント&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;となります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;コードの生成ができたら念の為&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;dep ensure&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;して依存パッケージがインストールされているか確認します。&lt;/p&gt;
&lt;h3 id=&quot;Gin用のエントリーポイントを用意&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Gin%E7%94%A8%E3%81%AE%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%82%92%E7%94%A8%E6%84%8F&quot; aria-label=&quot;Gin用のエントリーポイントを用意 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Gin用のエントリーポイントを用意&lt;/h3&gt;
&lt;p&gt;gqlgenでコードを生成するとサーバーのエントリポイントまで用意してくれるのですが、
gqlgenが用意してくれるserver.goだとginを使わないので、ginで動くように書き換えていきます。&lt;/p&gt;
&lt;p&gt;コードはこちらのドキュメントのコピペですが、playground用のエンドポイントと本チャンのエンドポイント二つを用意します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;github.com/99designs/gqlgen/handler&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;github.com/gin-gonic/gin&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Defining the Graphql handler&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;graphqlHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HandlerFunc &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  h &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; handler&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GraphQL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;NewExecutableSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Config&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Resolvers&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;Resolver&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    h&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ServeHTTP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Writer&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Request&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Defining the Playground handler&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;playgroundHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HandlerFunc &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  h &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; handler&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Playground&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;GraphQL&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/query&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    h&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ServeHTTP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Writer&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Request&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// Setting up Gin&lt;/span&gt;
  r &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/query&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;graphqlHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;playgroundHandler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Gormのモデルの用意&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Gorm%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E7%94%A8%E6%84%8F&quot; aria-label=&quot;Gormのモデルの用意 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Gormのモデルの用意&lt;/h3&gt;
&lt;p&gt;ここまででエントリポイントが用意できたので、お次はスキーマ定義で使うモデルを定義していきます。
ファイルの配置はGoのスタンダードレイアウトにそって配置しているのでモデルはinternal/models配下に
配置をしていきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// user.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; models

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;time&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; User &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	ID        &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	Name      &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
	Todos     &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;Todo
	CreatedAt time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Time
	UpdatedAt time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Time
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// todo.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; models

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;time&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Todo &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	ID        &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	Text      &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
	Done      &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;
	UserID    &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	User      User
	CreatedAt time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Time
	UpdatedAt time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Time
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ここではモデルを構造体で定義しているのですが、Gormのドキュメントを見ればわかる通り
モデル定義に埋め込みを使って書く方がスマートかと思うのですが、
この書き方だとコードを生成する時のコマンドでエラーがでてしまうので、一旦モデルのフィールドをベタ書きしています。
(コードとかちゃんと読んだら打開策はあるのかも）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// todo.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; models

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;token string&quot;&gt;&quot;time&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Todo &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  gorm&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Model
	Text      &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
	Done      &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;
	UserID    &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
	User      User
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;このように、自前のモデルを定義できたらgqlgenではgqlgen.ymlにモデルのマッピングを設定する必要があります。
今回の例ではモデルは下記のような設定になるのでgqlgen.ymlに以下を追記します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;models&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  Todo&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    model&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; gin_graphql&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;internal&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo
  User&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    model&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; gin_graphql&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;internal&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;schemaを定義&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#schema%E3%82%92%E5%AE%9A%E7%BE%A9&quot; aria-label=&quot;schemaを定義 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;schemaを定義&lt;/h3&gt;
&lt;p&gt;ここまではスキーマ駆動で開発するまでの準備だったのですが、ここでAPIとして必要な機能をスキーマとし定義していきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Todo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;   Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  done&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Boolean&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  userID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  user&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  createdAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  updatedAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; User &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  createdAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  updatedAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Query &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  todos&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  users&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;User&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;todo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; FetchTodo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

input NewTodo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  userId&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

input EditTodo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

input NewUser &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

input FetchTodo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Mutation &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;createTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; NewTodo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;updateTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; EditTodo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;deleteTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Todo&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;createUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; NewUser&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

scalar Time&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;今回のCRUDを実装するための&lt;strong&gt;schema.graphql&lt;/strong&gt;がこちらです。基本的な文法はgraphqlのスキーマの文法にそった形で
定義をしていくのですが、全体の見方としてリソースに変更を加えるスキーマはMutationの構造体にそれ以外の参照系の処理はQuery
に書いていきます。そしてそれぞのれメソッドで必要な型（User, Todo, NewUser)を別で定義していくという形です。&lt;/p&gt;
&lt;p&gt;これが出来上がると、先ほどのgqlgenコマンドを使ってコードを生成してresolverの実装に移ることができるようになります。
resolverではスキーマであらかじめインプットとアウトプットを決めていて、その通りにコードを生成しているのであとは
その間のロジックとを実装するだけということになります。&lt;/p&gt;
&lt;h3 id=&quot;resolverの実装&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#resolver%E3%81%AE%E5%AE%9F%E8%A3%85&quot; aria-label=&quot;resolverの実装 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;resolverの実装&lt;/h3&gt;
&lt;p&gt;というわけでスキーマの定義がおわったのでいよいよresolverの実装に入ってきます。resolverでは、クライアントからのリクエストに応じて
DBからデータを取得してくる、レコードを作成する等々を行なっていきます。&lt;/p&gt;
&lt;p&gt;gqlgenにおける注意点としては、resolver.goはすでに存在する場合コード生成のコマンドを実行しても上書きされずそのままという点です。
(逆にスキーマ変えてresolverが全部もとの状態に戻ってしまうのは当たり前に辛いのですが）&lt;/p&gt;
&lt;p&gt;というわけでCRUDするresolverは下に貼っておきます。
ひとつずつ説明するのもやぼったいのでざっくり説明をするとさきほどschema.graphqlで定義したメソッド群が
resolverに実装されていれば良いので、mutaionはmutationResolver、queryはqueryResolverのメソッドとしてひとつひとつずつ実装を進めていけば完了です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Resolver &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;Resolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Mutation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; MutationResolver &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;Resolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Query&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; QueryResolver &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;queryResolver&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; mutationResolver &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;Resolver &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CreateUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input NewUser&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	user &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		Name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CreateTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input NewTodo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	todo &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		Text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;   input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		UserID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserID&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		Done&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;UpdateTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input EditTodo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	todo &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	todo&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Text &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Text
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;mutationResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;DeleteTodo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	todo &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		ID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; queryResolver &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;Resolver &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;queryResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Todo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;FetchTodo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; todo models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Preload&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;User&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;queryResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Todos&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; todos &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Todo
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Preload&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;User&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; todos&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;queryResolver&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Users&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ctx context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; users &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User
	db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;users&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; users&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;起動&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%B5%B7%E5%8B%95&quot; aria-label=&quot;起動 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;起動&lt;/h3&gt;
&lt;p&gt;resolverの実装までできたらあとは起動するだけなので、go runをしていきます。
今回用意したリポジトリでは、エントリーポイントをcmd/app/main.goとしており、環境変数を与えて設定ファイルを
読むようにしているのでENVもあたえつつ下記コマンドを実行します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;ENV&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;development &lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt; run cmd&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;app&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;起動するとサーバーのログが流れ始めると思うのですが、同時に localhost:8080にアクセスするとplaygroundでクエリを試すことができます。&lt;/p&gt;
&lt;h2 id=&quot;詰まったところ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A9%B0%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%93%E3%82%8D&quot; aria-label=&quot;詰まったところ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;詰まったところ&lt;/h2&gt;
&lt;p&gt;流れの部分はさらっと書きましたが、今回の構築にあたり結構いろんなところで詰まったのでそこについてまとめておきます。&lt;/p&gt;
&lt;h3 id=&quot;CreatedAtやUpdatedAtなどの日付の型ってどうやってスキーマ定義するの&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#CreatedAt%E3%82%84UpdatedAt%E3%81%AA%E3%81%A9%E3%81%AE%E6%97%A5%E4%BB%98%E3%81%AE%E5%9E%8B%E3%81%A3%E3%81%A6%E3%81%A9%E3%81%86%E3%82%84%E3%81%A3%E3%81%A6%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E3%81%AE&quot; aria-label=&quot;CreatedAtやUpdatedAtなどの日付の型ってどうやってスキーマ定義するの permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CreatedAtやUpdatedAtなどの日付の型ってどうやってスキーマ定義するの？&lt;/h3&gt;
&lt;p&gt;Schemaの型というのは、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ID&lt;/li&gt;
&lt;li&gt;Int&lt;/li&gt;
&lt;li&gt;Float&lt;/li&gt;
&lt;li&gt;String&lt;/li&gt;
&lt;li&gt;Boolean&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;しかデフォルトで設定されていないので、日時などのデータは別で定義しておく必要があります。
私がサンプルを作るときはここにつまずいて色々とドキュメントを漁っていたのですが、gqlgenがデフォルトで
提供しているTime型というのがあるのでそれを使えば問題ありませんでした。&lt;/p&gt;
&lt;p&gt;上にのせたスキーマ定義にも書いたようにgqlgenで定義された型を使用するには&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;scalar Time&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とします。&lt;/p&gt;
&lt;p&gt;この宣言をした後にスキーマでその型を使うとGo組み込みのtime.Time型にマッピングしてくれます。
gqlgenではTime以外にもMap, Upload, Anyなどに対応しているのでそれぞれの型が必要な時は上のように
scalar宣言でスキーマで使える型を追加して頂ければ良いと思います。&lt;/p&gt;
&lt;h3 id=&quot;Gormを埋め込みしたモデルでジェネレートしようとするとこける&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Gorm%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%97%E3%81%9F%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A7%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%83%88%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%81%93%E3%81%91%E3%82%8B&quot; aria-label=&quot;Gormを埋め込みしたモデルでジェネレートしようとするとこける permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Gormを埋め込みしたモデルでジェネレートしようとするとこける&lt;/h3&gt;
&lt;p&gt;これは解決していなくてワークアラウンドでしのいだのですが、下記のようにモデルをgormの埋め込みで
定義するとジェネレートしようとした時にこけます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; User &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  gorm&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Model
  name
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;一旦は上の方のモデル定義にあるように全てのフィールドをベタで書いてしのいだのですが、なんだかイマイチです。
gormとgqlgenを一緒に使うのに結構ハマったのですがGo詳しい人だと秒で解決できる問題ないんですかね・・・ちょっとわからないので勉強します。&lt;/p&gt;
&lt;h3 id=&quot;リストを取得した時にアソシエーションのモデルも取得する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E6%99%82%E3%81%AB%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E3%82%82%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B&quot; aria-label=&quot;リストを取得した時にアソシエーションのモデルも取得する permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リストを取得した時にアソシエーションのモデルも取得する&lt;/h3&gt;
&lt;p&gt;これはGraphQLというより、Gormの話なのですがリストをAPIから取得する時に同時に関連したモデルも取ってきたいというこ結構ありますよね。
ということで今回のサンプルでもTodoのリストを取得しつつ、Todoを作成したユーザの情報もとりたいなということでgqlgen+gorm（ほとんどgormの話ですが）で書くとどうなるのかというのをやってみました。&lt;/p&gt;
&lt;p&gt;ちょっとめんどくさそうでしたが、思ったより結構シンプルにかけました。構造体にそれ用のフィールドを用意するだけです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Todo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;   Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; String&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  done&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Boolean&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  userID&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  user&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  createdAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
  updatedAt&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Time&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Todoのモデルを例にとると、userIDとuserというフィールドを用意してあげるだけで、関連したモデルを取ってくるのに困りません。
あとは、resolver内で&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Preload&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;User&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;todo&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;という形で読んであげれば、関連したモデルもろともバシッと取ってきてくれます。
リストを取得する時に気になるのはN+1問題ですが、SQLのログをみても&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;app&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;src&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;gin_graphql&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;resolver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;go:&lt;span class=&quot;token number&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;token number&quot;&gt;27&lt;/span&gt;:&lt;span class=&quot;token number&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90&lt;/span&gt;ms&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;todos&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ASC&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;rows&lt;/span&gt; affected &lt;span class=&quot;token operator&quot;&gt;or&lt;/span&gt; returned &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;app&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;src&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;gin_graphql&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;resolver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;go:&lt;span class=&quot;token number&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;05&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;token number&quot;&gt;27&lt;/span&gt;:&lt;span class=&quot;token number&quot;&gt;07&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2.65&lt;/span&gt;ms&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;users&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;users&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token identifier&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ASC&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;rows&lt;/span&gt; affected &lt;span class=&quot;token operator&quot;&gt;or&lt;/span&gt; returned &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;という形でPreloadしてくれています。（当たり前といえば当たり前なのですが）
ネットで記事をあさっているとgqlを触っているとN+1がーという話をよくみたのですが、Preloadしとけば問題なさそうなんですが
どうなんですかね？gormを使ってないからなんでしょうか？ちょっとわからないので課題として頭の片隅においておきます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;というわけで、最近のWeb APIにありがちなスタック+GraphQLでサーバーを構築してみました。
最近やっぱりRESTで案件をやっていると限界を感じてきているのでGraphQLやっぱり良いなという感じです。。&lt;/p&gt;
&lt;p&gt;今更感は否めないですが、GraphQLはだいぶ便利そうです。RESTだとフロントに依存してはダメとわかりつつもWeb作った後にアプリも作ろうみたいになるとどうしてもAPI側の改修って必要になりますよね。&lt;/p&gt;
&lt;p&gt;そりゃ別のもの作るので、実装当初に予期していないことが起こるのはある程度しょうがないのですが、その都度またエンドポイントを作りなおしてということをやっていくのでなんだかいたたまれない気持ちになってくることも多いです。
もともとWebでつくっていたものをアプリで作ろうとなって全く既存APIの改修が必要なかったら素敵ですよね。&lt;/p&gt;
&lt;p&gt;GraphQLの場合は、スキーマでリソースを定義しておけばクライアント側で必要な情報だけとってくるということができるので、&lt;/p&gt;
&lt;p&gt;新しくエンドポイントを作るときのどれくらいの情報を返しておけば良いのか？ということや将来どれくらいエンドポイントがチャンキーになりそうかという未来予測を立てたりする必要がなさそうでとっても便利なものに見えます。&lt;/p&gt;
&lt;p&gt;もちろん、このサンプルに比べてより複雑で大規模なAPIを構築した時にどうなるのか？というところはやってみないとわらかないところではあるのですが
今回のつくってみたでは、GraphQLの可能性を大いに感じました。&lt;/p&gt;
&lt;p&gt;日々の業務でREST脳になっている方は、休日や平日夜にGraphQLを試してみると新しい発見が面白いと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/05/20190513_gin-gorm-gqlgen-crud/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Docker, Gin, Gorm, DepでCRUDできるAPI作成]]></title><description><![CDATA[このような記事を書きつつGOを学習中なのですが、今回はWebAPIでCRUDでも作ってみるかということで
手順や詰まったところをまとめていきます。 使用する技術 Docker ローカルのPCを汚すのが嫌なのでDockerを使っていきます。MySQLも使うのでdocker…]]></description><link>https://ver-1-0.net/blog/2019/05/02/docker-gin-gorm-dep-crud</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/05/02/docker-gin-gorm-dep-crud</guid><pubDate>Thu, 02 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このような記事を書きつつGOを学習中なのですが、今回はWebAPIでCRUDでも作ってみるかということで
手順や詰まったところをまとめていきます。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/01/21/get-start-go&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/03/11/go-numpre&quot;&gt;Go言語で数独（ナンプレ）を解くコードを書いてみた&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;使用する技術&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%8A%80%E8%A1%93&quot; aria-label=&quot;使用する技術 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;使用する技術&lt;/h2&gt;
&lt;h4&gt;Docker&lt;/h4&gt;
&lt;p&gt;ローカルのPCを汚すのが嫌なのでDockerを使っていきます。MySQLも使うのでdocker-composeで作っていきます。&lt;/p&gt;
&lt;h4&gt;Gin&lt;/h4&gt;
&lt;p&gt;Go言語のフレームワークの一つで、Go言語フレームワークでも一番スターが多いそうなのでAPI実装のために
Ginを使ってみました。プロダクトの実装ではフルスタックフレームワークの方が嬉しい面もあるのでbeeogo
にも惹かれましたが、まずはシンプルなフレームワークから使ってコード書く量を増やしましょうということで
Ginを採用しました。&lt;/p&gt;
&lt;h4&gt;Gorm(MySQL)&lt;/h4&gt;
&lt;p&gt;Go言語のORM（オーアールマッパー）です。RailsライクなインターフェースだそうなのでRailsのActiveRecordに
親しんでいたものとしていくつかORMあるそうですがgormを採用しました。&lt;/p&gt;
&lt;h4&gt;Dep&lt;/h4&gt;
&lt;p&gt;Goのパッケージ管理ツールです。単純にパッケージ管理が必要なのと、Dockerで環境を構築する時に&quot;go get&quot;で
Dockerfileが荒らされるのが嫌だったので、アプリ内でしか使わないものはdepコマンドで管理するようにします。&lt;/p&gt;
&lt;h2 id=&quot;早速つくっていく&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%97%A9%E9%80%9F%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%A6%E3%81%84%E3%81%8F&quot; aria-label=&quot;早速つくっていく permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;早速つくっていく&lt;/h2&gt;
&lt;h3 id=&quot;コンテナの準備&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E6%BA%96%E5%82%99&quot; aria-label=&quot;コンテナの準備 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コンテナの準備&lt;/h3&gt;
&lt;p&gt;まずはDockerのイメージの作成からやっていきます。Dockerfileを晒すとこういう感じです。
最終的なリポジトリはこちらです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/gin-gorm-sample&quot;&gt;https://github.com/version-1/gin-gorm-sample&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;dockerfile&quot;&gt;&lt;pre class=&quot;language-dockerfile&quot;&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; golang:latest&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ENV&lt;/span&gt; ROOTDIR /app&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ENV&lt;/span&gt; WORKDIR /app/src/gin-sample&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ENV&lt;/span&gt; GOPATH &lt;span class=&quot;token variable&quot;&gt;$ROOTDIR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ENV&lt;/span&gt; GOBIN &lt;span class=&quot;token variable&quot;&gt;$ROOTDIR&lt;/span&gt;/bin&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;WORKDIR&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$WORKDIR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;VOLUME&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$ROOTDIR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ADD&lt;/span&gt; . &lt;span class=&quot;token variable&quot;&gt;$ROOTDIR&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;RUN&lt;/span&gt; apt-get update &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
    apt-get -y install mysql-client &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
    echo &lt;span class=&quot;token string&quot;&gt;&quot;export PATH=$PATH:$GOBIN&quot;&lt;/span&gt; &gt; /root/.bashrc&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CMD&lt;/span&gt; [&lt;span class=&quot;token string&quot;&gt;&quot;go&quot;&lt;/span&gt;, &lt;span class=&quot;token string&quot;&gt;&quot;run&quot;&lt;/span&gt;, &lt;span class=&quot;token string&quot;&gt;&quot;cmd/app/main.go&quot;&lt;/span&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;やっているのは各種環境変数の設定とMySQLクライアントのインストールとGOBINをパスに含めたりする部分です。
docker-composeはこういう形です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;version: &apos;3&apos;
services:
  app:
    build: .
    ports:
      - &quot;8080:8080&quot;
    security_opt:
      - seccomp:unconfined
    depends_on:
      - db
  db:
    image: mysql:5.7.19
    environment:
       - MYSQL_ROOT_PASSWORD=password
    ports:
      - &quot;3306:3306&quot;
    volumes:
      - ./data/mysql:/var/lib/mysql:cached
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このままだとdepがインストールできていないので作成したコンテナでgo getしてビルドされたdepファイルを作成します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker-compose&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token environment constant&quot;&gt;$PWD&lt;/span&gt;:/app &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8080&lt;/span&gt;:8080 app &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;
go get &lt;span class=&quot;token parameter variable&quot;&gt;-u&lt;/span&gt; github.com/golang/dep/cmd/dep&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここまでコンテナ内でdepコマンドが使えるようになるのでコンテナ内でさらに&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;dep ensure&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とすることで依存パッケージのビルドが完了します。&lt;/p&gt;
&lt;h3 id=&quot;コーディング&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&quot; aria-label=&quot;コーディング permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コーディング&lt;/h3&gt;
&lt;p&gt;最初src/[パッケージ名]下のディレクトリの配置をどうするか悩んだのですがスタンダードなGo Projectのレイアウト
があるそうなので今回はそれに則ってみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/golang-standards/project-layout&quot;&gt;https://github.com/golang-standards/project-layout&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;cmd/ 配下に実際に実装するコマンドのmain.goを配置しました。今回はDBからデータを取得などなども実装していくので
はじめに簡易マイグレーションコマンドを実装しました。&lt;/p&gt;
&lt;p&gt;としています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// cmd/migrate/main.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;gin-sample/internal/models&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;gin-sample/pkg&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  db &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; pkg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Connect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;development&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;defer&lt;/span&gt; db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Close&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;AutoMigrate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Code&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;L1212&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Price&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Code&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ABABA&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Price&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Code&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;CDCDC&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Price&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここでは単純にDBとの接続を行い、productデーブルを作成後に実データ投入という感じです。
マイグレーションといいつつデータも投入していますね。DB接続の部分は実際のWebAPIの方でも使うので
パッケージに切り出しています。&lt;/p&gt;
&lt;p&gt;そして次は実際のWeb API部分です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// cmd/app/main.go&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;gin-sample/internal/models&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;gin-sample/pkg&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;github.com/gin-gonic/gin&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;net/http&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;strconv&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  r &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  db &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; pkg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Connect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;development&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;defer&lt;/span&gt; db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Close&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;LogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/products&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; products &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product
    db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;products&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; products&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/products/:id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    id &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Param&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; product models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product
    db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;product&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; product&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/products&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    product &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    err &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Bind&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;product&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;http&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;StatusBadRequest&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Request is failed: &quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;NewRecord&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;product&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    res &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;product&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Error &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;402&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;PUT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/products/:id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; strconv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Atoi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Param&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    product &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;product&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    params &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    err &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Bind&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;params&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;http&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;StatusBadRequest&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Request is failed: &quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;product&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Updates&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;params&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; product&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;DELETE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/products/:id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; strconv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Atoi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Param&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Where&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ID = ?&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;models&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Product&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// listen and serve on 0.0.0.0:8080&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;実際はコントローラに切り出した方がお行儀が良さそうですが、一旦フラットに書き下しています。
実装のながれをざっくり説明するとさらっとおわってしまうので詰まったところ等々を書いていきます。&lt;/p&gt;
&lt;h2 id=&quot;詰まったところ工夫したところ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A9%B0%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%93%E3%82%8D%E5%B7%A5%E5%A4%AB%E3%81%97%E3%81%9F%E3%81%A8%E3%81%93%E3%82%8D&quot; aria-label=&quot;詰まったところ工夫したところ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;詰まったところ・工夫したところ&lt;/h2&gt;
&lt;h3 id=&quot;delveの導入&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#delve%E3%81%AE%E5%B0%8E%E5%85%A5&quot; aria-label=&quot;delveの導入 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;delveの導入&lt;/h3&gt;
&lt;p&gt;何かプログラミングを始める時の開発効率をあげる方法としてデバッガに慣れ親しむのは大事だと思うのですが、
今回Goのデバッガとしてdelveを入れてみました。&lt;/p&gt;
&lt;p&gt;使い方としては、dlvコマンドでアプリを起動した後にプロンプトが表示されるのでそこでブレークポイントを設定して、設定が終わったらcontinueとするとブレークポイントまで
処理が進むので、ポイントで処理が止まったらそこで変数の中身みたり、変数書き換えたりできるという感じです。&lt;/p&gt;
&lt;p&gt;使用感はrubyのbyebugなどと似ているのですが最初にブレークポイントをコマンドで設定するのが少々面倒に感じました。
byebugなどだとコード書き換えることにはなるのですが、ファイルに直接ブレークポイントを書き込む感じになるのですのがdelve
だとこのファイルのこの行みたいに指定しないといけないので直感的でなくちょっと手間です。（何か良い方法があれば知りたい）&lt;/p&gt;
&lt;p&gt;あと、byebugだとステップ実行しているところで任意のコードを実行できるのですが、delveだとできないんですかね？？
少し調べてもちょっとわからなかったので一旦保留にしています。&lt;/p&gt;
&lt;p&gt;インストール自体は簡単で、depと同様にコンテナ内でgo getして使います。&lt;/p&gt;
&lt;p&gt;一点注意点として、dockerの設定でセキリティオプションを設定しないとうまく起動してくれないということです。
docker-composeで&quot;seccop:unconfined&quot;を設定していないと下のようなエラーが出てきて使えないです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;could not launch process: fork/exec [...]: operation not permitted&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;わすれずにdocker-composeのオプション指定をしておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;設定ファイルの外出し&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%A4%96%E5%87%BA%E3%81%97&quot; aria-label=&quot;設定ファイルの外出し permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;設定ファイルの外出し&lt;/h2&gt;
&lt;p&gt;DBに接続する時に、ベタ書きでDBの設定をしても良かったのですが、実プロダクトだとそんなことはしないだろうということで
設定ファイルを外だしにする方法を調べて、実装しました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// pkg/config.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; configs

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;github.com/BurntSushi/toml&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Config &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  Database Database
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Database &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  User     &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;`toml:&quot;user&quot;`&lt;/span&gt;
  Password &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;`toml:&quot;password&quot;`&lt;/span&gt;
  Address  &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;`toml:&quot;address&quot;`&lt;/span&gt;
  Name     &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;`toml:&quot;name&quot;`&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;GetConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;env &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Config &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; config Config
  &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; toml&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;DecodeFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;configs/&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;env&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;.toml&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;config&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;panic&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; config
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;大したことはしていないのですが、このモジュールで、tomlファイルを読み込んでパースした内容を
構造体にバインドする感じです。&lt;/p&gt;
&lt;p&gt;設定の呼び出し元はこんな感じ、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// pkg/database.go&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; pkg

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;github.com/go-sql-driver/mysql&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;github.com/jinzhu/gorm&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Connect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;env &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gorm&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DB &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  dbConf &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;GetConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Database
  mysqlConf &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; mysql&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Config&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    User&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;                 dbConf&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Passwd&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;               dbConf&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Password&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Net&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;                  dbConf&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Address&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    DBName&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;               dbConf&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    AllowNativePasswords&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    ParseTime&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;            &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  dsn &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; mysqlConf&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;FormatDSN&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  db&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; gorm&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Open&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;mysql&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; dsn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;panic&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; db
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;SQLログを画面に出力&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#SQL%E3%83%AD%E3%82%B0%E3%82%92%E7%94%BB%E9%9D%A2%E3%81%AB%E5%87%BA%E5%8A%9B&quot; aria-label=&quot;SQLログを画面に出力 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SQLログを画面に出力&lt;/h3&gt;
&lt;p&gt;開発中はリクエストのログもそうですがどのようなSQLが発行されているか知りたいですよね。
gormの場合はDBの接続を作った段階で下記の一文を入れれば発行されているSQLが見えるようになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;LogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;当初はGraphQLとか使ってCRUDやりたいなと思っていたのですがGinいれたりGormいれたりdep入れたりしていたら意外と
時間かかったので一旦ここでセーブしておきます。次回はGraphQLサーバやりたいですね。あとMongoとかも使いたい。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/05/20190502_docker-gin-gorm-dep-crud/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[React Navigationでのnavigateをpropsを介さずに行う]]></title><description><![CDATA[Rect Nativeでルートを管理するのによくReact Navigationを使うのですが、普通にReact Navigationをインストールすると
画面コンポーネントにバインドされたnavigationインスタンスを使って遷移を行う感じになると思うのですが、 API…]]></description><link>https://ver-1-0.net/blog/2019/04/27/react-navigation-without-props</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/04/27/react-navigation-without-props</guid><pubDate>Sat, 27 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Rect Nativeでルートを管理するのによくReact Navigationを使うのですが、普通にReact Navigationをインストールすると
画面コンポーネントにバインドされたnavigationインスタンスを使って遷移を行う感じになると思うのですが、 APIの成功・不成功をもとに画面を遷移させたりなどなど画面以外の場所でnavigationさせたい時ってありますよね。&lt;/p&gt;
&lt;p&gt;今回はそんな時用のTipsです。参考はこちらです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html&quot;&gt;Navigating without the navigation prop&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;さっそくやってみる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%95%E3%81%A3%E3%81%9D%E3%81%8F%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B&quot; aria-label=&quot;さっそくやってみる permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;さっそくやってみる&lt;/h2&gt;
&lt;p&gt;全体の仕組みとしては、topレベルのコンポーネントがnavigateインスタンスへの参照を持っているのでその参照を適当なモジュールに保持して適宜それを呼び出して使うという形です。
&lt;a href=&quot;https://reactnavigation.org/docs/en/app-containers.html&quot;&gt;navigation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;具体的なコードとしては、以下のような形でrefsを使ってnavigationへの参照が渡せるので、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; createStackNavigator&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; createAppContainer &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-navigation&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; NavigationService &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./NavigationService&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; TopLevelNavigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* ... */&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; AppContainer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createAppContainer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;TopLevelNavigator&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;App&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;AppContainer&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;ref&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;navigatorRef&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          NavigationService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setTopLevelNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;navigatorRef&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;NavigationServiceというその参照を保持するモジュールを用意してAppContainerでその参照をセットするという形です。&lt;/p&gt;
&lt;p&gt;実際には、以下のようなモジュールを用意します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// NavigationService.js&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; NavigationActions &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-navigation&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; _navigator&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;setTopLevelNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;navigatorRef&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  _navigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; navigatorRef&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;navigate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;routeName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; params&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  _navigator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    NavigationActions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;navigate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      routeName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      params&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  navigate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  setTopLevelNavigator&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コードをみてわかるようにsetTopLevelNavigatorでnavigateへの参照を保存して、
navigateさせたい時は、&lt;code class=&quot;language-text&quot;&gt;NavigationService.navigate(routeName, params)&lt;/code&gt;で画面遷移させることができる。
という具合です。&lt;/p&gt;
&lt;p&gt;下は、サインインが成功したらマイページに遷移させるというコードの例ですね。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; NavigationService &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./NavigationService&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;signInAsyncFunciton&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; email&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; password &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; acitons &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; signIn&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; signInSuccess&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; signInError &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; actions
  &lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;signIn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; data &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; api&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetchHoge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; email&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; password &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// SignIn Success&lt;/span&gt;
      &lt;span class=&quot;token function&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;signInSuccess&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      NavigationService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;navigate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Mypage&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;signInError&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;※コードはイメージです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;というわけで、navigationをprops経由しないで行う方法でした。&lt;/p&gt;
&lt;p&gt;これを使うと好きなところで画面を操作できるので、自由といえば自由なのですが、あまり乱用するとどこで、
画面を操作してわからなくなるので乱用は禁物ですね。ただログイン後遷移させたい時やリソースを削除した後に、詳細画面から一覧画面に遷移させたい。
などあると思うので使いどころ見極めてできると良いとですね。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/04/20190427_react-navigation-in-store/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[ミートアップにスノボとラクロス観戦。5泊7日のバンクーバ旅行まとめ]]></title><description><![CDATA[4月中旬にリフレッシュなどをかねて(GW…]]></description><link>https://ver-1-0.net/blog/2019/04/22/summary-of-vancouver-travel</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/04/22/summary-of-vancouver-travel</guid><pubDate>Mon, 22 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;4月中旬にリフレッシュなどをかねて(GWは高いので）バンクーバーに行ってきたので、旅行のまとめをしておこうかなと思います。&lt;/p&gt;
&lt;p&gt;仕事が結構家にこもりがちな仕事なので、定期的に海外なりどこか旅行にいきたいなとは思っていて今回もそれの一つではありました。
また、最近北米、東南アジア等々でエンジニアとして働いている日本人の話も聞いたりしてきたので、
どんなところなのかなというのも気になってバンクーバーに行ってみました。&lt;/p&gt;
&lt;div class=&quot;adsens&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;旅行中にしたこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%97%85%E8%A1%8C%E4%B8%AD%E3%81%AB%E3%81%97%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;旅行中にしたこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;旅行中にしたこと&lt;/h2&gt;
&lt;p&gt;今回は5泊7日の滞在でしたが、その間の主なアトラクションは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ウィスラーでのスノボード&lt;/li&gt;
&lt;li&gt;バンクーバーでのミートアップ参加&lt;/li&gt;
&lt;li&gt;バンクーバーでのラクロス観戦&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;でした。&lt;/p&gt;
&lt;p&gt;流れとしては前半3日半はウィスラーでそのあとバンクーバーに移動という感じでした。
ハイライトでいうとこの三つがハイライトなのですが、他にも色々あったので総括というか
あったことをつらつら書いていきます。&lt;/p&gt;
&lt;h2 id=&quot;旅行の準備はお早めに&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%97%85%E8%A1%8C%E3%81%AE%E6%BA%96%E5%82%99%E3%81%AF%E3%81%8A%E6%97%A9%E3%82%81%E3%81%AB&quot; aria-label=&quot;旅行の準備はお早めに permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;旅行の準備はお早めに&lt;/h2&gt;
&lt;p&gt;今回旅行の計画を始めたのが二ヶ月前くらいなのですが、飛行機調べたりチケット取ったりとかいうのをサボっていて
&lt;strong&gt;ズルズルと航空券を取らずにたら普通に二万円くらい航空券が値上がりしていました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;航空券って、計画しっかり立てて時間決めて、値段と航空会社と相談してという感じで結構時間かかるんですよね。
取る便間違えたりすると旅行の計画が台無しになるしで結構集中力がいるし普段の仕事は毛色の違う作業なのでずーっと後回しにしていたんですよね。&lt;/p&gt;
&lt;p&gt;そんなこんなで日付が迫って航空券とってちょっと高くなった中で、今度スノボのためのリフト券を取ろうと思ったらどうやら&lt;strong&gt;リフト券も
滑る日の14日前だと値段が安いらしくここでも無駄に高いチケットを買うハメになってしまいました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;面倒臭いのはしょうがないのですが、旅行のチケットは計画が確定した時点で早めに取った方が良いです。
わかってはいるんですがこれがなかなかムズカシイ。&lt;/p&gt;
&lt;p&gt;後に書くのですが治安の情報とかも大事なのでまず地球の歩き方などでしっかり情報収集してから宿決めて、航空券とってとしたいですね。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2UvO1dC&quot;&gt;地球の歩き方 カナダ西部 2018~2019&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;js-ga-click-amazon&quot; href=&quot;https://www.amazon.co.jp/B17-%E5%9C%B0%E7%90%83%E3%81%AE%E6%AD%A9%E3%81%8D%E6%96%B9-%E3%82%AB%E3%83%8A%E3%83%80%E8%A5%BF%E9%83%A8-2018-2019-%E5%9C%B0%E7%90%83%E3%81%AE%E6%AD%A9%E3%81%8D%E6%96%B9%E7%B7%A8%E9%9B%86%E5%AE%A4/dp/4478821704/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=%E5%9C%B0%E7%90%83%E3%81%AE%E6%AD%A9%E3%81%8D%E6%96%B9+%E3%83%90%E3%83%B3%E3%82%AF%E3%83%BC%E3%83%90%E3%83%BC&amp;qid=1555897429&amp;s=gateway&amp;sr=8-1&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=d8ed3371d46fb663d3d79d655b92ac52&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4478821704&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4478821704&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ホテル代はケチらない&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9B%E3%83%86%E3%83%AB%E4%BB%A3%E3%81%AF%E3%82%B1%E3%83%81%E3%82%89%E3%81%AA%E3%81%84&quot; aria-label=&quot;ホテル代はケチらない permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ホテル代はケチらない&lt;/h2&gt;
&lt;p&gt;アジアとかだと結構ホテル代安くて、あまり気にならないのですが北米地域とかだとホテルが結構高いです。&lt;strong&gt;バンクーバーだと普通に1泊1万円超えていきます。（複数人でいくとやすかったりはするのですが）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;そんなこんなで今回は一人旅だったので、安いホテルにしようという安易な感じで&lt;strong&gt;5000円くらいのホテル&lt;/strong&gt;を選んだのですが、そこがまあ結構辛かったです。
建物が古く床が軋むし、隣の部屋の物音がガンガン聞こえてくるし暖房が調節できないしで快適とは言えませんでした。&lt;/p&gt;
&lt;p&gt;ここまでだったら安いホテルだからで住むのですが、問題はホテルの周りで&lt;strong&gt;地球の歩き方にも行っちゃダメって書いてある&lt;/strong&gt;ようなところで、
ホテルに着いてから周りが怪しいと思ってネット検索してみるとスラム街が近いらしく浮浪者やドラッグの売人とかが結構いる地域の模様。&lt;/p&gt;
&lt;p&gt;ホテル裏の公園は、ホームレスのテントで半分以上埋まっていて極力付近を歩かないようにバスで移動していてもそこの地区から乗ってくる人たちだけ明らかに様子がおかしい。
ミートアップに参加して帰りが遅くなった時のホテルまでの道のりが恐怖すぎたので本当に困りました。&lt;/p&gt;
&lt;p&gt;(ミートアップでホテルの場所を話したら軽く引かれてた笑）&lt;/p&gt;
&lt;p&gt;設備が悪いだけなら我慢もできるのですが、ホテル周りの治安が悪いと夜もあまり遅くに帰れないので本当に旅行の自由度が制限されます。
一人旅とか男だけだからいいやとかで安易に安宿を選ぶと痛い目にあいますね。。&lt;/p&gt;
&lt;p&gt;今度からホテルは慎重に選ぶようにします。&lt;/p&gt;
&lt;h2 id=&quot;バンクーバーではUberが使えない&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%90%E3%83%B3%E3%82%AF%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A7%E3%81%AFUber%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84&quot; aria-label=&quot;バンクーバーではUberが使えない permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;バンクーバーではUberが使えない&lt;/h2&gt;
&lt;p&gt;以前カリフォルニアや台湾を旅行した時は、Uberが本当に便利だったのでそのノリでバンクーバーに乗り込んだのですがなんと&lt;strong&gt;バンクーバーでは今のところ、
Uberが使えないようです。。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;現地に到着して気づいたのですが、バンクーバー市内はバスが結構便利でこのような&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190422_summary-of-vancouver-travel/compass-card.jpg&quot; alt=&quot;コンパスカード&quot;&gt;&lt;/p&gt;
&lt;p&gt;パスモのような&lt;strong&gt;コンパスカード&lt;/strong&gt;と呼ばれるカードにクレカでお金をチャージしておけば料金などを気にせず乗ることができます。
詳しいバスの乗り方や料金などはググってもらえればわかると思うのですが、Googleマップをみると最寄りのバス停に何分あとにバスが来るやバスの現在位置などが
わかるので本当に便利でした。&lt;/p&gt;
&lt;p&gt;コンパスカードはスカイトレインという電車の駅でお金をデポジットして手に入れることができるので&lt;strong&gt;初めてバンクーバーに行く時は最初に駅でコンパスカードを手に入れておくと便利かと思います。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;ウィスラー最高&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A6%E3%82%A3%E3%82%B9%E3%83%A9%E3%83%BC%E6%9C%80%E9%AB%98&quot; aria-label=&quot;ウィスラー最高 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ウィスラー最高&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190422_summary-of-vancouver-travel/whistler.jpg&quot; alt=&quot;ウィスラースノボー&quot;&gt;&lt;/p&gt;
&lt;p&gt;ウィスラーは、ホテルも文句なしレストランやスーパーなどなども充実していて本当に過ごしやすかったです。&lt;/p&gt;
&lt;p&gt;4日間(3日半）いましたが、夜も飲み物が欲しくなったり小腹がすいたらスーパーに行けばいいし、モーニングは適当にカフェ探せばいいし、夕食のレストランも至るところにあるし
節約したければ材料買ってきてホテルで調理すればいいしとういう感じで本当に過ごしやすかったです。&lt;/p&gt;
&lt;p&gt;スノボの方は一日目は雪で二日目は晴れ、一日目は視界が悪い時間帯もありましたがトータルで満足に滑れました。長いコースはスキー向けという感じですが、パークもあるし文句のつけようがありませんでした。
コースが広すぎるのでスノボをした二日間ではブラッコム山まではいけませんがでしたが、また今度行く機会があればぜひそっちもチャレンジしたいです。&lt;/p&gt;
&lt;p&gt;今年は4月にしては雪が残っている方らしく、人もそこまで多くなく自由に楽しめました。&lt;strong&gt;現地のガイドさん曰く12月の中旬くらいがリフト券も安いし、雪も良いので狙い目らしいです。&lt;/strong&gt;
4月のちょっとあったかくなった時期(麓は一桁代上に行くとマイナスという天気でしたが）に行くのも良いですが今度いくなら12月がよいかもしれません。&lt;/p&gt;
&lt;h2 id=&quot;海鮮おいしかった&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%B5%B7%E9%AE%AE%E3%81%8A%E3%81%84%E3%81%97%E3%81%8B%E3%81%A3%E3%81%9F&quot; aria-label=&quot;海鮮おいしかった permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;海鮮おいしかった&lt;/h2&gt;
&lt;p&gt;ウィスラーでもバンクーバーでも海鮮系の食事を楽しみました。どちらの街も海がそばなので海鮮系のレストランは結構多いみたいです。&lt;/p&gt;
&lt;p&gt;ウィスラーでは、到着初日に地球の歩き方で見つけたお店に行ってみました。席につくと目の前に鉄板があって目の前で焼き物を焼いてくれるのですが、
シェフが様々なパフォーマンスもしてくれるので味以外にも楽しみがあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.opentable.jp/teppan-village-japanese-steakhouse&quot;&gt;Teppan Village Japanese Steakhouse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;パフォーマンス中の写真&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190422_summary-of-vancouver-travel/teppan-fire.jpg&quot; alt=&quot;Teppan Village Performance&quot;&gt;&lt;/p&gt;
&lt;p&gt;ロブスターとステーキ
&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190422_summary-of-vancouver-travel/robster.jpg&quot; alt=&quot;ロブスターとステーキ&quot;&gt;&lt;/p&gt;
&lt;p&gt;日系なので半分くらいが日本人の店員さんとシェフなので、英語が苦手だったりする人でも楽しめます。
今回はたまたまシェフが日本人だったので、おしゃべりしながらご飯食べてました。&lt;/p&gt;
&lt;p&gt;バンクーバーではラクロス観戦の前に時間があったのでオイスターバーに行ってきました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.tripadvisor.jp/Restaurant_Review-g154943-d10454676-Reviews-Fanny_Bay_Oyster_Bar_Shellfish_Market-Vancouver_British_Columbia.html&quot;&gt;Fanny Bay Oyster Bar &amp;#x26; Shellfish Market&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こんな感じで生牡蠣が楽しめます。フィッシュ＆チップスとワインで最高でした。店内もおしゃれで店員さんも親切でした。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190422_summary-of-vancouver-travel/oystar.jpg&quot; alt=&quot;Fanny Bay Oyster Bar &amp;#x26; Shellfish Market&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;旅行の計画にミートアップを挟むのオススメ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%97%85%E8%A1%8C%E3%81%AE%E8%A8%88%E7%94%BB%E3%81%AB%E3%83%9F%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%82%92%E6%8C%9F%E3%82%80%E3%81%AE%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1&quot; aria-label=&quot;旅行の計画にミートアップを挟むのオススメ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;旅行の計画にミートアップを挟むのオススメ&lt;/h2&gt;
&lt;p&gt;今回初めて、旅行中に現地のミートアップに参加しましたが結構楽しめました。（後半英語での会話に疲れてガス欠気味でしたが）&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2019/04/19/went-to-local-meetup-in-vancouver&quot;&gt;バンクーバー旅行で現地ミートアップに参加してきた話&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;ミートアップ自体はアプリか&lt;a href=&quot;https://www.meetup.com/ja-JP/&quot;&gt;このサイト&lt;/a&gt;から気軽に探せるので飛行機の待ち時間などに探してみて申し込んでみると良いと思います。
当然ミートアップに来ている人たちは現地で働いている or 学生なので、同じ感じで会話するのは難しいのかもしれませんが、色々な人がいて話を聞いているだけでも面白いです。&lt;/p&gt;
&lt;p&gt;旅行中ちょっと時間空きそうだなとあったら参加してみても良いかもしれません。&lt;strong&gt;特に一人旅の時なんかはぼっち飯しなくてすむのでオススメです。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;ボックスラクロス観戦おすすめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%83%A9%E3%82%AF%E3%83%AD%E3%82%B9%E8%A6%B3%E6%88%A6%E3%81%8A%E3%81%99%E3%81%99%E3%82%81&quot; aria-label=&quot;ボックスラクロス観戦おすすめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ボックスラクロス観戦おすすめ&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190422_summary-of-vancouver-travel/lacrosse.png&quot; alt=&quot;lacrosse&quot;&gt;&lt;/p&gt;
&lt;p&gt;カナダではボックスラクロスと言って、日本やアメリカでポピュラーなラクロスとはちょっと違うホッケーのコートを使った室内のラクロスが盛んなのですが、
**バンクーバーではボックスラクロスの観戦ができます。**チケットの買い方などなど詳細はまた別で記事にしようかなとは思うのですが、&lt;strong&gt;ボックスラクロス自体スピード感があるし、
タイムアウトやクォーターの間のゲームとかレクなど観客を飽きさせない仕組みが色々あるので一試合通して楽しめます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ラクロスは一応カナダの国技なのですが、ポピュラーとは言い難く観客席も空席が目立ちます。
盛り上がりにかけると言えばそうなのですが、人が少ない分自由に席移動できたり席を広々とれたりして快適に観戦できます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;総括というか印象に残ったことをつらつらと書いてみました。カナダってどんな場所なのかなというのがあったので、
今回旅行していたのですが、アメリカほど入国審査などなど厳しくなく全体的にゆとりがあるような印象をうけました。&lt;/p&gt;
&lt;p&gt;治安も悪そうな場所は少なそうですし、日本人も多いので住むには結構良いんじゃないかなという印象でした。
（個人的にはラクロス観戦もスノボもできるので趣味が合う）
ただ物価は結構高いので、そのあたりの住みづらさはあるのかもしれません。&lt;/p&gt;
&lt;p&gt;まぁ色々と書きましたが現地のミートアップに出てスポーツ観戦して、スノボしてという感じで充実した旅行になりました。
準備不足なところだったり予想外なところもちょこちょこありましたが、まぁそれも含めて楽しめたかと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/04/20190422_summary-of-vancouver-travel/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[バンクーバー旅行で現地ミートアップに参加してきた話]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2019/04/19/went-to-local-meetup-in-vancouver</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/04/19/went-to-local-meetup-in-vancouver</guid><pubDate>Fri, 19 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;先日バンクーバーで飛び入りで現地のミートアップに参加してきたので感想などをまとめてみたいと思います。
旅行でスタンプラリーみたいに観光地を回るのも良いのですが、個人的には現地の人と話しをしたり、現地で働いてる人の話などなど聞いてみたいなぁというのがあったので飛び入りではありますがミートアップに参加してみました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;ミートアップとは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9F%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%A8%E3%81%AF&quot; aria-label=&quot;ミートアップとは permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ミートアップとは？&lt;/h2&gt;
&lt;p&gt;エンジニアとかだと馴染みのある人も多いのですが、&lt;strong&gt;要は交流会&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;エンジニアのミートアップだとプログラミング言語縛りでミートアップをしたりするのですが、ミートアップには何かしらの共通点があれば良いので、Railsミートアップ、PHPミートアップなどだけでなく、ヨガミートアップ、英語学習者ミートアップなどなど様々なジャンルのミートアップが存在します。&lt;/p&gt;
&lt;p&gt;ミートアップには言葉通りの最寄りで開かれているミートアップを探すのには色々な方法があるのですが、今回は名前の通りミートアップという名前のアプリを使ってバンクーバーで開かれているミートアップに参加してきました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.meetup.com/ja-JP/&quot;&gt;何をするかが自分をつくる | Meetup&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;ICC-Vancouverミートアップに参加&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ICC-Vancouver%E3%83%9F%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%AB%E5%8F%82%E5%8A%A0&quot; aria-label=&quot;ICC Vancouverミートアップに参加 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ICC Vancouverミートアップに参加&lt;/h2&gt;
&lt;p&gt;ということで今回は、空港に向かう途中でミートアップのアプリで見つけたミートアップに参加してきました。
ミートアップのリンクはこちらです。
&lt;a href=&quot;https://www.meetup.com/ja-JP/iccvancouver/&quot;&gt;ICC Vancouver&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;開催場所は、バンクーバーダウンタウンのQuantum Cafeという場所で夕方から2時間程度開かれてました。カフェなので最初に自分の好きな飲み物を注文してあとは、来た人から順々にテーブルについていきます。&lt;/p&gt;
&lt;p&gt;私がついたころは人がまばらで、全く人がいないテーブルに座るのも気がひけるので2, 3人程度が座っているテーブルで好きに話始めました。&lt;/p&gt;
&lt;p&gt;ミートアップの感想などは後でまとめますが、今回参加したミートアップの流れとしては最初普通にカフェでおしゃべりして、そのあと有志でご飯会に移行という形でした。
参加者は想定していたより結構多く、30人程度はいたんじゃないかと思います。国籍も様々で、普通に日本人の方もいればカナダの人、韓国、フィリピン、チェコ、メキシコなどなど現地に住んでる色々な方と話すことができました。&lt;/p&gt;
&lt;h2 id=&quot;なんでミートアップに参加したの&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%AA%E3%82%93%E3%81%A7%E3%83%9F%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%9F%E3%81%AE&quot; aria-label=&quot;なんでミートアップに参加したの permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;なんでミートアップに参加したの？&lt;/h2&gt;
&lt;p&gt;旅行っていうと観光地巡りしたりとかって言うイメージがあるのでなんでわざわざミートアップなんか参加したの？と言うところわ掘り下げると一つは単純に一人旅でそこまで回りたい観光地がなかったからって言うのはあると思います。&lt;/p&gt;
&lt;p&gt;旅行の目的としては、ラクロス観戦とウィスラーでのスノボがメインだったので、ほかの時間で何しようかなと考えた時に何かしらのイベントに参加したら楽しいんじゃないかと考えてミートアップのアプリでイベントを探してちょうど良いのがあったのでそれに参加しました。&lt;/p&gt;
&lt;p&gt;もう一つの理由に英語力の強化というのがあって、普段オンラインの英会話などを使って極力英語を話す時間を作っているのですがリアルでの会話とレッスンの会話にはそれぞれ使う語彙やどうやって先生以外の人とコミュニケーションを取るかという部分が気になったので旅行先で積極的に英語を使う機会を作ってみました。&lt;/p&gt;
&lt;h2 id=&quot;ミートアップに参加してみた感想&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9F%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E6%84%9F%E6%83%B3&quot; aria-label=&quot;ミートアップに参加してみた感想 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ミートアップに参加してみた感想&lt;/h2&gt;
&lt;p&gt;ここからは実際に参加してどうだったかというものを書いていくのですが、書いていたら英語でのコミュニケーションと言うところに焦点を絞った感想が多くでてきました。&lt;/p&gt;
&lt;h3 id=&quot;リアルな場でのフリーテーマな会話が意外とできたかも&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%AA%E5%A0%B4%E3%81%A7%E3%81%AE%E3%83%95%E3%83%AA%E3%83%BC%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AA%E4%BC%9A%E8%A9%B1%E3%81%8C%E6%84%8F%E5%A4%96%E3%81%A8%E3%81%A7%E3%81%8D%E3%81%9F%E3%81%8B%E3%82%82&quot; aria-label=&quot;リアルな場でのフリーテーマな会話が意外とできたかも permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リアルな場でのフリーテーマな会話が意外とできたかも&lt;/h3&gt;
&lt;p&gt;オンラインで英会話したり、昔仕事でオフショア的な事をしていたのでその時などなど英語を使って初対面の人達とフリーテーマで話すというのはほとんどなかったので会場に到着するまでに相当緊張しました。
みんなペラペラで、話について行けなかったらどうしようとかいう不安はあったのですが、意外と話もできてリラックスして会話できました。&lt;/p&gt;
&lt;p&gt;初めてのことだと、やる前は必要以上に心配したり、不安になったりしますがやはりやってみると案外大したことないなんてことは良くありますね。今回のイベント参加は心理的ハードルを取り除くという目的が結構大きかったので、
コミュニケーションスキルなどなどまだまだ不足する部分は多いですが、この目的は達成できたのかなと思います。この調子で日本に戻っても英語のミートアップ行けそうな気がしてきました。&lt;/p&gt;
&lt;h3 id=&quot;ネイティブの英語は早くて理解できない&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%81%AE%E8%8B%B1%E8%AA%9E%E3%81%AF%E6%97%A9%E3%81%8F%E3%81%A6%E7%90%86%E8%A7%A3%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84&quot; aria-label=&quot;ネイティブの英語は早くて理解できない permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ネイティブの英語は早くて理解できない&lt;/h3&gt;
&lt;p&gt;非ネイティブの多いテーブルでの会話は8割方理解できのですが、ネイティブというか会話に慣れてる人たちのグループでのトークは速すぎてちょっと全然ついて行けませんでした。。&lt;/p&gt;
&lt;p&gt;非ネイティブかネイティブみたいに喋れる人達のグループに入るかは結構運ゲー的な要素もあるのですが、偶然そういったネイティブくらい話せそうな人達のグループに入ると全くついて行けませんでした。。
ネイティブの人たちのグループの会話にはいると普段草サッカーしている人がバルサのパス回しに参加したみない感じで全然ボールについていけません。&lt;/p&gt;
&lt;p&gt;こんな速さで英語処理しないと行けないなんて、、とちょっと気持ちが折れそうになりましたが、会話の速さを体感できたので実感としてさらに上のレベルを知れたのはよかったかなと思います。&lt;/p&gt;
&lt;h3 id=&quot;会話の集中力がもたない&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BC%9A%E8%A9%B1%E3%81%AE%E9%9B%86%E4%B8%AD%E5%8A%9B%E3%81%8C%E3%82%82%E3%81%9F%E3%81%AA%E3%81%84&quot; aria-label=&quot;会話の集中力がもたない permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;会話の集中力がもたない&lt;/h3&gt;
&lt;p&gt;個人的にそもそも大勢の飲み会とかがあまり好きでなく、3,4人くらいで話すのが好きなので会の形式が合ってないのは否めませんでしたが、やはり2時間くらい喋ってご飯行っても喋ってとなるとだんだん集中力が切れてきます。&lt;/p&gt;
&lt;p&gt;単純に自分のボキャブラリーが貧弱だったり、英語で会話するのに必要な集中力が切れてくるので後半になるにつれてどんどん会話が頭に入らなくなってきます。
まぁこれは英語のスキルを上げてあまり神経をすり減らさずに話せたり、聞き取れたりしていく他ない気がしてます。。&lt;/p&gt;
&lt;h3 id=&quot;リアルな英会話の場は勉強になる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%AA%E8%8B%B1%E4%BC%9A%E8%A9%B1%E3%81%AE%E5%A0%B4%E3%81%AF%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%82%8B&quot; aria-label=&quot;リアルな英会話の場は勉強になる permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リアルな英会話の場は勉強になる。&lt;/h3&gt;
&lt;p&gt;1対1の会話かつ先生と生徒と言う環境だとやっぱり生徒はお客さんで先生もちゃんと話を、聞いてくれるのですが、ミートアップなどだととそういうのがないのでやっぱりコミュニケーションを取るところの厳しさが学べて勉強になる気がしています。
また周りが自分より英語ができる場合その人の言い回しとか相づちとかを盗めたり、自分の表現で相手がどういう反応をするかなどなど体験できて非常に効率よくインプットができます。&lt;/p&gt;
&lt;p&gt;1対1で集中的にレッスンするのも良いのですが、こういった複数人で会話したりリアルな場所で話すという機会を今後増やしてきたいなと思いました。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上、バンクーバーでのミートアップに参加した話をまとめてみました。&lt;/p&gt;
&lt;p&gt;とりとめのないまとめにはなったかもしれないのですが、
&lt;strong&gt;旅行先でのミートアップ参加とかどうでしょう？というのとリアルな英会話の場所を作ると英語の勉強捗りそうだよ&lt;/strong&gt;
という話でした。&lt;/p&gt;
&lt;p&gt;旅行先で余った時間の使い道に困っている、英語が伸び悩んでいるなんて人にはミートアップ参加オススメしたいです。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/04/20190419_went-to-local-meetup-in-vancouver/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[ウィスラーでスノボを楽しむための準備。バス、リフト券、レンタル予約。]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2019/04/14/prepare-for-whistler</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/04/14/prepare-for-whistler</guid><pubDate>Sun, 14 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近カナダのウィスラーに行ってスノボーをしてきました。ウィスラーに行くため航空券をとったり、バスの予約したり、リフト券とったりレンタルの予約したりと結構やることが多かったのでウィスラーでスノーボードを楽しむために必要な準備をまとめておきます。&lt;/p&gt;
&lt;p&gt;カナダに行くのが初めてという方はこちらの記事も参考にしてみてください。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2019/04/11/checklist-for-first-time-canada-travel&quot;&gt;初のカナダ旅行に行く前の個人的な趣味も入ったチェックリスト&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;ウィスラーとは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A6%E3%82%A3%E3%82%B9%E3%83%A9%E3%83%BC%E3%81%A8%E3%81%AF&quot; aria-label=&quot;ウィスラーとは permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ウィスラーとは？&lt;/h2&gt;
&lt;p&gt;ウィスラーは、カナダはバンクーバーからバスで2,3時間ほどかけて行くことのできる街です。&lt;/p&gt;
&lt;p&gt;ウィスラーのスキー場は**バンクーバーオリンピックの会場にもなっており、世界有数のスキーリゾートとして知られています。**スキー場はブラッコム山、ウィスラー山の二つを滑れ、どちらの山もさ標高2000m以上でコース数200以上、最長滑走距離11kmと圧倒的なスケール感を持っています。&lt;/p&gt;
&lt;p&gt;中腹くらいから一番下までスノボーで降りると気圧差で割と耳が変な感じになります。標高差が1,600mほどあるのでこの現状も頷けます&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%82%B9%E3%83%A9%E3%83%BC%E3%83%BB%E3%83%96%E3%83%A9%E3%83%83%E3%82%B3%E3%83%A0&quot;&gt;ウィスラー・ブラッコム(Wikipedia)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;スキーリゾートなので、山の麓のリフト乗り場にはホテルやレストラン、ショップ、スーバーなどの施設がそろい大変すごしやすい環境ができています。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190414_prepare-for-whistler/whisler-town.jpg&quot; alt=&quot;ウィスラーの街並み&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;行き方所要時間&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A1%8C%E3%81%8D%E6%96%B9%E6%89%80%E8%A6%81%E6%99%82%E9%96%93&quot; aria-label=&quot;行き方所要時間 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;行き方・所要時間&lt;/h2&gt;
&lt;p&gt;ウィスラーは、バンクーバーもしくはバンクーバー国際空港からシャトルバスが出ているので、あらかじめバスを予約しておけばシャトルバスでウィスラーまで行くことができます。&lt;/p&gt;
&lt;p&gt;私の場合は、こちらのサイトからバスの予約ができるのでJapanadaの申し込みフォームからチケットを予約したい旨を伝えて、バスのチケットを予約しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.japanada.com/service/traffic/skylynx.html&quot;&gt;バンクーバー国際空港からの直行バスご予約　-JAPANADA Enterprises Inc.-&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;申し込みフォームに指定の内容を入力し、送信すると後日メールで予約が完了した旨が伝えられます。細かい説明は上のリンク先を参照してい頂ければと思いますが、予約が完了するとPDFでチケットが送られてくるので当日それを持って空港のスカイリンク（現地のバス運営の会社）の受け付けで手続きをして、指定のバスでバスを待つ形になります。&lt;/p&gt;
&lt;p&gt;申し込みの際の注意点としては、&lt;strong&gt;空港到着からバス出発の時間の間隔というところです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;初めての空港で不慣れで迷ったり、フライトが遅延したりという形でバスの出発時間に間に合わない場合があるのでバスの出発時刻は空港への到着時刻から十分余裕をもった時間を選ぶようにしましょう。&lt;/p&gt;
&lt;p&gt;私の場合は、9時半に空港に到着しする便にのったので12時頃に空港を出発するバスを選びました。&lt;/p&gt;
&lt;p&gt;荷物の受け取りや入国審査などなどあるのでなんだかなんだスカイリンクの受付についたのでが10時半頃という感じでした。手続きが終わってバス出発までは一時間ほどあったので空港にあった&lt;strong&gt;Tim Horton(ティムホートン）&lt;/strong&gt;（カナダに全土に展開しているファーストフードチェーンでドーナッツが有名らしいです。）で朝食がてら時間をつぶしていました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190414_prepare-for-whistler/tim-horton.jpg&quot; alt=&quot;Tim Horton&quot;&gt;&lt;/p&gt;
&lt;p&gt;リンク先には申し込みの方法やバスの時刻表・料金など結構細かく説明がかかれているのでバス予約を検討している方はこちらを参照していただけると良いと思います。&lt;/p&gt;
&lt;h2 id=&quot;リフト券予約&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%83%95%E3%83%88%E5%88%B8%E4%BA%88%E7%B4%84&quot; aria-label=&quot;リフト券予約 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リフト券予約&lt;/h2&gt;
&lt;p&gt;リフト券予約はこちらのサイトから購入することができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.whistlerblackcomb.com/plan-your-trip/lift-access/tickets.aspx&quot;&gt;Whistler Blackcomb.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;私がリフト券を取る時は日本でリフト券買う感覚で、いつ買っても値段一緒でしょと思ったのですが予想外に&lt;strong&gt;早めに購入した方がリフト券が安く済むそうです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;私の場合はシーズン終盤の4月の平日ということでリフト券を取るのに苦労はしなかったのですが、人の多い時期では、人数制限などがありリフト券があってもスキー場に入れないということがあるそうです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ウィスラーでのスキー、スノボーを検討する人は航空券などと同じタイミングで早めに予約をしておくことをおすすめします。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ネットでのリフト券の購入方法は、チケットの枚数と日付を選んで、その後に何日分のリフト券を購入するか決めて、支払い情報を入れて購入という形になります。&lt;/p&gt;
&lt;p&gt;ウィスラーでは1週間などの単位で滑りに来る人もいるらしく、中日で1日休みを入れたいという方のために特定の期間の中で5日分滑れるという形で自分で滑る日を決めてチケットを買うことができます。&lt;/p&gt;
&lt;p&gt;チケットはカナダ国内かつチケット購入が14日前の場合は郵送されてくるそうですが、それ以外の場合は購入後にメールで送られてくるチケットを持ってリフト券売り場まで引き換えに行きます。&lt;/p&gt;
&lt;p&gt;リフト券の引き換えはウィスラー山に上がるゴンドラ乗り場の隣にあります。メールで送られてきたチケットとパスポートを見せるとリフト券と交換してもらえます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/04/20190414_prepare-for-whistler/whistler-lift.jpg&quot; alt=&quot;ウィスラー山のゴンドラ乗り場&quot;&gt;&lt;/p&gt;
&lt;p&gt;リフト券ICカードのようなもので、リフトに乗るときに機械にかざすだけでリフトに乗ることができます。日本の一部のスキー場のようにわざわざ係員に見せる必要がなく便利です。&lt;/p&gt;
&lt;p&gt;さらにこのカードは滑り終わった後にカードを取っておくと後日またウィスラーに来る時はこのカードにリフト券をチャージする形で使う事ができます。&lt;/p&gt;
&lt;p&gt;これをする事でネット上でリフト券をチャージして、以降わざわざリフト券を交換する列に並ばなくて済むようになります。&lt;/p&gt;
&lt;p&gt;このカードを一度手に入れた場合は後のために大切にとっておきましょう。&lt;/p&gt;
&lt;h2 id=&quot;レンタル予約&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E4%BA%88%E7%B4%84&quot; aria-label=&quot;レンタル予約 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;レンタル予約&lt;/h2&gt;
&lt;p&gt;スキー、スノーボードはこちらからレンタル予約できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.rentskis.com/?intcmp=VRRFY17001&amp;#x26;resort=173&amp;#x26;start=20190411&amp;#x26;end=20190412#!/&quot;&gt;RentSkis.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;予約の流れとしては、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;サイトでレンタルする日、レンタルする装備、レンタルする店舗、装備のサイズを選択&lt;/li&gt;
&lt;li&gt;メールにて予約完了の旨が届く&lt;/li&gt;
&lt;li&gt;当日2.の明細をもって指定した店舗に行く&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という形になります。&lt;/p&gt;
&lt;p&gt;スキー、スノボを2日以上借りる場合は、ホテルに保管してもらえるので都度レンタル屋さんに返却する必要はありません。最終日に返却しに行きましょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;多くの店舗がリフトが動き出す前の8時から営業しているので、朝レンタルしてそのまま朝一のリフトに乗ることができます。(混み具合によりますが)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;店舗でレンタルする際は、板の長さやバインディングの設定の角度など聞かれるのであらかじめ考えておきましょう。&lt;/p&gt;
&lt;p&gt;板の長さは身長を入れると自動で出てくるので特に拘りがなければそれでお願いして、バインディングの設定もこだわりがなければノーマルなセッティングをお願いしましょう。&lt;/p&gt;
&lt;p&gt;日本で使っている板の角度などがあらかじめわかっているのであれば確認するのも良いと思います。&lt;/p&gt;
&lt;h2 id=&quot;航空券ホテルを予約する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%88%AA%E7%A9%BA%E5%88%B8%E3%83%9B%E3%83%86%E3%83%AB%E3%82%92%E4%BA%88%E7%B4%84%E3%81%99%E3%82%8B&quot; aria-label=&quot;航空券ホテルを予約する permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;航空券・ホテルを予約する&lt;/h2&gt;
&lt;p&gt;最後は航空券の予約です。航空券の予約は他の旅行となんら変わりません、都内に住んでいる方なら成田か羽田から、他地域の方は近くの空港からバンクーバーへの航空券を購入しましょう。&lt;/p&gt;
&lt;p&gt;私は普段エクスペディアで航空券とホテルをまとめて購入するのですが、最近バンクーバーへの旅行の券を買おうとした時は実際の確定ページに行くとエラーが出てしまって予約ができないという状態に陥りました。&lt;/p&gt;
&lt;p&gt;エクスペディアだとスムーズに行けば良いのですがサポートの窓口が日本人でなかったりでサポートに少し不安が残ります。&lt;/p&gt;
&lt;p&gt;結局のところ&lt;a class=&quot;js-ga-click-airtori&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=35D8VB+1IRYQY+2YGS+64RJ6&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;エアトリ&lt;/a&gt;
&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www11.a8.net/0.gif?a8mat=35D8VB+1IRYQY+2YGS+64RJ6&quot; alt=&quot;&quot;&gt;というサイトでホテルと航空券まとめて購入したのですが、こちらのサイトであれば日本のサイトなので安心感があります。&lt;/p&gt;
&lt;p&gt;海外のサイトで航空券を買うのが不安・・・
という方はこちらのサイトを試してみると良いと思います。&lt;/p&gt;
&lt;a class=&quot;js-ga-click-airtori&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=35D8VB+1IRYQY+2YGS+601S1&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;
&lt;img border=&quot;0&quot; width=&quot;300&quot; height=&quot;250&quot; alt=&quot;&quot; src=&quot;https://www20.a8.net/svt/bgt?aid=190414631092&amp;amp;wid=004&amp;amp;eno=01&amp;amp;mid=s00000013798001008000&amp;amp;mc=1&quot;&gt;&lt;/a&gt;
&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www18.a8.net/0.gif?a8mat=35D8VB+1IRYQY+2YGS+601S1&quot; alt=&quot;&quot;&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上ウィスラーでスノボを楽しむために必要な準備をまとめてみました。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;航空券&lt;/li&gt;
&lt;li&gt;ホテル&lt;/li&gt;
&lt;li&gt;リフト券&lt;/li&gt;
&lt;li&gt;レンタル(任意)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ウィスラーでスキー・スノーボードを楽しむには大まかにこれらの事前予約が必要です。リフト券やレンタルなど現地で行うことも可能ですがオンラインで事前に予約した方が割引も効くのでそちらを選択することをオススメします。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;航空券、ホテルに加えてリフト券もなるべく早めに予約した方が安く済むので旅行の計画が決まったらまとめて予約してしまいましょう。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先に紹介したエアトリでは、ホテル・航空券をまとめて予約すると割引で旅費を安く済ませる事ができます。是非活用してみてください。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/04/20190414_prepare-for-whistler/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[初のカナダ旅行に行く前の個人的な趣味も入ったチェックリスト]]></title><description><![CDATA[どうもエンジニア兼旅ブロガーのversion…]]></description><link>https://ver-1-0.net/blog/2019/04/11/checklist-for-first-time-canada-travel</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/04/11/checklist-for-first-time-canada-travel</guid><pubDate>Fri, 12 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうもエンジニア兼旅ブロガーのversion1です。&lt;/p&gt;
&lt;p&gt;旅ブロガーとフリーランスのエンジニアというと突然肩書きがキラキラし始めますが、なんてことはない普段は普通に都内で開発の仕事をしています。&lt;/p&gt;
&lt;p&gt;最近ブログのテーマがフリーランスと技術的なこととちょっと変化球でトラベル系という感じで固まりつつあるので、一旦旅ブロガーと名乗ってみました。&lt;/p&gt;
&lt;p&gt;今回カナダに行く事になったのでカナダに行く前の準備としてカナダに行く前に用意しておくものをまとめてみます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;書類系&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9B%B8%E9%A1%9E%E7%B3%BB&quot; aria-label=&quot;書類系 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;書類系&lt;/h2&gt;
&lt;h3 id=&quot;パスポート&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%91%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88&quot; aria-label=&quot;パスポート permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;パスポート&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;言わずもがな海外旅行では必須のパスポートです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;航空券販売サイトなどでは必ず、有効期限と残ページ数の確認を促されますが、今一度パスポート確認をしましょう。&lt;/p&gt;
&lt;h3 id=&quot;eTA&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#eTA&quot; aria-label=&quot;eTA permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;eTA&lt;/h3&gt;
&lt;p&gt;アメリカに入国する場合はESTAという渡航前の事前申請が必要ですが&lt;strong&gt;カナダの場合はeTAという電子申請が必要なので必ず申し込みましょう。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所定のサイトに飛んだ後は、個人情報やパスポートの情報を入力して終わりです。&lt;/p&gt;
&lt;p&gt;特に問題なければすぐに審査を通過してメールが届くのですが、時間がかかる場合もあるので念のため前もって申請を行うようにしましょう。&lt;/p&gt;
&lt;p&gt;またこのeTAの申請は一度申請が通れば再びカナダに入国する際の申請は不要なのですが、eTAがパスポートに紐付いてるので、&lt;strong&gt;パスポートを再発行したり更新を行った場合にはeTAの申請が必要なようです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;またカナダですと、トランジットでアメリカを経由することがあるのですが、アメリカを経由する際にもESTAの申請が必要だそうでこれまでにESTAの申請を行っていない人は注意してください。&lt;/p&gt;
&lt;h3 id=&quot;航空券&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%88%AA%E7%A9%BA%E5%88%B8&quot; aria-label=&quot;航空券 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;航空券&lt;/h3&gt;
&lt;p&gt;これがないと話にならないのですが、忘れずにもっていくよう注意しましょう。&lt;/p&gt;
&lt;p&gt;航空券を印刷して持っていくと便名やフライトの時間など確認できるのでプリントアウトして当日持っていきましょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;携帯に時間などメモしたりWebページをブックマークしておいたりでも良いのですが、携帯の充電が切れたり、失くしたりしてしまった時に困るのでプリントアウトをオススメします。&lt;/strong&gt;
パスポート, eTA, 航空券とお金があれば他のものを忘れても最悪カナダには行けるので忘れないように家をでる前に確認しましょう。&lt;/p&gt;
&lt;p&gt;航空券はすでに購入済みかもしれませんが、今回の旅行では&lt;a id=&quot;airtori-1&quot; class=&quot;js-ga-click-airtori&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=35D8VB+1IRYQY+2YGS+64RJ6&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;エアトリ&lt;/a&gt;
&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=35D8VB+1IRYQY+2YGS+64RJ6&quot; alt=&quot;&quot;&gt;を利用しました。&lt;/p&gt;
&lt;p&gt;これまではExpediaを利用したりしていたのですが、謎のエラーに見舞われ予約ができなかったのでエアトリを使って航空券を予約しました。&lt;/p&gt;
&lt;p&gt;航空券の選びやすさはExpediaの方が選びやすくて好きでしたが、謎のエラーに見舞われたり、何か予想外のことがおきたり、問い合わせをしたりという時に窓口が日本だととても安心できるのでエアトリの方が良さそうです。
サイト内のアテンドも丁寧でExpediaに比べて安心して航空券を購入することができました。&lt;/p&gt;
&lt;a id=&quot;airtori-2&quot; class=&quot;js-ga-click-airtori&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=35D8VB+1IRYQY+2YGS+601S1&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;
&lt;img border=&quot;0&quot; width=&quot;300&quot; height=&quot;250&quot; alt=&quot;&quot; src=&quot;https://www23.a8.net/svt/bgt?aid=190414631092&amp;amp;wid=004&amp;amp;eno=01&amp;amp;mid=s00000013798001008000&amp;amp;mc=1&quot;&gt;&lt;/a&gt;
&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www15.a8.net/0.gif?a8mat=35D8VB+1IRYQY+2YGS+601S1&quot; alt=&quot;&quot;&gt;
&lt;h3 id=&quot;海外旅行保険&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%B5%B7%E5%A4%96%E6%97%85%E8%A1%8C%E4%BF%9D%E9%99%BA&quot; aria-label=&quot;海外旅行保険 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;海外旅行保険&lt;/h3&gt;
&lt;p&gt;クレジットカードに付帯する保険があるからいいやという方も多いかと思うのですが、クレジットカードの付帯保険は適用範囲や補償額が少ないので注意が必要です。&lt;/p&gt;
&lt;p&gt;海外で万が一事故に見舞われて入院したり、山中で怪我をしてヘリで運ばれたりと言った事故に会うと目を覆いたくなるような額が請求されます。&lt;/p&gt;
&lt;p&gt;海外旅行保険自体も5000円程度で加入できるので事故の際の請求に耐えられる余裕のある方以外は加入されることをオススメします。&lt;/p&gt;
&lt;h2 id=&quot;電化製品系&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%9B%BB%E5%8C%96%E8%A3%BD%E5%93%81%E7%B3%BB&quot; aria-label=&quot;電化製品系 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;電化製品系&lt;/h2&gt;
&lt;h3 id=&quot;モバイルWiFi&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A2%E3%83%90%E3%82%A4%E3%83%ABWiFi&quot; aria-label=&quot;モバイルWiFi permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;モバイルWiFi&lt;/h3&gt;
&lt;p&gt;カナダですとWiFiが使える場所はホテルやカフェなど多くあると思いますが、念のためにも持ち運びできるWiFiがあると便利です。&lt;/p&gt;
&lt;p&gt;WiFiの受け取り、返却は当日空港でできるのであらかじめネットで予約を行い当日受け取りカウンターで受け取り、帰り際に返却Boxに返却という感じで負担なくWiFiをレンタルできます。&lt;/p&gt;
&lt;p&gt;多くの会社で申し込みの際に空港の受け取り場所、返却場所を指定するするのですが間違ったターミナルを指定してしまうと無駄に遠くまで取りに行かなければならないので、&lt;strong&gt;事前に出発ターミナル、到着ターミナルを調べて申し込みましょう。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;私が旅行に行く際はよく&lt;a class=&quot;js-ga-click-global-wifi&quot; id=&quot;global-wifi-1&quot; href=&quot;//ck.jp.ap.valuecommerce.com/servlet/referral?sid=3316902&amp;pid=885777110&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;//ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=3316902&amp;amp;pid=885777110&quot; height=&quot;1&quot; width=&quot;1&quot; border=&quot;0&quot;&gt;グローバルWiFi&lt;/a&gt;を利用しています。
こちらのバナーから申し込みを行うとレンタル量を5%OFFでご利用いただけますので、興味のある方はこちらからお願いします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;//ck.jp.ap.valuecommerce.com/servlet/referral?sid=3316902&amp;pid=885777114&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;//ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=3316902&amp;amp;pid=885777114&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;モバイルバッテリー&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%83%90%E3%83%83%E3%83%86%E3%83%AA%E3%83%BC&quot; aria-label=&quot;モバイルバッテリー permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;モバイルバッテリー&lt;/h3&gt;
&lt;p&gt;ただでさえ不慣れな土地なのに、普段頼りにしているスマホ様の充電が切れてしまったり、楽しみにしていた観光スポットで電池が切れて写真が取れないというのでは元も子もありません。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;旅行前に充電満タンにして一番信頼できるモバイルバッテリーを持って行きましょう。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;コンセント&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%B3%E3%83%88&quot; aria-label=&quot;コンセント permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コンセント&lt;/h3&gt;
&lt;p&gt;コンセントのプラグの形状は海外旅行前にチェックしておきたい項目の一つです。&lt;/p&gt;
&lt;p&gt;カナダは日本のコンセントと同じタイプなので、日本で使用しているコンセントがそのまま使えます。&lt;strong&gt;変換プラグなどは不要です。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;アプリ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A2%E3%83%97%E3%83%AA&quot; aria-label=&quot;アプリ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;アプリ&lt;/h2&gt;
&lt;h3 id=&quot;Uber&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Uber&quot; aria-label=&quot;Uber permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Uber&lt;/h3&gt;
&lt;p&gt;Uber Eatsなどもありだいぶ浸透してきた感じがあるのですが、まだまだ知らない人も居るので紹介しておきます。&lt;/p&gt;
&lt;p&gt;アメリカ発のタクシー配車アプリで、カナダでも使用できます。普通のタクシーよりも安くて、自分の現在地にUberドライバーを呼び寄せて目的地まで連れて行ってもらえます。&lt;/p&gt;
&lt;p&gt;クレジットカードを登録しておけばカードで決済できますし、あらかじめ目的地をマップで指定するのでわざわざ口頭で目的地を説明する必要がありません。&lt;/p&gt;
&lt;p&gt;英語などでのコミュニケーションが苦手な人は是非活用されると良いと思います。&lt;/p&gt;
&lt;p&gt;※バンクーバーなどのブリティッシュコロンビア州では、**2019年4月現在Uberのサービスが州から認められておらず、
バンクーバー含むブリティッシュコロンビア内ではUberが使用できないようです。**バンクーバーではタクシーの利便性がそれほど高くなく、
その代わりにバスが比較的便利かつ安価なのでそちらを利用している方が多いようです。機会があればそちらについてもまとめますが
ネットで検索すると結構ちゃんとした記事に行き着くのでそちらを参照頂ければと思います。&lt;/p&gt;
&lt;h3 id=&quot;Skypeクレジット&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Skype%E3%82%AF%E3%83%AC%E3%82%B8%E3%83%83%E3%83%88&quot; aria-label=&quot;Skypeクレジット permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Skypeクレジット&lt;/h3&gt;
&lt;p&gt;Skypeはテレビ会議やテレビ通話などで知っているか方も多いと思うのですが、Skypeクレジットを使うとSkypeの連絡先でなく通常の携帯や固定電話に電話をかけることができます。&lt;/p&gt;
&lt;p&gt;あらかじめクレジットカードからチャージをしておいて通話時間に応じてそのチャージ分から料金が支払われます。&lt;/p&gt;
&lt;p&gt;現地で使える携帯電話などをレンタルしなくても国内で使っている自身の携帯から電話をかけることができるので重宝します。
(昨年空港でクレカを失くした際の電話で使用しました。。助かりました)&lt;/p&gt;
&lt;h2 id=&quot;衣類系&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A1%A3%E9%A1%9E%E7%B3%BB&quot; aria-label=&quot;衣類系 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;衣類系&lt;/h2&gt;
&lt;h3 id=&quot;スリッパ-or-サンダル&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%AA%E3%83%83%E3%83%91-or-%E3%82%B5%E3%83%B3%E3%83%80%E3%83%AB&quot; aria-label=&quot;スリッパ or サンダル permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スリッパ or サンダル&lt;/h3&gt;
&lt;p&gt;パスポート、航空券などと比べると地味ですがあると便利なのがスリッパorサンダルです。&lt;/p&gt;
&lt;p&gt;ホテルの部屋では基本土足で上がるのですが&lt;strong&gt;シャワーを浴びた後などにわざわざ靴下とか履きたくないですよね。&lt;/strong&gt;
そんな時にサンダルとかスリッパがあると便利です。意外と忘れがちなので備忘を兼ねてメモしておきます。&lt;/p&gt;
&lt;h3 id=&quot;ハンガー&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%BC&quot; aria-label=&quot;ハンガー permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ハンガー&lt;/h3&gt;
&lt;p&gt;こちらも忘れがちなのでメモです。ホテル内で簡単に洗濯して、干したり濡れたり服を乾かしたりでなんだかんだ必要になる場面は多いです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;カナダ旅行に行く前のチェックリストいかがだったでしょうか？&lt;/p&gt;
&lt;p&gt;一般的な医薬品持って行きましょうとかとか、航空券販売サイトや航空会社のサイトにあるような網羅性はないかもしれないのですが、ポイントを絞ってまとめてみました。&lt;/p&gt;
&lt;p&gt;パスポート、eTA、航空券など重要なもの以外は割と個人的な趣味の部分もあるので参考程度に読んで頂ければと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/04/20190411_checklist-for-first-time-canada-travel/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[4月なので新社会人に向けてフリーランスがファーストキャリアを振り返ってみた]]></title><description><![CDATA[フリーランスをしていると年度のまたぎはあまり気にならず、新年度という感じもしないのですが、桜見たり花粉症が辛くなったりで春を感じできたので、ちょっと初心に帰ろうと社会人一年目の頃を振り返ってみました。…]]></description><link>https://ver-1-0.net/blog/2019/04/10/lookback-first-career</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/04/10/lookback-first-career</guid><pubDate>Thu, 11 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;フリーランスをしていると年度のまたぎはあまり気にならず、新年度という感じもしないのですが、桜見たり花粉症が辛くなったりで春を感じできたので、ちょっと初心に帰ろうと社会人一年目の頃を振り返ってみました。&lt;/p&gt;
&lt;p&gt;4月から新入社員として働き始めて葛藤があったりすると思いますが、その方たちへの参考にでもなればなと思っております。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;新卒三年目の会社で社員として初の赴任を実現撃沈&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%96%B0%E5%8D%92%E4%B8%89%E5%B9%B4%E7%9B%AE%E3%81%AE%E4%BC%9A%E7%A4%BE%E3%81%A7%E7%A4%BE%E5%93%A1%E3%81%A8%E3%81%97%E3%81%A6%E5%88%9D%E3%81%AE%E8%B5%B4%E4%BB%BB%E3%82%92%E5%AE%9F%E7%8F%BE%E6%92%83%E6%B2%88&quot; aria-label=&quot;新卒三年目の会社で社員として初の赴任を実現撃沈 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;新卒三年目の会社で社員として初の赴任を実現→撃沈&lt;/h2&gt;
&lt;p&gt;今でこそフリーランスのエンジニアとしてこうしてブログ書いてますが、&lt;strong&gt;会社員時代はインドネシアに海外赴任したことがあります。&lt;/strong&gt;
(脈絡ないなほんと笑）&lt;/p&gt;
&lt;p&gt;厳密には海外赴任といっても赴任のプレ期間に&lt;strong&gt;社長に激怒され、結局赴任自体は実現せず、その会社でやる事無くなったのでそのまま退職&lt;/strong&gt;と言う感じだったのですが、&lt;/p&gt;
&lt;p&gt;新卒一年目からインドネシア行きたい！って言い続けて、2年半で社員として初めての海外赴任を実現させたので個人的にちょっと自信を持っています。
(社長が激怒した時も多分ちゃんと謝れば今頃インドネシアに居た気がしてます。)&lt;/p&gt;
&lt;p&gt;会社としては中小のSIer、ビジネスモデル的にはエンジニアを派遣してそのフィーが売り上げみたいなよくある中小SIerのモデルなんですが、その会社にはたまたま
上海だったり、ジャカルタに支社がありそこのリソースを使ってオフショアしたり、現地の日経企業の受託などをやっていました。&lt;/p&gt;
&lt;p&gt;その中で私はご多聞にもれず、エクセルエンジニアでテストのエビデンスを切り貼りしたり、調整のための資料作ったりでいわゆるエンジニア的な仕事はほとんどなく
コードを書くといえばたまにくるシェルスクリプトの改修や暇な時間でマクロ組んだりといったWeb系企業のそれとは似て非なるものでした。&lt;/p&gt;
&lt;p&gt;今思うと社会人一年目から三年目は本当に世間知らずでこうすればよかったなぁ、あれやっておいてよかったなぁなんてところがたくさんあるのですが、それらについて勝手に振り返って行きます。&lt;/p&gt;
&lt;h2 id=&quot;今振り返ってどうだったか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BB%8A%E6%8C%AF%E3%82%8A%E8%BF%94%E3%81%A3%E3%81%A6%E3%81%A9%E3%81%86%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%8B&quot; aria-label=&quot;今振り返ってどうだったか permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;今振り返ってどうだったか&lt;/h2&gt;
&lt;p&gt;そんなこんなで赴任一歩手前で社長に激怒されて日本に帰ってきて即日退職願いを提出してから2年経つのですが、冒頭にも書いたように自分のファーストキャリアを振り返って参考にしてもらうのが今回の目的なので、実際何が良くて何が悪かったのかみたいな所をまとめてみたいと思います。&lt;/p&gt;
&lt;h3 id=&quot;良かったこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%89%AF%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;良かったこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;良かったこと&lt;/h3&gt;
&lt;h4&gt;自分からやりたいことを発信すると道が拓ける&lt;/h4&gt;
&lt;p&gt;100〜200人くらいの会社でもちゃんとやりたい事を言い続ければ道ができるとわかったのは一定程度の収穫ではありました。&lt;/p&gt;
&lt;p&gt;当時社員の中で海外赴任を希望する人自体少なく、社員から海外支社に転勤すると言う人は皆無でした。&lt;/p&gt;
&lt;p&gt;そんな中でもちゃんと行きたいと言い続けるとそれなりの席は用意されるのだなというのを体験として知れたのは収穫だったのかなと思います。&lt;/p&gt;
&lt;h4&gt;インドネシアに行って現地の人と仕事して視野が広がった。&lt;/h4&gt;
&lt;p&gt;社長に激怒される前のプレ期間に現地の事務所で現地の人達と働く機会があったのですが、向こうの人は17時になるとピュッと帰るし、金曜日のお昼には礼拝に行っちゃうし、現地の人でも礼拝に行かない人が居て「あれ、どうしたの？」って聞くとキリスト教だから関係なかったりするして日本とは違う働き方とか生活習慣を体験できて面白かったです。&lt;/p&gt;
&lt;p&gt;インドネシアは女の人の方が真面目に働いて、男の人は結構ルーズだったりするし、みんな陽気だしなどなど、ずっと日本で仕事してると気づかない事があったなーと思ってます。&lt;/p&gt;
&lt;h3 id=&quot;良くなかったこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%89%AF%E3%81%8F%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;良くなかったこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;良くなかったこと&lt;/h3&gt;
&lt;h4&gt;まずは三年と言わず、合ってないと思ったらすぐに方向転換すれば良かった&lt;/h4&gt;
&lt;p&gt;ここまで読むと凄い海外行きたい勢な感じが出ているかも知れないのですが、実の所どっちかというと私はWeb系自社サービス行きたい勢で1社目の会社は未経験でエンジニアとしてやれるから入った会社だったので会社自体は金融系SIerで自分のやりたい仕事と異なる会社でした。&lt;/p&gt;
&lt;p&gt;当時はとりあえず三年というカルマに縛られていたので、社内でやれる一番面白そうなチャレンジが海外赴任という選択肢でした。
(というかインドネシア行きたいだけならそういう会社探して転職してます。)&lt;/p&gt;
&lt;p&gt;今思うと最初の会社も早めに見切りつけて、Web系の技術、開発プロセスを使って仕事できる環境に身を置けば良かったなとも思っております。&lt;/p&gt;
&lt;p&gt;ベンチャー界隈だと20台前半とかでも全然すごい技術持ってる人もいるのでそういう人に会うたびに「もっと早くこの業界にいれば、、、」と思って後悔しております。&lt;/p&gt;
&lt;p&gt;これから社会人一年目とかで働いている方の中にもそろそろ違和感を感じ始めている人もいるかと思うのですが、個人的にはその違和感を大事にしてほしいなぁなんて思います。&lt;/p&gt;
&lt;p&gt;会社に居て感じる違和感って結構別の会社、別の環境に身を移すことで解消されたりするので違和感感じたら早めに検知して違和感と向き合えると良いのかななんて思います。&lt;/p&gt;
&lt;p&gt;半年あれば転職なり、留学なり、大体の方向性を変えられるので合わないつまらない仕事で時間を無駄にするのは避けられると良いのかなと思います。&lt;/p&gt;
&lt;h4&gt;制度ができていない海外赴任は苦しい&lt;/h4&gt;
&lt;p&gt;社長に激怒された件の発端はこれだったのですが、海外赴任の制度ができていない会社で海外赴任するのは待遇面で結構しんどいです。&lt;/p&gt;
&lt;p&gt;自分としては会社の給与テーブルとして皆と同じ仕事していたら大した額にはならないことに薄々気づいたので海外赴任というコースを作ってなんかやかんや給料をあげるという魂胆があったのですがそれは見事に撃沈されました。&lt;/p&gt;
&lt;p&gt;商社やプラント系などここら辺の待遇面がしっかりしていて海外赴任期間中は給料が倍になったりとかするのですが、中小の社員で海外赴任している人がほとんどないケースとかだとまぁまぁ苦しいです。&lt;/p&gt;
&lt;p&gt;私の会社は渡航の際の手当もなく、当初家賃は会社持ちという話だったのに赴任が近づくと自費でみたいな感じで国内で働くのと全く変わらない待遇という感じだったので結構きつかったです。&lt;/p&gt;
&lt;p&gt;当時これが不満で役員とやり取りをしていたらそれを見た社長が激怒して「お前が行きたいって言ったのに何様」的な話になってしまったのですが、こういう話は割とあるあるだそうで前例が少ない所に行ったりするとまぁトラブルはつきもののようです。&lt;/p&gt;
&lt;p&gt;海外赴任の前例が少なく、これから海外赴任を控えるという方には十分注意して頂ければと思います。&lt;/p&gt;
&lt;h2 id=&quot;とりあえず三年というカルマについて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E4%B8%89%E5%B9%B4%E3%81%A8%E3%81%84%E3%81%86%E3%82%AB%E3%83%AB%E3%83%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;とりあえず三年というカルマについて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;とりあえず三年というカルマについて&lt;/h2&gt;
&lt;p&gt;振り返りのところで少し触れましたが、ファーストキャリアではなぜだかとりあえず三年みたいな縛りが存在します。私が新卒のころはある程度この教義を信じてはいたのですが今振り返ると全くもって意味のない話に思います。&lt;/p&gt;
&lt;p&gt;振り返りにもあったようにこういった言説に囚われた結果、海外赴任といういつかやりたいことではあるんだけど本質的ではなかったり人生の優先度から考えると低い事項にとらわれるということを書いたのですが、
とりあえず三年という考え方だけによって考えると現状の枠組みでしか考えられなくなってしまうので、新卒一年目で今後のキャリアを考えるときにはあまり参考にする必要のない言説です。&lt;/p&gt;
&lt;p&gt;新卒三ヶ月でやめるなんてとか、一年も経たずにやめるなんてというのを周りから言われることもあるかもしれないのですが自分の行きたい方向が定まっているのであれば全然問題はないです。
今のところ企業はどこでも人手不足なので、第二新卒でもやる気と熱意とそのための行動が伴っていれば採用してもらえるはずです。現状やりたいことや現状の環境に不満があるのであればとりあえず三年とか行ってないで
早めに自分にどういった環境での仕事があっているのかというのは考えた方が良いです。&lt;/p&gt;
&lt;p&gt;とりあえず三年みたいな現状の環境に縛られて、その中での最大値を目指すような働き方はのちのち後悔します。新人のうちはできないことも多いですが、できるようになれること(選択肢）も沢山あるのでそれも踏まえて考えてもらえればと思います。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;振り返りをした結果、とりあえず三年とか今ある環境で！みたいなのがよくないよねという結論に至ったのですがいかがでしょうか？&lt;/p&gt;
&lt;p&gt;社会人になると人から目標を持てというような圧力が高まりやすいところですが現状の環境の中でのゴールではなく人生レベルで自分のゴールについて
考えれれると良いのかなと思いました。&lt;/p&gt;
&lt;p&gt;こんな偉そうに書いていますが自分自身もこれからどうするか？どうしたいか？みたいなところは一番の課題なのでこういったところをアウトプットして整理しつつまとめながら
考えて行ければなと思っています。ここに書いたことが参考にでもなれば嬉しいです。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/04/20190410_lookback-first-career/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[難解な本、分厚い本の読み方。本を三段階に分けてよむ。]]></title><description><![CDATA[最近ではブログから、本からほんとうに世の中には情報が増えましたがそれらを全て消化するのには到底不可能に思えます。 そのなかでも著名人の読書についてのインタビューなどを読むと月10…]]></description><link>https://ver-1-0.net/blog/2019/03/28/three-phase-reading</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/03/28/three-phase-reading</guid><pubDate>Sat, 30 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近ではブログから、本からほんとうに世の中には情報が増えましたがそれらを全て消化するのには到底不可能に思えます。&lt;/p&gt;
&lt;p&gt;そのなかでも著名人の読書についてのインタビューなどを読むと月100冊読んでます。などという人もいて卒倒しそうになるのですが
よくよく調べてみるとこういった人は普通の人たちと読み方が違うようでこういう形で読んでみると本から自分にとって重要な情報を
効率よく吸収できるのかなというところがなんとなくわかってきたので今のうちにまとめておきます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;私の読書事情&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%A7%81%E3%81%AE%E8%AA%AD%E6%9B%B8%E4%BA%8B%E6%83%85&quot; aria-label=&quot;私の読書事情 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;私の読書事情&lt;/h2&gt;
&lt;p&gt;自分の読書量は読書家と呼ばれる人に比べると全然少ないですが、一般の人よりは本を読む方だと思っていて&lt;strong&gt;月3 ~ 5冊程度&lt;/strong&gt;は読むのかなと思っています。
エンジニアという仕事上技術書を結構読まないといけないんですが、そこまで綺麗に本を消化できているかというとそうでもなく、Amazonでポチッとしてから見事に積ん読されていることもしばしばです。&lt;/p&gt;
&lt;p&gt;興味があるので流行りのビジネス書なども買って読むのですが、それらはやっぱり読みやすく書かれていて読者が飽きないような仕掛けがあったり文字数が
少なかったりしてパーっと1,2時間くらいで読めてしまうのですが技術書とかビジネス書のなかでももう少しアカデミックなやつはやっぱりそこまでスムーズに読み切ることができません。&lt;/p&gt;
&lt;p&gt;ものによってはしっかり腰を入れて読み切ることができるのですが体力がもたず読めても月1冊とか、すごい遅いペースになってしまいます。
技術書なんかはあらゆる人がオススメの本を紹介していて、分野も多岐にわたるし、次から次に本がでてくるので全然消化できていないです。&lt;/p&gt;
&lt;p&gt;またまた分厚い本をよんだところで何を得たかというのが釈然としなかったりすることもあるので、どうしたら効率よく情報を吸収できるのかというのが最近の課題になっています。&lt;/p&gt;
&lt;h2 id=&quot;本は三段階に分けて読むべし&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%AC%E3%81%AF%E4%B8%89%E6%AE%B5%E9%9A%8E%E3%81%AB%E5%88%86%E3%81%91%E3%81%A6%E8%AA%AD%E3%82%80%E3%81%B9%E3%81%97&quot; aria-label=&quot;本は三段階に分けて読むべし permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;本は三段階に分けて読むべし&lt;/h2&gt;
&lt;p&gt;最近だと、「これ読まなきゃな」という本の一つに&lt;a href=&quot;https://amzn.to/2UcDXui&quot;&gt;エリック・エヴァンスのドメイン駆動設計&lt;/a&gt;という本があるのですが、これがまた分厚く内容も難解で一度読み始めて挫折した本でした。&lt;/p&gt;
&lt;p&gt;ところが最近、分厚い本には真っ向から勝負してはいけないということがわかってきて、どうやら三段階くらいに分けて読めば良いのではということがわかってきてエリックエバンス本も倒しにかかり始めたのでその方法を紹介したいと思います。&lt;/p&gt;
&lt;p&gt;その三段階というのが、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;概要を知る&lt;/li&gt;
&lt;li&gt;気になるところを読み返す&lt;/li&gt;
&lt;li&gt;繰り返し読む&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という感じになります。技術書や専門書、アカデミックな専門書などは真正面から最初から最後まで読み切ろうとすると結構体力がいります。&lt;/p&gt;
&lt;p&gt;無理やり読みきったところでなかなか頭に入っていなかったりということが多いので、読書の段階を三回くらいにわけて目的を持って読みすすめられると良いと思います。&lt;/p&gt;
&lt;h3 id=&quot;1-概要を知る&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-%E6%A6%82%E8%A6%81%E3%82%92%E7%9F%A5%E3%82%8B&quot; aria-label=&quot;1 概要を知る permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. 概要を知る&lt;/h3&gt;
&lt;p&gt;まず最初の読書では全体像を知るために、目次から本を読んでいきます。&lt;/p&gt;
&lt;p&gt;本の最初の方には大抵目次があるので当たり前かもしれないのですが、目次をパラパラ見ながら&lt;strong&gt;自分がすでに知っていることかそうでないか？興味ある分野かない部分か&lt;/strong&gt;ということを分類していきます。&lt;/p&gt;
&lt;p&gt;そのあと実際に読み進めるのですがあまり立ち止まらずに太字など目に入る部分を頭に入れながら読み進め全体のロジックなどを把握していきます。
ここではそこまで深く読み進める必要はなくキーワードなどを拾いつつ、ふとした時にまた読み直したいと思ったら戻ってこれる程度で良いのでスピード重視で本を読み進めます。&lt;/p&gt;
&lt;p&gt;ここでは、全体像の把握と目次を見てつけた辺りとの差異を把握しながら&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「ここ良い事書いてあったから読みたい！」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;というところを見つけることに注力します。ここの作業では本の厚さにもよりますが30分から60分ほどを目安に終わらせると良いと思います。&lt;/p&gt;
&lt;h3 id=&quot;2-気になるところを読み返す&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-%E6%B0%97%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%A8%E3%81%93%E3%82%8D%E3%82%92%E8%AA%AD%E3%81%BF%E8%BF%94%E3%81%99&quot; aria-label=&quot;2 気になるところを読み返す permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. 気になるところを読み返す&lt;/h3&gt;
&lt;p&gt;1の段階でまた読みたい、もっと深く理解したいというところがない場合はここをやらなくても良いのですが、1の段階でこれがある場合は&lt;strong&gt;ちょっと時間を置くか別日に読み直します。&lt;/strong&gt;
1と続けてやれれば良いのですが、私の場合集中力が続かず、字を目で追っているだけで頭には入ってないような状態になるので、仕切り直して頭がフレッシュな時に読み直します。&lt;/p&gt;
&lt;p&gt;ここはそこまで工夫する必要なく一回目で分からなかったところや&lt;strong&gt;もっと理解したいところなどまた読みたい、知りたいと思った所&lt;/strong&gt;を読み返すだけです。&lt;/p&gt;
&lt;p&gt;ピンポイントで読むのも良いし、また目次に戻って全体像を把握してから読むのでも大丈夫です。&lt;/p&gt;
&lt;h3 id=&quot;3-繰り返し読む&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E8%AA%AD%E3%82%80&quot; aria-label=&quot;3 繰り返し読む permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. 繰り返し読む&lt;/h3&gt;
&lt;p&gt;2.まである程度読んでいれば本の内容は結構頭に入っているのですが、本は繰り返し読むのが大事です。&lt;/p&gt;
&lt;p&gt;単純に書いてある内容を忘れるということもあるのですが、&lt;strong&gt;本を1、2回読んだだけだと自分の先入観があって新しい情報が入ってこなかったりします。&lt;/strong&gt;
なので、本の内容を忘れかけたころにもう一度本を読んでみると新しい発見があったりします。&lt;strong&gt;良い本は読み返すたびに新しい発見があるので繰り返し読むことをおすすめします。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;本は全部読まなくても良い目的を絞って本を読む&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%AC%E3%81%AF%E5%85%A8%E9%83%A8%E8%AA%AD%E3%81%BE%E3%81%AA%E3%81%8F%E3%81%A6%E3%82%82%E8%89%AF%E3%81%84%E7%9B%AE%E7%9A%84%E3%82%92%E7%B5%9E%E3%81%A3%E3%81%A6%E6%9C%AC%E3%82%92%E8%AA%AD%E3%82%80&quot; aria-label=&quot;本は全部読まなくても良い目的を絞って本を読む permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;本は全部読まなくても良い、目的を絞って本を読む&lt;/h2&gt;
&lt;p&gt;ここまで読書のフェーズを三段階くらいにわけるという話をしてきましたが、この読書法の本質的なところは&lt;strong&gt;本を全部読まなくても良い&lt;/strong&gt;ということに気づくというところだと思います。&lt;/p&gt;
&lt;p&gt;小説などの物語は全部読むことで楽しむということが目的ですが、そのほかの本というのは何か自分の悩みだったりを解決するアイデアや新しい知識の獲得を目的に本を読むので、
自分に役に立たないところは無理して読む必要はないわけです。&lt;/p&gt;
&lt;p&gt;分厚い本を目の前にすると「この本を読もう！」とついつい読み切ることに意識が向いてしまいがちなので、そうではなく**「この本からどういう情報をえるのか？」
というところや本を読むための動機を意識しながら読む**ということが大切です。&lt;/p&gt;
&lt;p&gt;世の中にはたくさんの本がありますが、私たちの時間も限られているのでいかに効率よく情報を収集するのかというのは引き続き伸ばしていきたいですね。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/09/22/summary-of-useful-books&quot;&gt;引っ越しの荷物をまとめながら考えた読んでためになった本のリスト&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/03/20190328_three-phase-reading/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[一フリーランスエンジニアがフリーランス白書2019をよんでみた。考察とまとめ。]]></title><description><![CDATA[「一般社団法人プロフェッショナル＆パラレルキャリア・フリーランス協会」から毎年発行されている
フリーランス白書201…]]></description><link>https://ver-1-0.net/blog/2019/03/26/freelance-white-paper-2019</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/03/26/freelance-white-paper-2019</guid><pubDate>Tue, 26 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「一般社団法人プロフェッショナル＆パラレルキャリア・フリーランス協会」から毎年発行されている
フリーランス白書2019年版をよんでみたのでまとめとその感想をかいていきたいと思います。&lt;/p&gt;
&lt;p&gt;タイトルに一フリーランスがといれたので簡単に自己紹介をしておくと、私自身フリーランスのエンジニアをしておりスタートアップやベンチャー企業中心に
開発のお手伝いをさせて頂いています。フリーランス歴はまだ一年ちょっとと短いですが他人ごとではなく、世の中のフリーランスの動向を知っておくためにも
フリーランス白書を通して読んでみました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;フリーランス協会って何をしているの&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E5%8D%94%E4%BC%9A%E3%81%A3%E3%81%A6%E4%BD%95%E3%82%92%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE&quot; aria-label=&quot;フリーランス協会って何をしているの permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フリーランス協会って何をしているの？&lt;/h2&gt;
&lt;p&gt;フリーランス協会は、2017年に設立されたフリーランスの支援団体です。メルマガ・SNSでの情報発信やイベント・セミナーの開催や有料会員の特典となる「フリーランス向けベネッフィットプラン」
などを提供、「誰もが自律的なキャリアを気づける世の中へ」というビジョンを掲げ、現状テーマ別に9つのプロジェクトを通してフリーランスを支援しているようです。&lt;/p&gt;
&lt;p&gt;その9つのプロジェクトの一つが今回の白書・調査プロジェクトでそのアウトプットして発表されたものがフリーランス白書であるようです。
フリーランスというテーマに絞った調査は数が少ないはずで、一フリーランスとして世の中の動向を知れるというのはだいぶ有難いです。&lt;/p&gt;
&lt;h2 id=&quot;フリーランス白書2019のまとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E7%99%BD%E6%9B%B82019%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;フリーランス白書2019のまとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フリーランス白書2019のまとめ&lt;/h2&gt;
&lt;p&gt;リンクはこちらです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.freelance-jp.org/wp-content/uploads/2019/03/freelancehakusho2019_suvey20190306.pdf&quot;&gt;フリーランス白書2019&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;©一般社団法人プロフェッショナル＆パラレルキャリア・フリーランス協会「フリーランス白書2019」&lt;/p&gt;
&lt;h3 id=&quot;フリーランスのワークエンゲージメント&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AE%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A8%E3%83%B3%E3%82%B2%E3%83%BC%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88&quot; aria-label=&quot;フリーランスのワークエンゲージメント permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フリーランスのワークエンゲージメント&lt;/h3&gt;
&lt;p&gt;様々な記事でも強調されているように、2019版ではワーキングエンゲージメント（仕事に対する熱意）に関する記述が強調されています。&lt;/p&gt;
&lt;p&gt;これは日本が「熱意溢れる社員」の割合が6%で調査した139カ国中132位と最下位クラスだったことを念頭に置いたもので、フリーランスの熱意の平均が
欧米諸国のそれに近しい値を記録したということが白書の中で強調されています。&lt;/p&gt;
&lt;p&gt;厳密には日本が132位という低いランクを記録した調査で使用された「熱意」の概念と微妙にことなる部分はあるそうなのですが、それにしても正社員とフリーランスを
比較した時に顕著な「熱意」の違いがみられたことは今回の調査の発見だったようです。&lt;/p&gt;
&lt;p&gt;日本人のワークエンゲージメントの平均が2.8~2.9前後で今回の調査における会社員の平均値は2.40だそうで、それに比べてフリーランスのエンゲージメントは4.0と
欧米諸国にひけを取らない数字であったようです。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2019/03/20190326_freelance-white-paper-2019/global-diagram-uwec.png&quot; alt=&quot;エンゲージメントの比較&quot;&gt;
&lt;p&gt;引用: &lt;a href=&quot;https://hp3.jp/wp-content/uploads/2018/05/08JSUC.pdf&quot;&gt;https://hp3.jp/wp-content/uploads/2018/05/08JSUC.pdf&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;フリーランスの課題について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AE%E8%AA%B2%E9%A1%8C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;フリーランスの課題について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フリーランスの課題について&lt;/h3&gt;
&lt;p&gt;白書は前半部分で正社員とフリーランスに関する比較を行なっていましたが、後半部分ではフリーランスの課題についても触れています。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2019/03/20190326_freelance-white-paper-2019/freelance-problem.png&quot; alt=&quot;フリーランスの課題&quot;&gt;
&lt;p&gt;引用: &lt;a href=&quot;https://blog.freelance-jp.org/wp-content/uploads/2019/03/freelancehakusho2019_suvey20190306.pdf&quot;&gt;フリーランス白書 2019&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;それぞれ大きく分けて&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;契約トラブルなどの最低報酬などのビジネストラブル・ビジネスリスク&lt;/li&gt;
&lt;li&gt;健康保険&lt;/li&gt;
&lt;li&gt;出産・育児・介護などのセーフティーネット（休暇や所得保証）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;などが挙げられており、調査の結果「フリーランスや副業をするといった新しい働き方を日本で選択しやすくするためには、何が
必要だと思いますか？」という設問に対する回答としては2. 3.などのライフリスクに関する項目多くあがり白書ではその対策として働き方改革の一貫としての
社会保障制度の見直しが挙げられていました。&lt;/p&gt;
&lt;p&gt;白書ではそこからさらに突っ込んで、「自己責任論」についても触れられておりこの論調がフリーランスの一番根深い課題だと論じていました。&lt;/p&gt;
&lt;h2 id=&quot;感想考察&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%84%9F%E6%83%B3%E8%80%83%E5%AF%9F&quot; aria-label=&quot;感想考察 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;感想・考察&lt;/h2&gt;
&lt;h3 id=&quot;フリーランスの分類&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AE%E5%88%86%E9%A1%9E&quot; aria-label=&quot;フリーランスの分類 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フリーランスの分類&lt;/h3&gt;
&lt;p&gt;フリーランス白書をちゃんと読む機会がはじめてだったので、月の平均稼働時間にでフリーランスを分類するやり方が「そんな風にわけるのね」という感じで新鮮でした。&lt;/p&gt;
&lt;p&gt;白書によると以下の分類にされるらしく&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;月の平均稼働時間が60時間未満&lt;/th&gt;
&lt;td&gt;すきまワーカー&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;月の平均稼働時間が60時間以上140時間未満&lt;/th&gt;
&lt;td&gt;時短ワーカー&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;月の平均稼働時間が140時間以上200時間未満&lt;/th&gt;
&lt;td&gt;フルタイムワーカー&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;月の平均稼働時間が200時間以上&lt;/th&gt;
&lt;td&gt;ハードワーカー&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ここに自分を当てはめると時期によっては140時間を下回ることもあるし、200時間を超えることもあるのでだいたい「フルタイムワーカー」となるんですかね。
ただ、こうしてブログを書いている時間とか、コード書いている時間とかいれると「ハードワーカー」かなというかんじですね。&lt;/p&gt;
&lt;p&gt;フリーランス白書を読むとどういう仕事をしている人が年収が高いとかそこらへんをざっくり知ることができるので、これからフリーランスになるあるいは現状フリーランスという方は一度みてみると良いかもしれません。
あくまでも平均をとっているのでそこに乗っかる必要はないと思うのですが、世間的に自分がどういう所にあるのかというのはみてみるとよいかもしれません。&lt;/p&gt;
&lt;h3 id=&quot;エンゲージメントについて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A8%E3%83%B3%E3%82%B2%E3%83%BC%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;エンゲージメントについて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;エンゲージメントについて&lt;/h3&gt;
&lt;p&gt;まとめにも書きましたが、白書ではフリーランスの方が仕事の熱意が高いという結果が出たということでたようです。個人的な感想としては「まぁそうだよなぁ」という感じです。
結果が出たあとの感想なので調査の結果が出たことに意味があるのはわかっていますが、結果を聞いた素直な反応としては想定内という感じです。&lt;/p&gt;
&lt;p&gt;エンゲージメント自体は、**「活力」「熱意」「没頭」**の3要素からなるそうですが、今回の調査では「キャリア自律」「専門性コミットメント」をその要因として
比較調査したそうですが、会社員としているとどうしても組織の都合で担当業務が決まりがちなのでこれらの値がフリーランスに比べて低いのはある程度予想がつくのかなと思います。&lt;/p&gt;
&lt;p&gt;会社員だと「この仕事やりたいです！」とは言えますが組織の都合上「この仕事はやりません」とは言いづらいですよね。フリーランスの場合は単純に断ったり、営業をかける先を
見極めてある程度自分のやりたくない仕事は避けるということができるので、この数値に差はつきそうですよね。&lt;/p&gt;
&lt;p&gt;もっと言うとフリーランスでキャリア的に自律していなくて専門性コミットメントが低いという状態があまり想像できないです。&lt;/p&gt;
&lt;p&gt;白書によると、キャリア自律とは、&lt;strong&gt;組織に依存せずに、能動的に自分の意志で自律的にキャリアを形成すること&lt;/strong&gt;、専門性コミットメントとは、&lt;strong&gt;自らの専門性に関する意識で個人にお
ける専門性の領域が明確で、高めるための計画があり努力を惜しまない&lt;/strong&gt;だそうです。&lt;/p&gt;
&lt;p&gt;現状会社員は&lt;strong&gt;キャリア自律と専門性コミットメントを求められず&lt;/strong&gt;に働ける場所というメリットを持ちつつ存在している働き方なので、こういう結果が出るのはある程度
頷けますし、先に書いた組織の都合によるキャリア形成を否とする人がフリーランスになる側面があるので殊更驚くことではないのかなと思います。
（このメリットをフルに享受している人もいるし、会社員と言う安定した立場を利用して専門性を高めているので一概には言えませんが）&lt;/p&gt;
&lt;p&gt;ただ、熱意と生産性は必ず関係してくるはずなので、&lt;strong&gt;低い生産性が問題になっている現段階ではフリーランスという働き方を広げていくにあたっての説得力のある根拠には
なるのかな&lt;/strong&gt;とは思いました。&lt;/p&gt;
&lt;h3 id=&quot;会社員とフリーランスの意識の差について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BC%9A%E7%A4%BE%E5%93%A1%E3%81%A8%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AE%E6%84%8F%E8%AD%98%E3%81%AE%E5%B7%AE%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;会社員とフリーランスの意識の差について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;会社員とフリーランスの意識の差について&lt;/h3&gt;
&lt;a href=&quot;https://statics.ver-1-0.xyz/uploads/2019/03/20190326_freelance-white-paper-2019/compare-about-skill.png&quot;&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2019/03/20190326_freelance-white-paper-2019/compare-about-skill.png&quot; alt=&quot;スキルに関する意識調査の比較&quot;&gt;
&lt;/a&gt;
&lt;p&gt;引用: &lt;a href=&quot;https://blog.freelance-jp.org/wp-content/uploads/2019/03/freelancehakusho2019_suvey20190306.pdf&quot;&gt;フリーランス白書 2019&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;調査の一部でフリーランスと会社員のスキルに対する意識比較に関する図があるのですが、個人的に以下のような記事を書いている手前なかなか面白い結果でした。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
     &lt;li&gt;&lt;a href=&quot;/2019/03/02/market-sense-for-freelance&quot;&gt;フリーランスには「マーケット感覚」が必要だと思う&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;上図は「現在の働き方を続ける/成功させる上で重要だと思うもの」についての回答結果だが、「自分を売る力」は50ポイント近く正社員とフリーランスで差があり、
顧客/市場のニーズの把握力は30ポイント以上差があり、逆に会社員が今後重要なスキルが「忍耐力」という結果だったようです。&lt;/p&gt;
&lt;p&gt;正社員という働き方を続ける上で重要だと思うものは？&lt;/p&gt;
&lt;p&gt;→忍耐力が必要&lt;/p&gt;
&lt;p&gt;→この先も我慢し続けるなんていやだ&lt;/p&gt;
&lt;p&gt;→現状を変えよう！&lt;/p&gt;
&lt;p&gt;なら良いのですが、これが&lt;strong&gt;これからも同じ働き方を続ける前提でこれからはずっと我慢&lt;/strong&gt; だと思っちゃっているのであればそれはちょっと悲しいですね。&lt;/p&gt;
&lt;p&gt;結果、フリーランスの方は、上のような記事を読むまでもなく**「自分を売る力」や「顧客/市場ニーズの把握力」&lt;strong&gt;は必要だと回答し、会社員は&lt;/strong&gt;「忍耐力」「前向きな姿勢」**が一番必要なスキルだと考えているようです。
個人的にはセルフブランディングや市場ニーズの把握などの「マーケット感覚」は働き方問はず必要なものであるとは思っているのですが、残念ながら会社員は前向きに忍耐を続けていれば現在の働き方を続けられる/成功できるというように考えているようです。&lt;/p&gt;
&lt;h3 id=&quot;企業側からみたフリーランスの活用について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BC%81%E6%A5%AD%E5%81%B4%E3%81%8B%E3%82%89%E3%81%BF%E3%81%9F%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AE%E6%B4%BB%E7%94%A8%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;企業側からみたフリーランスの活用について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;企業側からみたフリーランスの活用について&lt;/h3&gt;
&lt;p&gt;白書では企業側からのフリーランス活用法についても書いてありますが、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「企業側は契約期間や稼働ボリュームなどの条件面からフリーランスを探しがちだが、解決したい課題とゴールイメージからフリーランスを探した方がいい」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;というアドバイスが印象に残りました。続けて、エンジニアの場合は使用言語や経験年数を問うよりも「このプロジェクトの課題を解決できる人」という
方向で探すことをオススメする」ということも書かれており、&lt;strong&gt;「フリーでエンジニアになるとどういう言語を専門で扱って・・・」みたいな考えに偏りがち&lt;/strong&gt;
だがそもそも「自分が何ができて何の課題を解決できるのか？」ということが意識できないとダメだし、現状それがないのであれば何を身につければ課題解決のスキルが
身につくのかということも意識しないといけないと思いました。&lt;/p&gt;
&lt;h3 id=&quot;自己責任論について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%87%AA%E5%B7%B1%E8%B2%AC%E4%BB%BB%E8%AB%96%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;自己責任論について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;自己責任論について&lt;/h3&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2019/03/20190326_freelance-white-paper-2019/self-responsibility.png&quot; alt=&quot;自己責任論&quot;&gt;
&lt;p&gt;引用: &lt;a href=&quot;https://blog.freelance-jp.org/wp-content/uploads/2019/03/freelancehakusho2019_suvey20190306.pdf&quot;&gt;フリーランス白書 2019&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;白書では、フリーランスの自己責任論について問題提起されていましたが画像にもあるように、独立、起業にはそれを選択する人の割合が少ないからか
本人が好きで自由を選んだんだから、自由とのトレードオフでリスクはないとダメだよねという考え方が定着しています。&lt;/p&gt;
&lt;p&gt;ところが白書では誰もがフリーランスを選択できる社会の方がこれから**「人生100年時代」「一億総活躍」**などのキーワードと照らしても良いよねということが書かれていて「なるほどなー」と思いました。&lt;/p&gt;
&lt;p&gt;私自身も読む前まではどちらかというとフリーランスは社会保障も会社員より手薄なので、ある程度の覚悟を持って働くべきという考えをもっている
自己責任的な考え方でしたが、白書を読んでみるとたしかに一人一人にあった働き方を選べる社会の方が良いし、そこで無理に自己責任論を持ち出して
進歩を止める必要もないなと考えるようになりました。&lt;/p&gt;
&lt;p&gt;自己責任論は、フリーランスも含め生活保護などさまざまな社会問題で持ち出されがちですが、自己責任論的な考え方は思考を硬直させて住みやすい社会を
つくるのには結構邪魔になるものなんだという気づきがありました。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;白書をみてみて色々な気づきがありましたが、個人的には自己責任論のところが一番大きな気づきだったように思いました。
&lt;strong&gt;「だれか他人が失敗して大変な目にあっている」→「自己責任でしょ」&lt;/strong&gt; というロジックは発展性がないので自然とこういう思考になってしまうというのはあまりよくない癖なのかなと思いました。&lt;/p&gt;
&lt;p&gt;もちろん本当に自己責任なケースもあるのかもしれないですが、もう少し視野を広くもって考えてみると意外とそうではないということがあるような気がしました。&lt;/p&gt;
&lt;p&gt;他にも、白書自体フリーランスの実態を調査した結果が載っているので、今の所フリーランスってどういう感じなのかなというのを知るためにも
フリーランスの方は一度白書を読んでみると良いと思います。&lt;/p&gt;
&lt;p&gt;フリーランスをやっているとフリーランスの仲間内での情報は入ってきますが、こういった全体的な情報も貴重かと思うのでオススメさせていただきます。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/03/20190326_freelance-white-paper-2019/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[GatsbyサイトでGoogle Analyticsのトラッキングをする]]></title><description><![CDATA[ちょうど今年1月に下記のような記事を書いてから2ヶ月がたち、私のGatsby運用暦も
そろそろ3ヶ月ほどにもなろうかというところです。 そんなこんなでブログを初めてGoogle Analyticsを自分のサイトにいれているとページごとPV…]]></description><link>https://ver-1-0.net/blog/2019/03/22/gatsby-ga-tracking</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/03/22/gatsby-ga-tracking</guid><pubDate>Fri, 22 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ちょうど今年1月に下記のような記事を書いてから2ヶ月がたち、私のGatsby運用暦も
そろそろ3ヶ月ほどにもなろうかというところです。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/01/10/blog-renewal-by-gatsby&quot;&gt;WordpressブログをGatsby+Netlifyでリプレースした話。&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;そんなこんなでブログを初めてGoogle Analyticsを自分のサイトにいれているとページごとPV
とかが見れて、へぇーこの記事こんな読まれているんだーとかとかがわかるのですが人間よく深いもので
もっと自分のサイトに訪れた人の行動が知りたいとなってきます。&lt;/p&gt;
&lt;p&gt;そんな経緯で自分のサイトにGoogle Analyticsのトラッキングをしてみようということになったので、
そこらへんについてまとめてみます。&lt;/p&gt;
&lt;h2 id=&quot;自分のサイトにanalyticsjsを設置する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%87%AA%E5%88%86%E3%81%AE%E3%82%B5%E3%82%A4%E3%83%88%E3%81%ABanalyticsjs%E3%82%92%E8%A8%AD%E7%BD%AE%E3%81%99%E3%82%8B&quot; aria-label=&quot;自分のサイトにanalyticsjsを設置する permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;自分のサイトにanalytics.jsを設置する。&lt;/h2&gt;
&lt;p&gt;ここらへんはすでに自分のサイトにGoogle Analyticsを導入している人は、設置済みだと思うのですが
トラッキングにはGoogleAnalyticsのスクリプトを読み込む必要があるのでこれは必須の作業になります。&lt;/p&gt;
&lt;p&gt;普通にWordpressやその他のプラットフォームで運用している方はそのプラットフォームに準じた方法をとってもらえれば
良いのですが、Gatsbyの場合はこのプラグインを使ってanalyticsを読み込むことができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gatsbyjs.org/packages/gatsby-plugin-google-analytics/&quot;&gt;gatsby-plugin-google-analytics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;細かいいれ方はサイトを参照して頂ければとは思うのですが、簡単に説明すると&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;npm install --save gatsby-plugin-google-analytics&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;yarn add gatsby-plugin-google-analytics&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;といういつもの感じでライブラリを追加して、gatsby-config.jsを編集して設定してきます。
プラグインの導入はトラッキングIDの設定が必要なので下記のように設定します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;gatsby-plugin-google-analytics&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;trackingId&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; Tracking &lt;span class=&quot;token constant&quot;&gt;ID&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;注意点としてはyarn run developのように開発用の環境ではanalytics.jsは読み込まれず、
ビルドするとanalytics.jsが読み込まれるのでその点は間違ってはまらないように注意してください。&lt;/p&gt;
&lt;h2 id=&quot;Trackingイベントの仕込み方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Tracking%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E4%BB%95%E8%BE%BC%E3%81%BF%E6%96%B9&quot; aria-label=&quot;Trackingイベントの仕込み方 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Trackingイベントの仕込み方&lt;/h2&gt;
&lt;p&gt;今回はクリックイベントに絞って紹介しますが、analytics.jsを使ってあるボタンやリンクが押された場合に、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token function&quot;&gt;ga&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;send&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;event&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;eventAction&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;click&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;eventCategory&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;some category&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;eventLabel&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;some label&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このようなスクリプトを実行させることで、ユーザがクリックしたということをAnalyticsに通知して、あとあとAnalyticsのコンソールから
いつ、どのページでそのクリックイベントが発生したのか？ということが確認できるようになります。&lt;/p&gt;
&lt;p&gt;ここで問題になるのは、このイベントの送信をどのようにサイト内に設置していくかというところです。
ECサイトのようにパーツを使いまわして、設置できるような場合であればそのコンポーネントに上のスクリプトを設置しておけば良いのですが、
ブログなどだといちいちそのパーツを持ってこないといけないので結構手間になりますし、記事内のある箇所が押されたかどうかをみたいのに、
都度上のスクリプトを埋め込むようなことはやりたくありません。&lt;/p&gt;
&lt;p&gt;そこで、イベントの送信を効率良くサイトに設置するためにはaddEventListnerとHTMLのクラスを使って
サイト上であるクラスに対してイベント送信のイベントを設定してユーザがその要素をクリックしたら関数を実行させるようにします。&lt;/p&gt;
&lt;p&gt;具体的なコードは以下で、下記コードをサイトのそれぞれのページで読み込ませるようにすれば準備完了です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
&lt;span class=&quot;token comment&quot;&gt;// イベントを登録する用の関数&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;eventRegister&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;ga&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token parameter&quot;&gt;selector&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  event&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;body&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;selector&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ele&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    ele&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;event&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ele&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;elements-&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;index &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; label &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;href &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;#&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; id&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; eventCategory &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; selector&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;^\.&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;^#&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

      &lt;span class=&quot;token function&quot;&gt;eventTracker&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ga&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ele&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; eventCategory&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; label&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// イベントを送信する部分&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;eventTracker&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ga&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ele&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; eventAction&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; eventCategory&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; eventLabel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; object &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    eventAction&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    eventCategory&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    eventLabel&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;ga&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;send&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;event&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; object&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;batchEventRegister&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;ga&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; selectors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;
  selectors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;selector&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;eventRegister&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;ga&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;selector&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// トラッキングするセレクタ群&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; selectors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&apos;tracking-element-1&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&apos;tracking-element-2&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&apos;tracking-element-3&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&apos;tracking-element-4&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;batchEventRegister&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;window&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; selectors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;click&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これが設置できたら、あとは記事を書いていくと時にここのスクリプトで指定したセレクタをクリックイベントを検知したいに付与して、要素がクリックされるのを待つだけです。&lt;/p&gt;
&lt;p&gt;トラッキングする箇所全てにイベント送信のコードを埋め込むのはさすがにほねが折れるので、こういった方法でトラッキングを楽にできるとよいかと思います。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上、今回の話はGatsbyに限定されず様々なサイトで使えるテクニックだとは思いますが、Gatsbyのサイトで試したので
タイトルもそのようにしてみました。&lt;/p&gt;
&lt;p&gt;本文ではかかなかったですが、クリックイベントと同時にSlackへの通知も飛ばすようにしておくと、自分の携帯に通知が
入るようになるのでおすすめです。頻繁にイベントが発生するとちょっと煩わしくなりますがレアなイベントをトラッキングしておくと
通知が来ただけで幸せな気持ちになれるのでおすすめです。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/03/20190322_gatsby-ga-tracking/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Go言語で数独（ナンプレ）を解くコードを書いてみた]]></title><description><![CDATA[改めてアルゴリズムを勉強したり、英語のリソースを漁ってみるとかなりシンプルな解法があったのでそちらを紹介します。
コードはこちらです。ざっくり100行くらいでほとんどの数独の問題が解けるはずです。 https://github.com/version-1/go-numpre…]]></description><link>https://ver-1-0.net/blog/2019/03/11/go-numpre</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/03/11/go-numpre</guid><pubDate>Mon, 11 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;改めてアルゴリズムを勉強したり、英語のリソースを漁ってみるとかなりシンプルな解法があったのでそちらを紹介します。
コードはこちらです。ざっくり100行くらいでほとんどの数独の問題が解けるはずです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/go-numpre&quot;&gt;https://github.com/version-1/go-numpre&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;再帰を使って実装しているのですが、再帰を使うと本当信じられないほど短いコードで実装できますね。
実装にあたってはこちらの動画を参考にしました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=G_UYXzGuqvM&amp;#x26;t=451s&quot;&gt;Python Sudoku Solver - Computerphile&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;-以下元の古い記事&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-%E4%BB%A5%E4%B8%8B%E5%85%83%E3%81%AE%E5%8F%A4%E3%81%84%E8%A8%98%E4%BA%8B&quot; aria-label=&quot; 以下元の古い記事 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;↓↓↓ 以下元の古い記事&lt;/h2&gt;
&lt;p&gt;最近Goの勉強をしており（とはいえ割とマイペースではありますが）これらの記事をあげたりしているのですが、&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/01/21/get-start-go&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/02/14/get-start-go-2&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。その2。&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/02/18/get-start-go-3&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。その3。&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/02/26/get-start-go-4&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。その4。&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;これらの記事にほとんどといっていいほどコードを書いていなかったので今回は実際にコードを書いてみました。
タイトルは若干盛っている部分もあるのですが、今回書いたコードでは&lt;strong&gt;初級レベル&lt;/strong&gt;の数独の問題だったら解けるコードです。&lt;/p&gt;
&lt;p&gt;数独にはある決まった解き方でマスに入る数字を限定して解いていくのですが、数独もある程度のレベルになると数字が限定できなくなり別の解き方で数独をとく必要がでてきます。なので、今回は数独のルールにのっとって数字を限定して解く解法で答えをだせる問題を解くコードになります。&lt;/p&gt;
&lt;p&gt;もっと難しい問題を解けるプログラムを組みたい場合は、こちらの記事を参考にされると良いと思います。
（気が向けばこちらのコードも書いてみたい）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.slideshare.net/atmarksharp/ss-45348313&quot;&gt;数独のアルゴリズムを考える&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;数独ナンプレとは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%95%B0%E7%8B%AC%E3%83%8A%E3%83%B3%E3%83%97%E3%83%AC%E3%81%A8%E3%81%AF&quot; aria-label=&quot;数独ナンプレとは permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;数独（ナンプレ）とは？&lt;/h2&gt;
&lt;p&gt;ナンプレとは9 * 9 マスのマスにあるいくつかの数字があらかじめ埋められており、ルールにしたがって
数字を埋めていき最終的にルール通りにマスを埋めていくパズルです。&lt;/p&gt;
&lt;p&gt;数独のルールというのは、大きく3つで&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;縦1列に1から9までの数字がひとつずつ入る。&lt;/li&gt;
&lt;li&gt;横1列に1から9までの数字がひとつずつ入る。&lt;/li&gt;
&lt;li&gt;9 * 9 のマスを9つに分割した3 * 3のマスにも1から9までの数字がひとつずつ入る。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というようになっています。&lt;/p&gt;
&lt;p&gt;はじめは下の画像のようになっており&lt;/p&gt;
&lt;img class=&quot;post-image half-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2019/03/20190311_go-numpre/question.png&quot; alt=&quot;ナンプレ問題&quot;&gt;
&lt;p&gt;全部時終わると以下のようになります。&lt;/p&gt;
&lt;img class=&quot;post-image half-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2019/03/20190311_go-numpre/answer.png&quot; alt=&quot;ナンプレ回答&quot;&gt;
&lt;p&gt;そして、こちらが実際に数独を解いている様子。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2019/03/20190311_go-numpre/numpre.gif&quot; alt=&quot;ナンプレ&quot;&gt;
&lt;p&gt;今回はこのようにコードをGo言語で書いたのでそれの解説をしていきます。&lt;/p&gt;
&lt;h2 id=&quot;数独をGo言語で解く意義&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%95%B0%E7%8B%AC%E3%82%92Go%E8%A8%80%E8%AA%9E%E3%81%A7%E8%A7%A3%E3%81%8F%E6%84%8F%E7%BE%A9&quot; aria-label=&quot;数独をGo言語で解く意義 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;数独をGo言語で解く意義&lt;/h2&gt;
&lt;p&gt;Go言語で解く意義ですが、特に意味はありません。単に私自身勉強中だからです。&lt;/p&gt;
&lt;p&gt;個人的に採用している勉強法として新しい言語を学ぶ時は、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;文法事項に目を通す&lt;/li&gt;
&lt;li&gt;簡単なアプリケーションを作ってみる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というような順序で普段から勉強しているのでGo言語の教材として数独を解くコードを書いています。
プログラミング初心者の時から基本的にこうして勉強しているのですが、この本の勉強方法を参考にしているところもあるかもしれません。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2TAUSX2&quot;&gt;SOFT SKILLS ソフトウェア開発者の人生マニュアル &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;プログラミングは理論でわかっていても実際どのような挙動になるかわかっていたり、こういうロジックを書く場合は
こういう書き方をするというのが瞬時にでてくるようにならないと実際にコードをかけるようにならないので2.の段階
では最初に作りたいものがあって、それを作るために必要なものを調べていくという流れで勉強を進めていきます。&lt;/p&gt;
&lt;p&gt;その過程で初めて知ったことは予想と違った動きをした場合は、それを記憶にとどめて徐々に言語に慣れていくというスタンスをとっています。&lt;/p&gt;
&lt;p&gt;少々本筋とはずれた話題になりましたが、次からは本題に戻り実際のコードの解説になります。&lt;/p&gt;
&lt;h2 id=&quot;コードの解説&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A7%A3%E8%AA%AC&quot; aria-label=&quot;コードの解説 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コードの解説&lt;/h2&gt;
&lt;p&gt;色々と前置きありましたが、ここからコードの説明をしておきます。リポジトリは以下に置いておきます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/go-numpre&quot;&gt;https://github.com/version-1/go-numpre&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;コードは以下です、意外と200行行かないですみました。特にファイルを分割せずだらっと長く書くスタイルで書いています。&lt;/p&gt;
&lt;p&gt;(始めたばかりでまずい書き方しているところもあるかもしれないのですが、ひとまずこれくらいで気づいたら改善していきます。)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;flag&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;fmt&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;strconv&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;strings&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Result &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  N         &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
  X         &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
  Y         &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
  Ok        &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;
  Value     &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
  Candidate &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
  Empty     &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
  Field     &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; size &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; maxTry &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;
  flag&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  numStr &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; flag&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Arg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  field &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;load&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;numStr&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[START]&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  empty &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;counting&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  result &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; Result&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Field&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;printResult&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  n &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; empty &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; n &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; maxTry &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        n&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
        cursorValue &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; cursorValue &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          candidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;buildCandidate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ok&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; filteredCandidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; j&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; ok &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; value
            empty&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Result&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;N&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; n&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; X&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; j&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Y&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Ok&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ok&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Value&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Candidate&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; filteredCandidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Empty&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; empty&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Field&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token function&quot;&gt;printResult&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; empty &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[END]&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[FAILED]&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;printResult&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;load&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;numStr &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  field &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    start &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; size
    end &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; start &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; size
    array &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    row &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; numStr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;start&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;end&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; v &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;range&lt;/span&gt; strings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;row&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; strconv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Atoi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      array &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;array&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    field &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; array&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; field
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;printResult&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r Result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; header &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; header &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;n :&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;N&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;(x, y) :&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;X&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Y&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ok :&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Ok&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;value :&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;empty :&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Empty&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;candidate :&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;counting&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  n &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        n&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; n
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;buildCandidate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;size &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  candidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    candidate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;candidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; candidate
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  _candidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;copy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  funcs &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;filterVertical&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; filterHorizontal&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; filterBox&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; cb &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;range&lt;/span&gt; funcs &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    _candidate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;cb&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _candidate&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filterVertical&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  _candidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;copy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    value &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; y &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; value &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      _candidate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _candidate
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filterHorizontal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  _candidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;copy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      _candidate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _candidate
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;処理の流れ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%87%A6%E7%90%86%E3%81%AE%E6%B5%81%E3%82%8C&quot; aria-label=&quot;処理の流れ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;処理の流れ&lt;/h3&gt;
&lt;p&gt;処理の流れは、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コマンドライン引数より問題の読み込み&lt;/li&gt;
&lt;li&gt;最初のマスの状態を表示&lt;/li&gt;
&lt;li&gt;1マス目（[x = 0, y = 0], [x = 1, y = 0], [x = 2, y = 0] ...)から順にマスの値を取得&lt;/li&gt;
&lt;li&gt;3が空の値(0)だったら、ルールを使って候補をフィルタリング&lt;/li&gt;
&lt;li&gt;4.の結果候補が一つに決まったらマスに数字を入れる。&lt;/li&gt;
&lt;li&gt;処理後のマスの状態を表示&lt;/li&gt;
&lt;li&gt;空の値がなくなるまで3~6を繰り返す。&lt;/li&gt;
&lt;li&gt;最終的な状態を表示して終了。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;となります。goの処理はmain関数から始まるので処理の流れはmain関数にべたっと書いています。&lt;/p&gt;
&lt;p&gt;下記インラインで上の処理をコードに合わせてコメントに書いています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; size &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; maxTry &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;
  flag&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  numStr &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; flag&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Arg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// 1. コマンド引数から問題を読み込み&lt;/span&gt;
  field &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;load&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;numStr&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// 2. 最初の状態を表示&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[START]&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  empty &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;counting&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  result &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; Result&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Field&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;printResult&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  n &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// 8. 空の値がなくなるまでループ（無限ループ対策として、試行回数が1000回を超えたら失敗としてループを抜ける）&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; empty &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; n &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; maxTry &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        n&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// 3. 左上のマスから順番に値を取得&lt;/span&gt;
        cursorValue &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; cursorValue &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          candidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;buildCandidate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;token comment&quot;&gt;// 4. ルールを適用して値を取得&lt;/span&gt;
          value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ok&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; filteredCandidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; j&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;token comment&quot;&gt;// 5. 候補が絞れたらマスに結果を反映&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; ok &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            field&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; value
            empty&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token comment&quot;&gt;// 6. 処理結果を表示&lt;/span&gt;
          result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Result&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;N&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; n&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; X&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; j&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Y&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Ok&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ok&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Value&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Candidate&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; filteredCandidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Empty&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; empty&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Field&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token function&quot;&gt;printResult&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// 8. 処理結果を表示&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; empty &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[END]&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[FAILED]&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;printResult&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;候補の絞り込みについて解説&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%80%99%E8%A3%9C%E3%81%AE%E7%B5%9E%E3%82%8A%E8%BE%BC%E3%81%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A7%A3%E8%AA%AC&quot; aria-label=&quot;候補の絞り込みについて解説 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;候補の絞り込みについて解説&lt;/h3&gt;
&lt;p&gt;前の項目では全体の処理の流れを説明することがメインだったのであまり詳しく説明しなかったのですが、
この数独を解くキモの所の回答の候補を絞り込む部分をサッと説明してしまったのでここではもう少し詳しく説明していければと思います。&lt;/p&gt;
&lt;p&gt;先に説明した通り数独には縦、横と3 * 3のマスにそれぞれ1から9までの数字が入るというルールを盛ってそれぞれの81マスに入る数値を絞り込んでいきます。&lt;/p&gt;
&lt;p&gt;今回のコードでは&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;縦のルール(filterVartical関数)&lt;/li&gt;
&lt;li&gt;横のルール(filterHorizontal関数)&lt;/li&gt;
&lt;li&gt;3*3のマスのルール(filterBox関数)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;を適用して候補を絞り込み最終的に取りうる値が1つになったら二つ目の返り値でtrueを返すような仕組みにしてます。&lt;/p&gt;
&lt;p&gt;今回のコードではそれぞれのルールで適用する関数に切り分けたので、それぞれの関数を順番に候補（1から9の数字の配列）に適用していって、
最終的に配列の長さが１になったらマスを埋めるという方法をとっています。&lt;/p&gt;
&lt;p&gt;幾分Goに不慣れなので関数の配列を作るのにちょっとハマりましたが、おかげで当初の&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  _candidate &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;copy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  _candidate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filterVartical&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _candidate&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  _candidate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filterHorizontal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _candidate&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  _candidate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filterBox&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_candidate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _candidate&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _candidate
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のような重複の多い残念なコードよりは幾分ましになりました。&lt;/p&gt;
&lt;p&gt;あらかじめそれぞれの関数のコードのインターフェースを揃えておいたので、数独のルールを適用する部分が割とすっきり書くことができました。
それぞれの関数の中身はコードを見ればわかるとは思うのですが、ループを回して&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;縦、横、3*3の中を走査&lt;/li&gt;
&lt;li&gt;0以外の数値かつ今カーソルのあるマスでない場合はマスの値で候補から除外する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ということをやっています。&lt;/p&gt;
&lt;p&gt;ここまでで、数独のルールによる絞りこみと全体の処理の流れを説明しましたがいかがでしたでしょうか？
ステップ数もそこまでなく、解説する必要があるのはここくらいな気がしたので若干説明のバランスの悪さはいなめないですが、
説明はここまでとします。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上、「Go言語で数独を解くコード」を書いてみたでした。&lt;/p&gt;
&lt;p&gt;現状では、簡単な問題しか解けませんが、簡単な問題でもこのプログラムさんは一瞬で回答を導きだしてくれます。&lt;/p&gt;
&lt;p&gt;Go言語の勉強のためにコードを書いてみましたが、数独をコードで書くと配列だったりスライス、文字列操作などの
処理を書くことが多く、それらの文法に馴染めたのではないかと思います。&lt;/p&gt;
&lt;p&gt;先を見るとGoでWebAPI作るくらいのところまでやりたいのですが、まだ構造体とかインターフェース、パッケージとインポートなどの
挙動を確かめられていないので、このプログラムを強化しつつ色々と学んでいきたいと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/03/20190311_go-numpre/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Gatsbyでエイリアスを切って相対パス地獄から抜け出す方法]]></title><description><![CDATA[Gatsbyでインストールして普通にコード書き始めるとimport…]]></description><link>https://ver-1-0.net/blog/2019/03/05/gatsby-webpack-alias</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/03/05/gatsby-webpack-alias</guid><pubDate>Thu, 07 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Gatsbyでインストールして普通にコード書き始めるとimport文などが相対パスだらけになって「なんだかなぁ」っていう気持ちになりますよね。&lt;/p&gt;
&lt;p&gt;相対パスでそのままコードを書いていると、下みたいな「結局どこ？」みたいなパスの書き方になりがちです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Hoge &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;../../../../hoge&apos;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ディレクトリの階層構造が浅いうちは救いもあるのですが、徐々にネストが深くなるにつれて闇が深まっていきます。
そんなときにエイリアスを切って、importをスッキリできると嬉しいですよね。&lt;/p&gt;
&lt;p&gt;そう、こんな風に&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Hoge &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;path/to/hoge&apos;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;単純に相対パスが理解しづらいというデメリットもあるのですが、エイリアスを切って絶対パスのような形でアクセスするようにしておくと、
ファイルを移動させたり階層構造をかえる場合にいちいちパスを変更しなくて済むので極力絶対パスでimportしていきたいです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;Webpackを使ってエイリアスを設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Webpack%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9%E3%82%92%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;Webpackを使ってエイリアスを設定 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Webpackを使ってエイリアスを設定&lt;/h2&gt;
&lt;p&gt;gatsbyはwebpackを使用しているのでwebpackのエイリアスの機能を使うことができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webpack.js.org/configuration/resolve/#resolvealias&quot;&gt;https://webpack.js.org/configuration/resolve/#resolvealias&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これをGatsbyに設定してあげればエイリアスからのパスでimportができるようになります。&lt;/p&gt;
&lt;p&gt;Gatsbyではwebpackの設定を行うためのcallbackが用意されており、onCreateWebpackConfigというコールバックをgatsby-node.jsに書いてあげればwebpackの設定をいじることができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gatsbyjs.org/docs/add-custom-webpack-config/&quot;&gt;https://www.gatsbyjs.org/docs/add-custom-webpack-config/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これをつかってエイリアスを設定するには以下のようにします。&lt;/p&gt;
&lt;h4&gt;gatsby-node.js&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;exports&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;onCreateWebpackConfig&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;stage&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; rules&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; loaders&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; plugins&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; actions&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  actions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setWebpackConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;alias&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;config&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;assets&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;src/assets&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;components&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;src/components&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;lib&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;src/lib&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;pages&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;src/pages&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;templates&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;src/templates&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;locales&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;src/locales&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで相対パス地獄から無事抜け出すことができます。&lt;/p&gt;
&lt;p&gt;react-nativeではこれやろうとして結構ハマったのですが、webpackが入ってると簡単にきできますね。
上のコード貼るだけで相対パスから脱出できるのでぜひためしてみてください。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/03/20190305_gatsby-webpack-alias/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[フリーランスには「マーケット感覚」が必要だと思う]]></title><description><![CDATA[マーケット感覚を身につけよう---「これから何が売れるのか?」わかる人になる…]]></description><link>https://ver-1-0.net/blog/2019/03/02/market-sense-for-freelance</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/03/02/market-sense-for-freelance</guid><pubDate>Sat, 02 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a id=&quot;marketing-sence-text&quot; class=&quot;js-ga-click-book-marketing-sence&quot; href=&quot;https://amzn.to/2EsMyie&quot;&gt;マーケット感覚を身につけよう---「これから何が売れるのか?」わかる人になる5つの方法&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;marketing-sence-image&quot; class=&quot;js-ga-click-book-marketing-sence&quot; href=&quot;https://www.amazon.co.jp/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E6%84%9F%E8%A6%9A%E3%82%92%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%82%88%E3%81%86-%E3%80%8C%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E4%BD%95%E3%81%8C%E5%A3%B2%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%8B-%E3%80%8D%E3%82%8F%E3%81%8B%E3%82%8B%E4%BA%BA%E3%81%AB%E3%81%AA%E3%82%8B5%E3%81%A4%E3%81%AE%E6%96%B9%E6%B3%95-%E3%81%A1%E3%81%8D%E3%82%8A%E3%82%93/dp/4478064784/ref=as_li_ss_il?ie=UTF8&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=d215a817b086dd6a55955c06acd8534f&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4478064784&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4478064784&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;こちらはちきりんさん著の**「マーケット感覚を身につけよう」**です。これからの自分のキャリアを考える時の基本の考え方にを
教えていただいた本で今回この記事を書くにあたって再び読み返してみました。&lt;/p&gt;
&lt;p&gt;久しぶりに読んでいて、マーケット感覚というのが漠然と「フリーランスってスキル高いだけじゃだめだなぁ」と考えていた
こものへの答えをもらえた気がしました。&lt;/p&gt;
&lt;p&gt;本書ではマーケット感覚とは何で？なぜそれが必要なのかという理由とその鍛え方までがわかりやすい形でまとめられているので、
一度手に取ってみることをおススメします。&lt;/p&gt;
&lt;h2 id=&quot;マーケット感覚とは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E6%84%9F%E8%A6%9A%E3%81%A8%E3%81%AF&quot; aria-label=&quot;マーケット感覚とは permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;マーケット感覚とは？&lt;/h2&gt;
&lt;p&gt;マーケット感覚とは「価値を認識する力」で世の中で出回っているサービスや自分が提供しているサービスの「価値」
を認識できる感覚のことです。&lt;/p&gt;
&lt;p&gt;「あるサービスがだれにどのような形で価値を提供しているのか？」&lt;/p&gt;
&lt;p&gt;ということをより解像度高く認識できる人というのはマーケットの感覚を備えている人ということになります。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;マーケット感覚--顧客が市場で取引を行う場面を直感的に想像できる能力&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E6%84%9F%E8%A6%9A--%E9%A1%A7%E5%AE%A2%E3%81%8C%E5%B8%82%E5%A0%B4%E3%81%A7%E5%8F%96%E5%BC%95%E3%82%92%E8%A1%8C%E3%81%86%E5%A0%B4%E9%9D%A2%E3%82%92%E7%9B%B4%E6%84%9F%E7%9A%84%E3%81%AB%E6%83%B3%E5%83%8F%E3%81%A7%E3%81%8D%E3%82%8B%E8%83%BD%E5%8A%9B&quot; aria-label=&quot;マーケット感覚  顧客が市場で取引を行う場面を直感的に想像できる能力 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;マーケット感覚 = 「顧客が市場で取引を行う場面を直感的に想像できる能力」&lt;/h2&gt;
&lt;p&gt;「マーケット感覚」は**「商品サービスが売買されている現場のリアルな状況を想像できる力」&lt;strong&gt;や&lt;/strong&gt;「顧客が市場で取引を行う場面を直感的に想像できる能力」**ともいうことができます。&lt;/p&gt;
&lt;p&gt;それは顧客が何を求めて商品を買っているのかを正しく理解するには現場のリアルな状況を想像できる必要があるからです。&lt;/p&gt;
&lt;p&gt;例えば、「北海道でカニを食べたい」ので北海道に旅行に行くという人がいたとするとこの人には必ずしも旅行で
直接北海道に行ってまでカニを食べる必要があるとはかぎりません。ネットが発展した現代ではネットでちょっと
検索をすれば通販サイトで産地直送の北海道のカニが見つかるかもしれません。&lt;/p&gt;
&lt;p&gt;この例を航空会社からみてみると顧客を通販サイトに取られてしまったという見方をすることができます。航空会社の
競合というとまず真っ先に同業他社が思い浮かぶと思うのですが、この**「商品サービスが売買されている現場のリアルな状況を想像できる力」**
をもっていれば航空会社の競合は同業他社や同じ移動という価値を提供している鉄道会社だけではなく状況によっては
ネット通販会社も競合になりうるということが理解できます。&lt;/p&gt;
&lt;h2 id=&quot;なぜフリーランスにはこのマーケット感覚が必要なのか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%AA%E3%81%9C%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AB%E3%81%AF%E3%81%93%E3%81%AE%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E6%84%9F%E8%A6%9A%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%AE%E3%81%8B&quot; aria-label=&quot;なぜフリーランスにはこのマーケット感覚が必要なのか permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;なぜフリーランスにはこのマーケット感覚が必要なのか？&lt;/h2&gt;
&lt;p&gt;マーケット感覚を持っているとこのように業界全体を別の角度から捉えることができるようになります。
さらにマーケット感覚を鍛えると市場で取引される価値につていの深い理解が身についてくるので**「自分で価値を創出して売る」**ことができるようになります。&lt;/p&gt;
&lt;p&gt;フリーランスや個人事業主は会社の社長でないとはいえ、一事業者なので単純なスキル以外にも
スキルを「どういう人が欲しているのか？」「どういうスキルが欲されているのか？」あるいは「どういうサービスが市場で不足しているのか」ということを正しく理解する必要があります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;blockquote&gt; 自分をどこで売るべきか、自分が高く売れる市場はどれなのか。「一生懸命頑張る！」前に、どの市場で頑張るべきなのか
という市場の選択にこそ、マーケット感覚を働かせる必要があるのです。
&lt;/blockquote&gt;
&lt;div class=&quot;small-text&quot;&gt;
引用: &lt;a id=&quot;marketing-sence-image&quot; class=&quot;js-ga-click-book-marketing-sence&quot; href=&quot;https://amzn.to/2EsMyie&quot;&gt;マーケット感覚を身につけよう---「これから何が売れるのか?」わかる人になる5つの方法&lt;/a&gt;
&lt;br/&gt;第3章マーケット感覚で変わる世の中の見え方 成功の鍵は市場の選択
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;例えば、私が行なっている企業様の開発のサポートの仕事では、「エンジニアリングのスキルをもたないか人材が
不足している」企業様に対して「エンジニアリングスキル（あるいはシステムを作る）」という価値を提供して仕事をしています。&lt;/p&gt;
&lt;p&gt;今後フリーランスという働き方も一般化し、フリーランスエージェント会社の力や世間的な雰囲気の流れで市場にフリーランスエンジニアの
の数が増えると思うのですが、「その中で自分がどういう価値を発揮できるのか？」ということは常に考えていく
必要があると思います。&lt;/p&gt;
&lt;p&gt;自分独自の提供価値を考える上でマーケット感覚は非常に重要でお客様の価値の取引の状況をリアルに思い描いて「自分のできること」と
「お客様あるいは市場の欲すること」を一致させたサービスを提供していく必要があります。&lt;/p&gt;
&lt;p&gt;例えば自分にエンジニアの知り合いが多くて知り合いの稼働を確保できるのであれば、エンジニアが不足している困っている企業に
まとめて人的リソースを提供することができますし、デザインができればUIにこだわったシステムを作りたい企業様に「UIデザイン+エンジニアリング」
という価値が提供できます。自分のスキルが何でそれをどのお客様が必要としているのかということは常に考え続ける必要があります。&lt;/p&gt;
&lt;p&gt;フリーランスになると闇雲にスキルを伸ばせばよいという考え方に陥りがちなことも多いですが、フリーランスである以上
**「そのスキルはいくらで売れるのか？」**ということは常に意識しながらスキルを伸ばしていく必要があるでしょう。&lt;/p&gt;
&lt;p&gt;こういった点からマーケット感覚は
「自分は現状どういう価値を発揮して、今後どういう価値を発揮するために行動するのか？」
を考える上での大きな指針になり、フリーランスにはとても必要な価値だと思っています。&lt;/p&gt;
&lt;h2 id=&quot;マーケット感覚の鍛え方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E6%84%9F%E8%A6%9A%E3%81%AE%E9%8D%9B%E3%81%88%E6%96%B9&quot; aria-label=&quot;マーケット感覚の鍛え方 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;マーケット感覚の鍛え方&lt;/h2&gt;
&lt;p&gt;で、マーケット感覚ってどうやって身に付けるの？という話ですが、「マーケット感覚を鍛えよう」の章では
5つの方法が紹介されています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;プライシング能力を身につける。&lt;/li&gt;
&lt;li&gt;インセンティブシステムを理解する。&lt;/li&gt;
&lt;li&gt;市場に評価される方法を学ぶ。&lt;/li&gt;
&lt;li&gt;失敗と成功の関係を理解する。&lt;/li&gt;
&lt;li&gt;市場性の高い環境に身をおく。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;それぞれ全てを説明することはできないので、詳しい部分は書籍に譲りますが自身の経験としてアジアで仕事したり、
旅行したりした経験から物の価値は一つではないという理解できたいことは大きかったなと思っています。&lt;/p&gt;
&lt;p&gt;インドネシアなどのアジアの国にいくとあるタクシーでは1000円で行ってくれるのに、他のタクシーでは3000円かかる（例です。）というように日本ののように一つ一つのものに綺麗に値札がつけられているということがほとんどありません。&lt;/p&gt;
&lt;p&gt;アジアでは、ローカル価格というように現地人に売る価格と観光客に売る価格をわけているお店が多いです。
彼らはどうやら現地人としては珍しくもなんともないものを観光客は面白いと感じて買ってくれるので購入に際して要求する価格が違うようです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;相手によってその商品にどれくらい価値を見出すかというのは一律ではない&lt;/strong&gt;ので、これは当たり前といえば当たり前なのですが、
高度に市場化された製品の多い日本に暮らしているとあまり実感できないのかもしれません。&lt;/p&gt;
&lt;p&gt;このように個人的な経験から
&lt;strong&gt;「一つの物に対する値段は一つでないこと」&lt;/strong&gt;
&lt;strong&gt;「商品に対してどれくらい価値を感じるかは人それぞれなので自分の価値基準をもつこと」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ということを理解しておくことはマーケット感覚を高めるのに必要そうな要素だと思っています。
本書では相場というものが他社の判断結果ということを言っていて、相場に頼る人ほど自分独自の価値判断基準を
もたない人の典型というようなことを書いています。&lt;/p&gt;
&lt;p&gt;フリーランスも自分で値つけをしていかないといけない立場ですから相場に流されず自分の基準で仕事をして
価値を発揮していくことが大事そうです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまでマーケット感覚とはなにか？なぜフリーランスにマーケット感覚が必要か？どう鍛えればよいのか？
ということをまとめましたが、詳しくは書籍をご覧になるのが良いです。&lt;/p&gt;
&lt;p&gt;フリーランスは事業者という市場性の高い環境に身を置かざるを得ない環境にあることからマーケット感覚を身につける
必要は言わずもがなではるのですが、今後フリーランス人口の拡大とともに「自分をどう売るのか？」ということは
考えないといけないテーマ+自分への戒めとしてこちらの記事をまとめさせていただきました。&lt;/p&gt;
&lt;p&gt;フリーランスをやっていてなんとなく「単純にスキルが高いだけじゃダメだよなぁ」と考えていたときに「マーケット感覚」
という概念を認識できたことで意識する対象が明確になったので今回本を読み返してみてよかったなぁと思いました。&lt;/p&gt;
&lt;p&gt;良い本は何回か読み返すと新しい発見がありますね。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/03/20190302_market-sense-for-freelance/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[JSXに&&やif、三項演算子、mapなどの制御構文を書くのをやめる方法 jsx-control-statements]]></title><description><![CDATA[突然ですがReactを書いているとJSX上に&&を書いたりmapを書いたりif書いたりという感じでJavaScriptの構文が出現しますよね。
コードで書いてみるとこういう感じです。 &&やif…]]></description><link>https://ver-1-0.net/blog/2019/02/28/about-jsx-control-statements</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/02/28/about-jsx-control-statements</guid><pubDate>Thu, 28 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;突然ですがReactを書いていると&lt;strong&gt;JSX上に&amp;#x26;&amp;#x26;を書いたりmapを書いたりif書いたりという感じでJavaScriptの構文が出現しますよね。&lt;/strong&gt;
コードで書いてみるとこういう感じです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IFStatementsInJSX&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; isTrue &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; isTrue &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;SomeComponent&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            list&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;item&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;ListItem&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;item&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;#x26;&amp;#x26;やif文での分岐が一つだったりとかであればいいんですけど、三項演算子使っていたりとかネストしていたりすると
途端に非常に読みづらいコードになります。&lt;/p&gt;
&lt;p&gt;なんとかこれを防げないかと考えていたのですが、&lt;a href=&quot;https://github.com/AlexGilleran/jsx-control-statements#alternative-solutions&quot;&gt;jsx-control-statements&lt;/a&gt;という
babelのプラグインを使うと上記のような構文がJSXチックにかけるようなのでそちらを紹介したいと思います。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;jsx-control-statements&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#jsx-control-statements&quot; aria-label=&quot;jsx control statements permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;jsx-control-statements&lt;/h2&gt;
&lt;p&gt;リポジトリはこちらです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/AlexGilleran/jsx-control-statements#alternative-solutions&quot;&gt;jsx-control-statements&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;jsx-control-statementsはbanbelのプラグインなのですが、babelの設定をするだけで以下の形でif文をjsxライクで書くことができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;If&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;condition&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;IfBlock&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;If&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// mapの代わり&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;For&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;items &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; item&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; item&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;For&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;babelの設定自体もconfigにpluginの記述を追加するだけです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; --save-dev babel-plugin-jsx-control-statements&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  ...
  &lt;span class=&quot;token property&quot;&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;jsx-control-statements&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;もし、babel pluginでtransform-react-inline-elementsを使用している場合は、transform-react-inline-elementより前にjsx-contorl-statementsを記載する必要がある点は注意が必要です。&lt;/p&gt;
&lt;p&gt;Ifタグ、Forタグ以外にもChooseタグというCase文をかけるようなものもあるのでぜひ試してみると良いと思います。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ifタグ、ForタグはBabelでトランスパイルされるのでimportしたりrequireする必要がない&lt;/strong&gt;のですが、lintには引っかかる可能性があります。
ただ、jsx-control-statements用のeslint pluginもあるのでそちらを利用すれば問題ないようです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/vkbansal/eslint-plugin-jsx-control-statements%3CPaste%3E&quot;&gt;eslint-plugin-jsx-control-statements&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上、jsx-control-statementsでJSXから制御構文を追い出す方法について書いてみました。&lt;/p&gt;
&lt;p&gt;jsxがこのような制御構文を用意してないのはjsxの責務外だからなんですかね？今度時間があるときに調べてみようかと思います。
では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/02/20190228_about-jsx-control-statements/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Go言語の文法を勉強して印象にのこったところまとめ。その4。]]></title><description><![CDATA[Go の文法のまとめをちょこちょことしてみましたが、今回で一通りはまとめ終わりそうです。当たり前のことではあるんですが、これをまとめた所で言語を書けるようにはならないですね。
こないだ Go の雰囲気をざっくり感じ取れたと思ったのでいざ Go…]]></description><link>https://ver-1-0.net/blog/2019/02/26/get-start-go-4</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/02/26/get-start-go-4</guid><pubDate>Tue, 26 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Go の文法のまとめをちょこちょことしてみましたが、今回で一通りはまとめ終わりそうです。当たり前のことではあるんですが、これをまとめた所で言語を書けるようにはならないですね。
こないだ Go の雰囲気をざっくり感じ取れたと思ったのでいざ Go を書いてみようと思ったのですが、全然ダメでしたね。&lt;/p&gt;
&lt;p&gt;書こうとした瞬間に手が止まって「あれ、手が動かない」ってなりました。普段書き慣れている Ruby や JavaScript は色々な関数も知っているし、文法も頭に入っているので
8 割スラスラ 2 割ネットで調べてみたいな感じで書けるのですが Go は慣れてないので一瞬で手が止まりました。Go の基礎の本を読んだ後いざ書こうと PC に向かってみましたが全然ダメです笑。&lt;/p&gt;
&lt;p&gt;プログラミングは理論と実践が大事なのでやっぱり活字を読むのと実際にコードを両立していかないとダメですね。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/01/21/get-start-go&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/02/14/get-start-go-2&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。その2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2019/02/18/get-start-go-3&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。その3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id=&quot;オススメの本&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%E3%81%AE%E6%9C%AC&quot; aria-label=&quot;オススメの本 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;オススメの本&lt;/h2&gt;
&lt;p&gt;今回もこちらの本を参考にまとめていきます。記事を途中で書いていて気づいたのですが本で使用している go のバージョンが 1.4 とちょっと古いので微妙に挙動が違うかもしれません。。&lt;/p&gt;
&lt;p&gt;こちらの本を使って勉強した後は公式のドキュメントなどみながら現バージョンとの違いもおさえておく必要がありそうです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2CA6kaU&quot;&gt;改訂 2 版 基礎からわかる Go 言語&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E6%94%B9%E8%A8%822%E7%89%88-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8B-Go%E8%A8%80%E8%AA%9E-%E5%8F%A4%E5%B7%9D-%E6%98%87/dp/4863541783/ref=as_li_ss_il?ie=UTF8&amp;qid=1548033254&amp;sr=8-1&amp;keywords=%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8BGo&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=e8ed2f069df15a718c5cb35e0bc33965&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4863541783&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4863541783&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;文法のまとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%96%87%E6%B3%95%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;文法のまとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;文法のまとめ&lt;/h2&gt;
&lt;h2 id=&quot;並列処理&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%B8%A6%E5%88%97%E5%87%A6%E7%90%86&quot; aria-label=&quot;並列処理 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;並列処理&lt;/h2&gt;
&lt;p&gt;go はゴルーチンと呼ばれる。並列処理を、簡易的に実装する機構を持っています。Go 言語では go 文を使用して関数をゴルーチンとして呼び出すか通常の関数として呼び出すかを区別します。&lt;/p&gt;
&lt;p&gt;go 文の書式は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt; 関数呼び出し&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とするだけです。&lt;/p&gt;
&lt;p&gt;呼び出し側からみたゴルーチンの通常の関数呼び出しと違う点は、ゴルーチンとして実行された関数の終了を待たないことです。&lt;/p&gt;
&lt;p&gt;メイン関数内で、ゴルーチンを実行した場合ゴルーチンが終わるより先にメイン関数の処理が終わってしまうと、プログラム自体がゴルーチンを待たずに終了してしまうので注意が必要です。&lt;/p&gt;
&lt;h3 id=&quot;チャネル&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB&quot; aria-label=&quot;チャネル permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;チャネル&lt;/h3&gt;
&lt;p&gt;ゴルーチンは非同期的に処理され、戻り値を受け取れないため、処理結果が必要な場合は後で説明するチャネルを使用します。&lt;/p&gt;
&lt;p&gt;チャネルはゴルーチン間の通信に使われます。
チャネルの書式は送信専用、受信専用の書式がありそれぞれ chan キーワードと矢印キーワードで送受信の制限を記述します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;チャネルはスライスおよびマップと同じく参照型の一種であり、他の参照型と同様に値を悪性するには「make」組み込み関数を使用します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; 要素型&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; キャパシティ&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; 要素型&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;チャネルへの値の送受信は&amp;#x3C;-演算子を使用します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;チャネル &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; 送信する値 &lt;span class=&quot;token comment&quot;&gt;// 送信&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; チャネル            &lt;span class=&quot;token comment&quot;&gt;// 受信&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用しなくなったチャネルは close 組み込み関数でクローズします。クローズ済みのチャネルに値を受信することはできず、クローズ済みのチャネルから
受信しようとすると、クローズ直前までに送信されていたチャネルでバッファリングされている値がなくなるまで受信できます。&lt;/p&gt;
&lt;p&gt;チャネルがクローズされたかどうか知りたい場合は受信操作から返される 2 番目の返り値が false であればクローズ済みと判断することができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token function&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;チャネル&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これらをまとめたサンプルのコードが以下です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  channel &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// チャネルの作成&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s &lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      s &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; i &lt;span class=&quot;token comment&quot;&gt;// チャネルの送信&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// チャネルのクローズ&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;channel&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ok &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; channel &lt;span class=&quot;token comment&quot;&gt;// チャネルの受信&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;ok &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// チャネルがクローズされていた場合&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;チャネルを利用した同期&lt;/h4&gt;
&lt;p&gt;チャネルは受信時にバッファリングが空（どの値も送信されていない状態）では、処理をロックする性質があるのでこれを利用してゴルーチン間で
同期的な処理を実現することができます。&lt;/p&gt;
&lt;p&gt;この性質を利用したコードが以下で、以下のコードではゴルーチンを3つだけ起動した後にチャネルの受信処理を置いてゴルーチンが同期的に処理されるような実装を行なっています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;fmt&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;math/rand&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;time&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; goroutines &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  c &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; goroutines&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s &lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Sleep&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;rand&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Int63n&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Second&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;処理完了&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

      s &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; goroutines&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// ゴルーチンから値が送信されていない場合に値が送信されるまで待機&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt;c
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;すべて完了&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;値の共用&lt;/h4&gt;
&lt;p&gt;ゴルーチン間で値を共用するときもグローバル変数などを用いることなく、「チャネル」を使用するのが一般的です。&lt;/p&gt;
&lt;p&gt;今日変数の代わりとなる値をチャネルで引回すことによって、複数の「ゴルーチン」で値に同時にアクセスをしてしまうことを防ぎます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;fmt&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;os&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; goroutines &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  counter &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; goroutines&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;counter &lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// チャネルから値を取り出す&lt;/span&gt;
      value &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt;counter
      value&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
      fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;counter:&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; value &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; goroutines &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Exit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// 更新した値をチャネルに戻す&lt;/span&gt;
      counter &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; value
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;counter&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  counter &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;select 文&lt;/h4&gt;
&lt;p&gt;select 文を使うと複数のチャネルに対して同時に送受信を行うことができます。select 文は switch 文と似ており case 節も一緒に書いていきます。
select 文は case 節に指定したチャネルのうちどれかが通信可能になるまで待機し、どれかが通信可能になると実際に通信を行なった後 case 節内の処理を実行します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; 通信式&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// case節内の通信式が実行された後にされる処理&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; 通信式&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// case節内の通信式が実行された後にされる処理&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// それ以外&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;select文を使ったサンプルコードは以下になります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;fmt&quot;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;os&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   ch1 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
   ch2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;chan&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

   &lt;span class=&quot;token keyword&quot;&gt;go&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
       &lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
         &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; ch1 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
            fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ch1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
         &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; ch2 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
            fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ch2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
       &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
     &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

     os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Exit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
   &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

   &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
       &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; val &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt;ch1&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
         fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;receive from ch1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; val&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
       &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; text &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;-&lt;/span&gt;ch2&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
         fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;receive from ch2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; text&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
   &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;select文の注意点として、selext文ではfallthrough文を使用することができず、select文内に実行可能なcase節が複数ある場合は&lt;strong&gt;ランダムに実行&lt;/strong&gt;（なぜ？？）される点が注意です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上でゴルーチンのまとめ終わりです。上から順番に実行されるコードであると理解は容易なのですが、JavaScriptのPromise, async/awaitしかりゴルーチンしかりで
これらはちょっと頭使わないと理解が難しいですね。&lt;/p&gt;
&lt;p&gt;こういったコードはひたすらコードにふれて慣れていくしかないですね。
Goの文法のまとめも終わったのでそろそろコードを書き始めます。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/02/20190226_get-start-go-4/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Gitのフックを使ってGatsbyブログ記事の更新日時が自動で更新されるようにした話]]></title><description><![CDATA[先月くらいにこのブログをWordpressからGatsbyでリプレイスしたのですが、やっぱりWordpressもよくできていて、一度投稿された記事を後から編集した時に更新日時が自動で更新されるて便利なんですよね。
WordpressはDB…]]></description><link>https://ver-1-0.net/blog/2019/02/24/pre-commit-update-timestamp</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/02/24/pre-commit-update-timestamp</guid><pubDate>Sun, 24 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;先月くらいにこのブログをWordpressからGatsbyでリプレイスしたのですが、やっぱりWordpressもよくできていて、一度投稿された記事を後から編集した時に更新日時が自動で更新されるて便利なんですよね。
WordpressはDBを使っているから当たり前といえば当たり前なのですが、更新日時の更新漏れとかを防ぐいみでのこの仕組みが欲しいななんて考えていました。&lt;/p&gt;
&lt;p&gt;これがベストかと言われるとちょっとわからないのですが、gitのフックを使ってやるのがいいんじゃないかなと考えて仕組みを作ってみたのでその手順をまとめておきます。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2019/01/10/blog-renewal-by-gatsby&quot;&gt;WordpressブログをGatsby+Netlifyでリプレースした話。&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id=&quot;Gitのフック&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Git%E3%81%AE%E3%83%95%E3%83%83%E3%82%AF&quot; aria-label=&quot;Gitのフック permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Gitのフック&lt;/h2&gt;
&lt;p&gt;Gitのフックを知らない方のために説明しておくと、Gitではクライアント側ではコミットの前やコミットの後、サーバー側ではプッシュされる前や後にスクリプトを
実行することができます。&lt;/p&gt;
&lt;p&gt;これを応用するとコミットする時にlintなどの静的解析ツールを使ってチェックを行なったり、prettierなどのコード整形ツールを使って
リポジトリのコードをテストしたりすることができます。&lt;/p&gt;
&lt;p&gt;詳しくはこちらのドキュメントをみていただけるとよくわかると思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF&quot;&gt;Git フック&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回は、この仕組みを利用してコミットする前にスクリプトを実行して&lt;strong&gt;記事の更新日時を自動で更新してくれる仕組み&lt;/strong&gt;を作っていきます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;おおまかな流れの説明&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%8A%E3%81%8A%E3%81%BE%E3%81%8B%E3%81%AA%E6%B5%81%E3%82%8C%E3%81%AE%E8%AA%AC%E6%98%8E&quot; aria-label=&quot;おおまかな流れの説明 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;おおまかな流れの説明&lt;/h2&gt;
&lt;p&gt;今回は**「コミットされる記事 = 更新される記事」**という前提のもと、Gitフックの中でもpre-commitというhookを使って実装していきます。&lt;/p&gt;
&lt;p&gt;pre-commitだと名前の通りファイルがコミットされる時点でスクリプトを実行できるのでコミットが走る前のタイミングでコミットされる記事の一覧を取得し、その一覧の更新日時をアップデートする感じで実装していきます。&lt;/p&gt;
&lt;p&gt;おおまかな処理の流れをまとめると&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;記事をコミット&lt;/li&gt;
&lt;li&gt;gitのpre-commitフックを使って更新される記事の一覧を取得&lt;/li&gt;
&lt;li&gt;スクリプトを使って更新日時を更新&lt;/li&gt;
&lt;li&gt;1.と3.の変更をコミットして終了&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という形になります。以降実際の実装を説明していきます。&lt;/p&gt;
&lt;h2 id=&quot;実装&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%9F%E8%A3%85&quot; aria-label=&quot;実装 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;実装&lt;/h2&gt;
&lt;h3 id=&quot;pre-commitフックを仕掛ける&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pre-commit%E3%83%95%E3%83%83%E3%82%AF%E3%82%92%E4%BB%95%E6%8E%9B%E3%81%91%E3%82%8B&quot; aria-label=&quot;pre commitフックを仕掛ける permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;pre-commitフックを仕掛ける&lt;/h3&gt;
&lt;p&gt;おおまかな流れを決めたところでまずpre-commitのフックの設定をしていきます。&lt;/p&gt;
&lt;p&gt;Gitのフックはgitリポジトリの.git/hooksディレクトリにフックの名前のスクリプトをおくことでフックを仕掛けることができます。
今回の場合は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;.git/hooks/pre-commit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;というファイルをおいておくとpre-commitファイルがコミット前に実行される形になります。
ちなみに.gitディレクトリ配下だとリポジトリでソース管理できないので私の場合は.git/hooksをルートディレクトリのhooksディレクトリのシンボリックリンクにしています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-rf&lt;/span&gt; .git/hooks      &lt;span class=&quot;token comment&quot;&gt;# 既存のhooksディレクトリを削除&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; hooks            &lt;span class=&quot;token comment&quot;&gt;# リポジトリ管理用のディレクトリを作成&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;ln&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;/hooks .git/hooks &lt;span class=&quot;token comment&quot;&gt;# ルートのhooksディレクトリへのシンボリックリンク作成&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;touch&lt;/span&gt; hooks/pre-commit     &lt;span class=&quot;token comment&quot;&gt;# pre-commitファイルを作成&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;chmod&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;755&lt;/span&gt; hooks/pre-commit &lt;span class=&quot;token comment&quot;&gt;# 実行権限を付与&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これでpre-commitのフックを仕掛けると同時にフックのスクリプトをリポジトリ管理できます。&lt;/p&gt;
&lt;h3 id=&quot;pre-commitでの処理を実装&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pre-commit%E3%81%A7%E3%81%AE%E5%87%A6%E7%90%86%E3%82%92%E5%AE%9F%E8%A3%85&quot; aria-label=&quot;pre commitでの処理を実装 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;pre-commitでの処理を実装&lt;/h3&gt;
&lt;p&gt;pre-commitのスクリプトでやることですが、先ほど説明した通り&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コミットされる記事の一覧を取得&lt;/li&gt;
&lt;li&gt;更新日時のの二点です。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;今回は1. はgitのコマンド、2.はjsのスクリプトで実装しました。2.は慣れている人だとシェル芸とかでできてしまうのかもしれないですが、
ちょっと時間かかりそうだったので既存のスクリプトをちょっと変えてタイムスタンプを更新するスクリプトを書きました。&lt;/p&gt;
&lt;p&gt;pre-commitのファイルの中身は以下のようになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token shebang important&quot;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;PATTERN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;index.md

&lt;span class=&quot;token comment&quot;&gt;# コミットされる記事の取得&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;DIFF&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;diff&lt;/span&gt; --name-only &lt;span class=&quot;token parameter variable&quot;&gt;--cached&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; $PATTERN &lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# タイムスタンプ更新用のコマンド&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;UPDATE_TIMESTAMP&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;node ./scripts/updatedAt/index.js &lt;span class=&quot;token variable&quot;&gt;$DIFF&lt;/span&gt;&quot;&lt;/span&gt;

&lt;span class=&quot;token variable&quot;&gt;$UPDATE_TIMESTAMP&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# タイムスタンプを更新した文のファイルを追加&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$DIFF&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;gitコマンドとgrepコマンドを組み合わせてコミットされる記事は取得できるので1.の部分は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;diff&lt;/span&gt; --name-only &lt;span class=&quot;token parameter variable&quot;&gt;--cached&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;記事ファイルをフィルタする条件&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のような形で取得しています。&lt;/p&gt;
&lt;p&gt;あとはそこで取得した一覧を引数に与えるとタイムスタンプを更新してくれるスクリプトを実行して、
そこでの変更分をaddしています。&lt;/p&gt;
&lt;h3 id=&quot;タイムスタンプを更新するスクリプトを実装&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%97%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%99%E3%82%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E5%AE%9F%E8%A3%85&quot; aria-label=&quot;タイムスタンプを更新するスクリプトを実装 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;タイムスタンプを更新するスクリプトを実装&lt;/h3&gt;
&lt;p&gt;pre-commitの仕込みも終わりタイムスタンプ更新対象のファイルも取得できるようになったのであとは肝心のタイムスタンプ更新スクリプトの実装を残すだけです。&lt;/p&gt;
&lt;p&gt;ここでは一応参考までにjsのコードを置いておきますが、シェル芸でやろうがrubyスクリプトを使おうが一向に構いません。
タイムスタンプさえ更新できていればOKです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; path &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;path&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; fs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;fs&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; moment &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;moment&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;alertForRequired&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;value &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;[ERROR] &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;key&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; is required&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;update&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;lines&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; timestamp &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;moment&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;YYYY-MM-DD HH:mm:ss&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; matcher &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;^updatedAt:.*$&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; lines&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;line&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;matcher&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;updatedAt: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;timestamp&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; line
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; argv &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; process
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; paths &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; argv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;slice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; argv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;alertForRequired&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;path&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; paths&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; paths&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;update timestamp:&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; tmp &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; path &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;.tmp&apos;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; content &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;readFileSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; lines &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; content&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;lines&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;writeFileSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tmp&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;copyFileSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tmp&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;unlinkSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tmp&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コード自体は単純で引数でわたされたファイルを順番に処理していってマッチャーに引っかかるものが
あれば現在日時で更新するというだけです。繰り返しにはなりますが、ここは本当にタイムスタンプが更新できれば良いので各自早い安い方法を採用頂ければという感じです。&lt;/p&gt;
&lt;h3 id=&quot;実行してみる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B&quot; aria-label=&quot;実行してみる permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;実行してみる&lt;/h3&gt;
&lt;p&gt;一応念の為実行ログを貼っておくと以下のようになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;some fix&quot;&lt;/span&gt;
update timestamp: src/pages/posts/2017/12/20171225_report/index.md
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;master 89922c8&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; some fix
 &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; files changed, &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt; insertions&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;+&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; deletions&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;-&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;タイムスタンプ更新スクリプト内でタイムスタンプの更新されたファイルを標準出力するようにしているので、無事タイムスタンプが更新されていることがわかります。
これでタイムスタンプ自動更新の作成は終わりです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;実運用はまだなのでどれくらい使えるとかデメリットに気づけていない部分あるかもしれませんが現段で良いと思うものを一旦まとめました。&lt;/p&gt;
&lt;p&gt;ちなみに、あえてタイムスタンプを更新したくない場合は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit --no-verify&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とするとフックを回避することができるので、タイムスタンプを更新せずに記事をコミットすることができます。&lt;/p&gt;
&lt;p&gt;以上です！
では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/02/20190224_pre-commit-update-timestamp/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Go言語の文法を勉強して印象にのこったところまとめ。その3。]]></title><description><![CDATA[前回、前々回とgoの文法をまとめています。今回はその3です。 今回は 配列 エラーハンドリング です。 勉強に使用した本 参考にした本は例によってこちらの本です。感想などは以前の記事に書いたので割愛します。 改訂2版 基礎からわかる Go…]]></description><link>https://ver-1-0.net/blog/2019/02/18/get-start-go-3</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/02/18/get-start-go-3</guid><pubDate>Mon, 18 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前回、前々回とgoの文法をまとめています。今回はその3です。&lt;/p&gt;
&lt;p&gt;今回は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;配列&lt;/li&gt;
&lt;li&gt;エラーハンドリング&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;です。&lt;/p&gt;
&lt;h2 id=&quot;勉強に使用した本&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8B%89%E5%BC%B7%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E6%9C%AC&quot; aria-label=&quot;勉強に使用した本 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;勉強に使用した本&lt;/h2&gt;
&lt;p&gt;参考にした本は例によってこちらの本です。感想などは以前の記事に書いたので割愛します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2CA6kaU&quot;&gt;改訂2版 基礎からわかる Go言語&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E6%94%B9%E8%A8%822%E7%89%88-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8B-Go%E8%A8%80%E8%AA%9E-%E5%8F%A4%E5%B7%9D-%E6%98%87/dp/4863541783/ref=as_li_ss_il?ie=UTF8&amp;qid=1548033254&amp;sr=8-1&amp;keywords=%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8BGo&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=e8ed2f069df15a718c5cb35e0bc33965&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4863541783&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4863541783&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;早速文法のまとめを見ていきましょう。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;文法のまとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%96%87%E6%B3%95%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;文法のまとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;文法のまとめ&lt;/h2&gt;
&lt;h2 id=&quot;配列スライスマップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%85%8D%E5%88%97%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%9E%E3%83%83%E3%83%97&quot; aria-label=&quot;配列スライスマップ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;配列、スライス、マップ&lt;/h2&gt;
&lt;h3 id=&quot;配列&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%85%8D%E5%88%97&quot; aria-label=&quot;配列 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;配列&lt;/h3&gt;
&lt;p&gt;配列は他の言語の配列とあまり変わらずGo言語の配列は動的ではなく、初期化時に配列の長さが決まるようで、動的配列として使いたい場合はスライスを使うのでGO言語で配列を使う機会は少ないようです。&lt;/p&gt;
&lt;p&gt;とはいえ文法は知っておいたほうがよいので
下記に初期化の方法などは載せておきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// 配列型の宣言&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; array &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;byte&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; array2 &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; array3 &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int64&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; array4 &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// 配列の初期化&lt;/span&gt;

array1 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;float32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 長さ5の配列。各要素はゼロ値で初期化される。&lt;/span&gt;

array2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 長さ６の配列。要素の不足分はゼロ値で初期化される。&lt;/span&gt;

array3 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;One&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Two&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Three&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// ...を記述すると要素数が長さとしてしようされる。&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;スライス&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9&quot; aria-label=&quot;スライス permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライス&lt;/h3&gt;
&lt;p&gt;スライスは動的配列として使われるので、rubyやjavascriptの配列をイメージしている人は配列ではなくスライスを使うと覚えておくとよいみたいです。
とはいえスライスは参照型と呼ばれ実体は配列を参照しているようです。配列そのままを関数にわたしたりすると配列の値すべてが複製されてしまい
効率が悪いですが、スライスのような参照型を受け渡しすると参照情報のみがコピーされるのでデータが少なくすむという利点があります。&lt;/p&gt;
&lt;h4&gt;スライス式&lt;/h4&gt;
&lt;p&gt;配列からスライスを作成する、もしくはスライスから新たにスライスを作成するには「スライス式」を使用します。
スライス式は「[]」内に作成するスライスに含める要素の範囲を「:」で区切って記述します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;作成元の配列orスライス&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;下減値&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;上限値&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
作成元の配列orスライス&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;下減値&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;上限値&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;キャパシティ&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;キャパシティとはスライスから新たにスライスを作る場合に指定できる上限値の最大値で、スライスからスライスを作成する時は、
スライスの長さを超え、キャパシティの値までスライスできます。&lt;/p&gt;
&lt;p&gt;また、文字列をスライスすることも可能で文字列をスライスすることで文字列を切り出すことができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; x sring &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abcde&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// =&gt; &quot;bcd&quot;という文字列がxに格納される&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;スライスの初期化&lt;/h4&gt;
&lt;p&gt;配列をそのまま使うよりもスライスを使った方がスライスが可変長な分扱いやすいのですが、わざわざスライスとして使用するために
配列を作るのは手間なのでGo言語ではmake組み込み関数が用意されています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;スライス型&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 長さ&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; キャパシティ&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;スライス型&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 長さ&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// 長さ10, キャパシティ20のスライスを作成&lt;/span&gt;
s1 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;次にスライスの作成と初期化を同時に行う場合は、&lt;strong&gt;スライスリテラル&lt;/strong&gt;を利用します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;s &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;マップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9E%E3%83%83%E3%83%97&quot; aria-label=&quot;マップ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;マップ&lt;/h3&gt;
&lt;p&gt;マップは他の言語でもあるようにキーと値の集合です。「辞書」や「連想配列」とも言われます。
マップ型はスライスと同じく参照型の一種で参照型の値を作成する場合はmake組み込み関数を使用します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;make(map[キーの型] 要素型, キャパシティの初期値)
make(map[キーの型] 要素型)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;キャパシティはマップに格納可能な要素数ですがここで指定する値はあくまでも初期値でキャパシティは
必要に応じて自動で拡張されます。キャパシティの初期値は省略可能です。&lt;/p&gt;
&lt;p&gt;マップの参照は配列と同様に添字を渡して参照するのですが&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;capitals &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
capitals&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;日本&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;東京&quot;&lt;/span&gt;
capitals&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;アメリカ&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ワシントンDC&quot;&lt;/span&gt;
capitals&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;中国&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;北京&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;また、マップは二つ目の戻り値でキーが存在するかを確認することができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;capital&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ok &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; capitals&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;イギリス&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; ok &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;登録済み&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; capital&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;未登録&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; capital&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;マップのキーとして使用できる値&lt;/h4&gt;
&lt;p&gt;マップのキーとして使用できる型は「関数型」「マップ型」「スライス型」以外で、比較演算子「==」「!=」が
実装されている必要があります。&lt;/p&gt;
&lt;h4&gt;マップの初期化&lt;/h4&gt;
&lt;p&gt;マップを作成と同時に初期化する場合は、マップリテラルを使用します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;capitals := map[string] string{
  &quot;日本&quot;: &quot;東京&quot;,
  &quot;アメリカ&quot;: &quot;ワシントンD.C&quot;,
  &quot;中国&quot;: &quot;北京&quot;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;エラーハンドリング&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0&quot; aria-label=&quot;エラーハンドリング permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;エラーハンドリング&lt;/h3&gt;
&lt;h4&gt;戻り値によるエラーハンドリング&lt;/h4&gt;
&lt;p&gt;GOでは戻り値に複数の値を返すことができますが、これをエラーハンドリングにも利用することができます。&lt;/p&gt;
&lt;p&gt;Go言語の標準関すは処理結果とともに「errorインターフェース型」の値をエラー情報として返します。errorインターフェース
は特定のパッケージ内で宣言されているものではなく、Go言語に組み込まれている型で、Errorメソッドを呼び出すことでエラーの詳細情報を
取得することができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;file&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Open&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;text.txt&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// エラーの詳細情報を出力&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Exit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;パニックとリカバリ&lt;/h4&gt;
&lt;p&gt;関数内でエラーが　発生し、その処理が致命的なエラーでただちに処理を中断させたい、もしくはリカバリが必要な時だけハンドリングしたいという場合には、
panic組み込み関数を呼び出して「パニック」という状態を発生させます。
ある関数内で「pnaic」を呼び出すと、その関数の実行は中断さ、順次呼び出し元をさかのぼり、最後にプログラム自体が終了します。
(この時defer文によって遅延していされた関数は実行されるそうです。)&lt;/p&gt;
&lt;p&gt;さらに、recover組み込み関数を呼ぶとパニック状態を中断させることができるのですが、recoverは遅延実行された関数内でしか
使えないようです。&lt;/p&gt;
&lt;p&gt;そのため、以下のようなコードでパニック状態を中断させることができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;f1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;p &lt;span class=&quot;token builtin&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;defer&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;defer start&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    err &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;recover&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// リカバリ&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;catch panic:&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;defer end&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;panic&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;panic!!!!!!!!!!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;// 実行結果
defer start
catch panic: panic!!!!!!!!!!
defer end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまで配列・スライス・マップ、エラーハンドリングについてまとめてみました。
Goルーチンのまとめが残っているのですが、それなりのボリュームになりそうなので、記事を分けます。
このシリーズは次回で完結しそうです。では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/02/20190218_get-start-go-3/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Summary of fixing errors when migrationg webpack2 to webpack4]]></title><description><![CDATA[I happened to have a chance to upgrade from webpack2 to webpack4 in a project using vue, so I had to use
Here's a summary of the errors I've…]]></description><link>https://ver-1-0.net/blog/en/2019/02/17/migration-to-webpack4</link><guid isPermaLink="false">https://ver-1-0.net/blog/en/2019/02/17/migration-to-webpack4</guid><pubDate>Sun, 17 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I happened to have a chance to upgrade from webpack2 to webpack4 in a project using vue, so I had to use
Here&apos;s a summary of the errors I&apos;ve encountered when upgrading webpack and their solutions.&lt;/p&gt;
&lt;h2 id=&quot;Impression-after-migrating-webpack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Impression-after-migrating-webpack&quot; aria-label=&quot;Impression after migrating webpack permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Impression after migrating webpack&lt;/h2&gt;
&lt;p&gt;The first impressions are that the version of package.json was rewritten before the work started, and then the
I thought that I could make it if I did npm install and solved some errors, but it was not so easy.&lt;/p&gt;
&lt;p&gt;Because the version of babel-loader was not usable with webpack4 in 6 series, I upgraded it to 8(latest version) skipping version 7.
Then, I also had to change the version of babel to 7. Finally that&apos;s not a light task.&lt;/p&gt;
&lt;p&gt;The other package versions such as file-loader and vue-loader didn&apos;t match with the 4 series, so I also needed to update them.&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;The-first-thing-we-did-in-the-migration&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#The-first-thing-we-did-in-the-migration&quot; aria-label=&quot;The first thing we did in the migration permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;The first thing we did in the migration.&lt;/h2&gt;
&lt;p&gt; 
When upgrading, basically, you need to update the version of webpack to 4 first and then
I was planning to just keep resolving the errors until the build was successful.
It&apos;s not very efficient, so I went to the official document first.&lt;/p&gt;
&lt;p&gt;Here is something like an explanation of how to migrate from webpack3 -&gt; webpack4.
You can find it here: &lt;a href=&quot;https://webpack.js.org/migrate/4/&quot;&gt;https://webpack.js.org/migrate/4/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The basic policy is to kill errors as they are encountered, but I&apos;ve already destroyed what I can find in the documentation.&lt;/p&gt;
&lt;h3 id=&quot;add-mode-option&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#add-mode-option&quot; aria-label=&quot;add mode option permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;add mode option&lt;/h3&gt;
&lt;p&gt;In webpack4, you can set the mode options, and if you build in production mode, you can uglify.
For more information on how to set it up and how it behaves differently, the following link will help you.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webpack.js.org/concepts/mode/&quot;&gt;https://webpack.js.org/concepts/mode/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The mode options can be specified with the -m option at the time of webpack&apos;s execution, or config it like following code.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;env&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; argv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;argv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mode &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;development&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;devtool &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;source-map&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;argv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mode &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;production&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//... }&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; config&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;webpack-cli-setup&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#webpack-cli-setup&quot; aria-label=&quot;webpack cli setup permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;webpack-cli setup&lt;/h3&gt;
&lt;p&gt;Since webpack4 has cli as webpack-cli, so I&apos;ve also installed it.&lt;/p&gt;
&lt;p&gt;I also installed it.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;console&quot;&gt;&lt;pre class=&quot;language-console&quot;&gt;&lt;code class=&quot;language-console&quot;&gt;npm install -D webpack-cli&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;Remove-Unnecessary-Plug-ins&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Remove-Unnecessary-Plug-ins&quot; aria-label=&quot;Remove Unnecessary Plug ins permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Remove Unnecessary Plug-ins&lt;/h3&gt;
&lt;p&gt;The following four plugins are the default for production mode in v4.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* NoEmitOnErrorsPlugin
* ModuleConcatenationPlugin
* DefinePlugin
* UglifyJsPlugn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is the development mode default&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* NamedModulesPlugin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The next two are deprecated and removed&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* NoErrorsPlugin
* NewWatchingPlugin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;So, if this plugin is included in your project&apos;s webpack.config.js, you should remove it.&lt;/p&gt;
&lt;h2 id=&quot;Errors-that-appeared-after-the-upgrade-and-their-countermeasures&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Errors-that-appeared-after-the-upgrade-and-their-countermeasures&quot; aria-label=&quot;Errors that appeared after the upgrade and their countermeasures permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Errors that appeared after the upgrade and their countermeasures.&lt;/h2&gt;
&lt;p&gt;As I wrote earlier, read the migration instructions and remove what I could destroy first so next I needed to fight against the unknown errors.&lt;/p&gt;
&lt;h3 id=&quot;Cannot-read-property-fileLoader-of-undefined&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Cannot-read-property-fileLoader-of-undefined&quot; aria-label=&quot;Cannot read property fileLoader of undefined permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Cannot read property &apos;fileLoader&apos; of undefined&lt;/h3&gt;
&lt;p&gt;It seems that the version of file-loader was simply too old.
It was throwing up an error per leaflet.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/tcoopman/image-webpack-loader/issues/153&quot;&gt;https://github.com/tcoopman/image-webpack-loader/issues/153&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;console&quot;&gt;&lt;pre class=&quot;language-console&quot;&gt;&lt;code class=&quot;language-console&quot;&gt;npm install file-loader@[latest version]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;TypeError-Cannot-read-property-stylus-of-undefined&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#TypeError-Cannot-read-property-stylus-of-undefined&quot; aria-label=&quot;TypeError Cannot read property stylus of undefined permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TypeError: Cannot read property &apos;stylus&apos; of undefined&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/shama/stylus-loader/issues/189&quot;&gt;https://github.com/shama/stylus-loader/issues/189&lt;/a&gt;
&lt;a href=&quot;https://github.com/shama/stylus-loader/pull/190/files&quot;&gt;https://github.com/shama/stylus-loader/pull/190/files&lt;/a&gt;&lt;Paste&gt;&lt;/p&gt;
&lt;p&gt;A minor version of the stylus-loader had become an error with only 1 small version.
It&apos;s solved by updating to 3.0.2.&lt;/p&gt;
&lt;h3 id=&quot;Parse-error-in-dynamic-import&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Parse-error-in-dynamic-import&quot; aria-label=&quot;Parse error in dynamic import permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Parse error in dynamic import.&lt;/h3&gt;
&lt;p&gt;When I built it, there was a parse error in the dynamic import.
The project uses this &lt;strong&gt;preset-stage-2&lt;/strong&gt;.
It was already migrated it while following document, but it didn&apos;t work.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/blob/master/packages/babel-preset-stage-2/README.md&quot;&gt;https://github.com/babel/babel/blob/master/packages/babel-preset-stage-2/README.md&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here&apos;s the solution, and it&apos;s in the&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/webpack/webpack/issues/8656&quot;&gt;https://github.com/webpack/webpack/issues/8656&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are some posts that say it worked when I downgraded to wepback 4.28.
It seems like last resolution, and if you read on as if there&apos;s a better way, webpack relies on acorn@^6.05
It seems to need to be installed.&lt;/p&gt;
&lt;p&gt;Furthermore, the webpack relies on acorn, acorn-dynamic-import and I needed to dedupe like this&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;npm dedupe&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;It seemed to be an error because each one did not reference the same version.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/webpack/webpack/issues/8656#issuecomment-456010969&quot;&gt;https://github.com/webpack/webpack/issues/8656#issuecomment-456010969&lt;/a&gt; ...&lt;/p&gt;
&lt;p&gt;For now.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash.&quot;&gt;&lt;pre class=&quot;language-bash.&quot;&gt;&lt;code class=&quot;language-bash.&quot;&gt;npm install -D acorn@^6.0.6
npm dedupe&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then it worked.&lt;/p&gt;
&lt;h3 id=&quot;Cannot-read-property-vue-of-undefined&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Cannot-read-property-vue-of-undefined&quot; aria-label=&quot;Cannot read property vue of undefined permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Cannot read property &apos;vue&apos; of undefined&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/vuejs/vue-loader/issues/1177&quot;&gt;https://github.com/vuejs/vue-loader/issues/1177&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Upgraded this because more than &lt;a href=&quot;mailto:vue-loader@14.2.2&quot;&gt;vue-loader@14.2.2&lt;/a&gt; is required to webapck 4.&lt;/p&gt;
&lt;h3 id=&quot;Cannot-read-property-context-of-undefined&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Cannot-read-property-context-of-undefined&quot; aria-label=&quot;Cannot read property context of undefined permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Cannot read property &apos;context&apos; of undefined&lt;/h3&gt;
&lt;p&gt;Now they want me to update the css-loader&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/50418896/webpack-4-css-modules-typeerror-cannot-read-property-context-of-undefined&quot;&gt;https://stackoverflow.com/questions/50418896/webpack-4-css-modules-typeerror-cannot-read-property-context-of-undefined&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The answer says that &lt;strong&gt;^0.28.11&lt;/strong&gt; is fine, but if you can build it with no problems, then the newer version is better, so I upgraded to 1.xx.&lt;/p&gt;
&lt;h3 id=&quot;WARNING-erupts-on-build&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#WARNING-erupts-on-build&quot; aria-label=&quot;WARNING erupts on build permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;WARNING erupts on build.&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;No parser and no filepath given, using &apos;babel&apos; the parser now but this will throw an error in the future. inferred.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I started to see this kind of WARNING spewing out during the build, so I looked it up and this is what I found&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rails/webpacker/issues/1734&quot;&gt;https://github.com/rails/webpacker/issues/1734&lt;/a&gt; ...&lt;/p&gt;
&lt;p&gt;I was told to give it to vue-loader v15. Though I couldn&apos;t get rid of the feeling that &quot;I just updated it to 14 just now&quot;.
However, there was no way so I upgraded to a new version.&lt;/p&gt;
&lt;p&gt;Click here to see how to upgrade.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://vue-loader.vuejs.org/migrating.html#notable-breaking-changes&quot;&gt;https://vue-loader.vuejs.org/migrating.html#notable-breaking-changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In my project, this is how I add plug-ins and&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// webpack.config.js&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; VueLoaderPlugin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;vue-loader/lib/plugin&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;VueLoaderPlugin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I did the pug and css settings as described in the documentation and I was able to build it with no problems.&lt;/p&gt;
&lt;h2 id=&quot;Summary&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Summary&quot; aria-label=&quot;Summary permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Summary&lt;/h2&gt;
&lt;p&gt;I have introduced the errors and its solutions in the upgrade to webpack4.
I wrote a quick note about giving it to v15, but I was usually stuck in it for a couple of hours.&lt;/p&gt;
&lt;p&gt;The whole time I assumed that &quot;I can&apos;t parse the pug!&quot;
However, it took me a while to realize that I hadn&apos;t been able to load the stylus, which was a horrible mistake.
I wasted a lot of time.&lt;/p&gt;
&lt;p&gt;When the version up is skipped, it becomes hard to skip it after. If other libraries are not supported, or it will need version-up like domino.
It&apos;s not easy. If you focus on only development, version up and maintenance of the environment will be neglected.
If you can create a team or system to be able to upgrade immediately when one person notices, it would be better to manage the project in a peaceful way.&lt;/p&gt;
&lt;p&gt;Well then. Thank you for reading.&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/02/20190217_migration-to-webpack4/thumbnail.png</thumbnailUrl><language>en</language></item><item><title><![CDATA[webpack2からwebpack4バージョンアップで出たエラーとその解決法まとめ]]></title><description><![CDATA[今回たまたまvueを使ったプロジェクトでwebpack2からwebpack4からバージョンをあげる機会があったので
webpackをバージョンアップする際に出たエラーとその解決策をまとめてみます。 webpackをあげてみて 最初に感想を書いておくと作業着手前は、package…]]></description><link>https://ver-1-0.net/blog/2019/02/17/migration-to-webpack4</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/02/17/migration-to-webpack4</guid><pubDate>Sun, 17 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回たまたまvueを使ったプロジェクトでwebpack2からwebpack4からバージョンをあげる機会があったので
webpackをバージョンアップする際に出たエラーとその解決策をまとめてみます。&lt;/p&gt;
&lt;h2 id=&quot;webpackをあげてみて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#webpack%E3%82%92%E3%81%82%E3%81%92%E3%81%A6%E3%81%BF%E3%81%A6&quot; aria-label=&quot;webpackをあげてみて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;webpackをあげてみて&lt;/h2&gt;
&lt;p&gt;最初に感想を書いておくと作業着手前は、package.jsonのバージョンを書き換えてぺろっと
npm installしていくつかエラー解消したらいけるかなと思っていたんですがそんなに甘くなかったですね。&lt;/p&gt;
&lt;p&gt;babel-loaderのバージョンが6系ではwebpack4で使えなかったのでbabel-loaderを勢い余って
v8系にしたらbabelのバージョンも7にしなきゃいけないなってなってwebpack&amp;#x26;babelのバージョンアップ
をおこなったのでまあまあな仕事になりました。&lt;/p&gt;
&lt;p&gt;他にもfile-loaderやvue-loaderなどのバージョンも4系と合わなかったのでそれらも
ガバッとバージョンアップして見事な芋づる式バージョンアップとなりました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;移行にあたってまずやったこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%A7%BB%E8%A1%8C%E3%81%AB%E3%81%82%E3%81%9F%E3%81%A3%E3%81%A6%E3%81%BE%E3%81%9A%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;移行にあたってまずやったこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;移行にあたってまずやったこと&lt;/h2&gt;
&lt;p&gt; 
バージョンアップにあたっては基本的に先にwebpackのバージョンを4にあげてあとは
ビルドが成功するまでひたすらエラーを解消していくスタイルで計画していたのですが、
まぁそれだと効率の悪さは否めないので先におとなしく公式のドキュメントを参照しました。&lt;/p&gt;
&lt;p&gt;ここにwebpack3 -&gt; webpack4の移行手順の説明みたいなものがあります。
&lt;a href=&quot;https://webpack.js.org/migrate/4/&quot;&gt;https://webpack.js.org/migrate/4/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基本方針としては遭遇したエラーを順番に倒していく方式なのですがここのドキュメントでわかることはあらかじめ潰しておきました。&lt;/p&gt;
&lt;h3 id=&quot;modeオプションの付加&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#mode%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BB%98%E5%8A%A0&quot; aria-label=&quot;modeオプションの付加 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;modeオプションの付加&lt;/h3&gt;
&lt;p&gt;webpack4ではモードオプションを設定できて、productionモードでビルドするとデフォルトで
uglifyなどをやってくれるそうです。詳しい設定の仕方や挙動の違いはこちらを参照するのが良いと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webpack.js.org/concepts/mode/&quot;&gt;https://webpack.js.org/concepts/mode/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;モードオプションはwebpack実行時に-mオプションでモードをを指定できたり、こういう感じで
書くことでwebpackのmodeごとに振る舞いをかき分けたりすることができるそうです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;env&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; argv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;argv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mode &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;development&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;devtool &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;source-map&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;argv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mode &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;production&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//...&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; config&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;webpack-cliのセットアップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#webpack-cli%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97&quot; aria-label=&quot;webpack cliのセットアップ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;webpack-cliのセットアップ&lt;/h3&gt;
&lt;p&gt;webpack4からcliがwebpack-cliとして別パッケージにくくり出されたそうなので
webpack-cliもインストールしておきました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-D&lt;/span&gt; webpack-cli&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;不要なプラグインの削除&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%B8%8D%E8%A6%81%E3%81%AA%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E5%89%8A%E9%99%A4&quot; aria-label=&quot;不要なプラグインの削除 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;不要なプラグインの削除&lt;/h3&gt;
&lt;p&gt;以下の4つのプラグインはproductionモードのデフォルト&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* NoEmitOnErrorsPlugin
* ModuleConcatenationPlugin
* DefinePlugin
* UglifyJsPlugn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これはdevelopmentモードのデフォルト&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* NamedModulesPlugin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;次の二つはdeprecated and removed&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* NoErrorsPlugin
* NewWatchingPlugin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;なので、こららのプラグインがプロジェクトのwebpack.config.jsに含まれる場合は
削除します。&lt;/p&gt;
&lt;h2 id=&quot;バージョンアップ後に出たエラーとその対策&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E5%BE%8C%E3%81%AB%E5%87%BA%E3%81%9F%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A8%E3%81%9D%E3%81%AE%E5%AF%BE%E7%AD%96&quot; aria-label=&quot;バージョンアップ後に出たエラーとその対策 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;バージョンアップ後に出たエラーとその対策&lt;/h2&gt;
&lt;p&gt;先に書いたように移行手順を読んで先に潰せるものは潰しておいて、あとは未知のエラー
と戦っていく作業でした。&lt;/p&gt;
&lt;h3 id=&quot;Cannot-read-property-fileLoader-of-undefined&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Cannot-read-property-fileLoader-of-undefined&quot; aria-label=&quot;Cannot read property fileLoader of undefined permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Cannot read property &apos;fileLoader&apos; of undefined&lt;/h3&gt;
&lt;p&gt;単純にfile-loaderのバージョンが古かったようです。
leafletあたりからエラー吐かれていました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/tcoopman/image-webpack-loader/issues/153&quot;&gt;https://github.com/tcoopman/image-webpack-loader/issues/153&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; file-loader@&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;最新バージョン&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;TypeError-Cannot-read-property-stylus-of-undefined&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#TypeError-Cannot-read-property-stylus-of-undefined&quot; aria-label=&quot;TypeError Cannot read property stylus of undefined permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TypeError: Cannot read property ‘stylus’ of undefined&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/shama/stylus-loader/issues/189&quot;&gt;https://github.com/shama/stylus-loader/issues/189&lt;/a&gt;
&lt;a href=&quot;https://github.com/shama/stylus-loader/pull/190/files&quot;&gt;https://github.com/shama/stylus-loader/pull/190/files&lt;/a&gt;&lt;Paste&gt;&lt;/p&gt;
&lt;p&gt;stylus-loaderのマイナーバージョンが1小さいだけでエラーになっていました。。
これもバージョンアップで回避です。3.0.2にあげたら解消しました。&lt;/p&gt;
&lt;h3 id=&quot;dynamic-importでパースエラー&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dynamic-import%E3%81%A7%E3%83%91%E3%83%BC%E3%82%B9%E3%82%A8%E3%83%A9%E3%83%BC&quot; aria-label=&quot;dynamic importでパースエラー permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;dynamic importでパースエラー&lt;/h3&gt;
&lt;p&gt;ビルドしたところ&lt;a href=&quot;https://qiita.com/tonkotsuboy_com/items/f672de5fdd402be6f065&quot;&gt;dynamic import&lt;/a&gt;しているところでパースエラーとなっていました。
プロジェクトではこの&lt;strong&gt;preset-stage-2&lt;/strong&gt;を使っていて移行のために下記ドキュメントの通り
設定を行なっていたので大丈夫なはずなのですが、それでもだめでした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/babel/babel/blob/master/packages/babel-preset-stage-2/README.md&quot;&gt;https://github.com/babel/babel/blob/master/packages/babel-preset-stage-2/README.md&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;解決策はここにあって、&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/webpack/webpack/issues/8656&quot;&gt;https://github.com/webpack/webpack/issues/8656&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;wepback4.28にダウングレードしたら動いたという書き込みもあるのですが
それは最終手段で他に良い方法があればという感じで読み進めるとwebpackがacorn@^6.05に依存している
ようなのでインストールが必要なようでした。&lt;/p&gt;
&lt;p&gt;さらに, webpackがacorn, acorn-dynamic-importに依存しており&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;npm dedupe&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;をしないと
それぞれ同じバージョンのものを参照しないのでエラーとなっているようでした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/webpack/webpack/issues/8656#issuecomment-456010969&quot;&gt;https://github.com/webpack/webpack/issues/8656#issuecomment-456010969&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;とりあえず、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-D&lt;/span&gt; acorn@^6.0.6
&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; dedupe&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;したら動くようになりました。&lt;/p&gt;
&lt;h3 id=&quot;Cannot-read-property-vue-of-undefined&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Cannot-read-property-vue-of-undefined&quot; aria-label=&quot;Cannot read property vue of undefined permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Cannot read property &apos;vue&apos; of undefined&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/vuejs/vue-loader/issues/1177&quot;&gt;https://github.com/vuejs/vue-loader/issues/1177&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;webpack4系は&lt;a href=&quot;mailto:vue-loader@14.2.2&quot;&gt;vue-loader@14.2.2&lt;/a&gt; 以上じゃないとだめだそうなのでこちらもバージョンアップ&lt;/p&gt;
&lt;h3 id=&quot;Cannot-read-property-context-of-undefined&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Cannot-read-property-context-of-undefined&quot; aria-label=&quot;Cannot read property context of undefined permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Cannot read property &apos;context&apos; of undefined&lt;/h3&gt;
&lt;p&gt;今度はcss-loaderをアップデートせよとのこと&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/50418896/webpack-4-css-modules-typeerror-cannot-read-property-context-of-undefined&quot;&gt;https://stackoverflow.com/questions/50418896/webpack-4-css-modules-typeerror-cannot-read-property-context-of-undefined&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;回答では &lt;strong&gt;^0.28.11&lt;/strong&gt;で良いと書いていますが問題なくビルドできればバージョン新しい方がよいので
1系を入れました。&lt;/p&gt;
&lt;h3 id=&quot;ビルド時にwarningが噴出&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%93%E3%83%AB%E3%83%89%E6%99%82%E3%81%ABwarning%E3%81%8C%E5%99%B4%E5%87%BA&quot; aria-label=&quot;ビルド時にwarningが噴出 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ビルド時にwarningが噴出&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;No parser and no filepath given, using &apos;babel&apos; the parser now but this will throw an error in the future. Please specify a parser or a filepath so one can be inferred.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ビルド時にこんなwarningが噴出されはじめたので調べるとこんなのが出てきたので&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rails/webpacker/issues/1734&quot;&gt;https://github.com/rails/webpacker/issues/1734&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;vue-loader v15にあげよとのこと。「えっさっき14にあげたばかり」との気持ちはぬぐいきれませんでしたが
しかたなくバージョンアップ。&lt;/p&gt;
&lt;p&gt;バージョンアップの手順はこちら&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://vue-loader.vuejs.org/migrating.html#notable-breaking-changes&quot;&gt;https://vue-loader.vuejs.org/migrating.html#notable-breaking-changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;僕のプロジェクトでは、こうやってプラグインを足すのと&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// webpack.config.js&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; VueLoaderPlugin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;vue-loader/lib/plugin&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;VueLoaderPlugin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;pugとcssの設定をドキュメントの通りにやったら問題なくビルドできるようになりました。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上webpack4へのバージョンアップで出たエラーとその解決策を紹介しました。vue-loaderを
v15にあげるるのはさらっと書きましたが普通に二、三時間くらいはまりました。ずっと「pugがパースできない！！！」と
思い込んでいたのですがよくよくみるとstylusが読み込めていなかったというしょうもないミスに気づくのに時間がかかり
だいぶ無駄な時間を消費しました。&lt;/p&gt;
&lt;p&gt;バージョンアップさぼっているとさぼっているだけやっぱり大変になりますね。他のライブラリが対応していないとか芋づる式バージョンアップになると
なかなかしんどいです。開発に一生懸命になるとバージョンアップとか環境整備とかがおざなりになって負債になるので、複数人が気付いた時にこまめにバージョンアップ
するっていうようにした方が平和なプロジェクト運営できそうなきがしますね。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/02/20190217_migration-to-webpack4/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Go言語の文法を勉強して印象にのこったところまとめ。その2。]]></title><description><![CDATA[前回の記事でGo…]]></description><link>https://ver-1-0.net/blog/2019/02/14/get-start-go-2</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/02/14/get-start-go-2</guid><pubDate>Thu, 14 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前回の記事でGo言語の変数宣言やメソッド宣言などの部分を紹介しましたが、
今回はその後半で...としようと思ったのですが、以外と量が多かったので今回は下記二つに絞ってまとめていきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;構造体&lt;/li&gt;
&lt;li&gt;インターフェース&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前回の記事はこちらです。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2019/01/21/get-start-go&quot;&gt;Go言語の文法を勉強して印象にのこったところまとめ。&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;勉強に使用した本&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8B%89%E5%BC%B7%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E6%9C%AC&quot; aria-label=&quot;勉強に使用した本 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;勉強に使用した本&lt;/h2&gt;
&lt;p&gt;文法の勉強に使用した本は前回と一緒のこちらです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2CA6kaU&quot;&gt;改訂2版 基礎からわかる Go言語&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E6%94%B9%E8%A8%822%E7%89%88-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8B-Go%E8%A8%80%E8%AA%9E-%E5%8F%A4%E5%B7%9D-%E6%98%87/dp/4863541783/ref=as_li_ss_il?ie=UTF8&amp;qid=1548033254&amp;sr=8-1&amp;keywords=%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8BGo&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=e8ed2f069df15a718c5cb35e0bc33965&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4863541783&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4863541783&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;前回も書きましたが、これ一冊でバランスよくGoの文法がまとめられているので 一回通しでよんだ後に、簡単なコマンドベースのコードを書きつつ 不明なところを再度読み直せば結構かけるようになる気がします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id=&quot;文法のまとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%96%87%E6%B3%95%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;文法のまとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;文法のまとめ&lt;/h2&gt;
&lt;p&gt;ということで早速、構造体、インターフェースなど前回さわれなかったところをまとめていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id=&quot;構造体&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%A7%8B%E9%80%A0%E4%BD%93&quot; aria-label=&quot;構造体 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;構造体&lt;/h3&gt;
&lt;p&gt;構造体はCやVBAを触った時にちょっと触ったので親しみがありますが、はるか昔すぎてなんのことやらわかりません。
rubyのハッシュのようなものかなと思っているのですが、構造体とはフィールドの集合でそれぞれに型があるものなのだそうです。&lt;/p&gt;
&lt;p&gt;まぁ型のあるハッシュとざっくり理解しています。どうやら構造体にもスコープの概念が適用されフィールドの先頭1文字目を大文字にすると
フィールドが外部に公開され外部パッケージからでもアクセスできるようになっているようです。&lt;/p&gt;
&lt;p&gt;構造体の書式は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;// フィールド宣言&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;で、構造体に名前をつける場合は、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; MyData &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	a &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
	b bye
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにtypeキーワードを用いて名前をつけていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;特殊なフィールド&lt;/h4&gt;
&lt;p&gt;また、構造体にはいくつか特殊なフィールドを宣言することができて、そのひとつに&lt;strong&gt;ブランクフィールド&lt;/strong&gt;があります。
メモリ領域には確保が必要だけどフィールドにアクセスすることはないということを明示的に示すために使用するそうです。
通常構造体のフィールドは一意の名前をつける必要がありますが、ブランクフィールドの場合は一つの構造体に複数定義することが
可能です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  b1 &lt;span class=&quot;token builtin&quot;&gt;byte&lt;/span&gt;
  &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// ブランクフィールド&lt;/span&gt;
  b2 &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;byte&lt;/span&gt;
  &lt;span class=&quot;token boolean&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// ブランクフィールド&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ブランクフィールドはちょっと使いどころがわからないです。本の後ろの方に逆引き的なサンプルがのっているので
もしかしたらそこで確認できるかもしれません。&lt;/p&gt;
&lt;p&gt;構造体には、他にも匿名フィールドと呼ばれるフィールドも宣言可能でフィールド名を指定せずに型名だけでフィールドを宣言
できます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// フィールド名はint&lt;/span&gt;
  uinit64  &lt;span class=&quot;token comment&quot;&gt;// フィールド名はuint64&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;byte&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// フィールド名はbyte&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;構造体の初期化&lt;/h4&gt;
&lt;p&gt;構造体の初期化の方法は3通りあり&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;構造体宣言後に書くフィールドに個別に値を代入して初期化&lt;/li&gt;
&lt;li&gt;構造体リテラルを使うのと同時にフィールド名と値をペアで与えて初期化&lt;/li&gt;
&lt;li&gt;構造体リテラルを使うのと同時フィールドの宣言順に値を記述して初期化&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;1.は説明する必要ないと思いますが、1の方法以外に2,3の初期化方法があり、&lt;/p&gt;
&lt;p&gt;2.のフィールド名と値をペアで与えて初期化するには次のようにします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Person &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	name &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
	age &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// フィールド名と値のペア&lt;/span&gt;
  p2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; Person&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;age&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Tom&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// 宣言順に値を渡す&lt;/span&gt;
  p3 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; Person&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Jane&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Person &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  name &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;
  age &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// フィールド名と値のペア&lt;/span&gt;
  p2 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; Person&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;age&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Tom&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// 宣言順に値を渡す&lt;/span&gt;
  p3 &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; Person&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Jane&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここの文を読み進めていて構造体初期化が複数行にわたった時の記法ちょっと気持ち悪いなと思いました。
構造体の初期化で複数行にわたる場合は最後の } をフィールドと同じ行にかかないといけないようです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// こうやって書かないとコンパイルエラーになる。。気持ち悪い&lt;/span&gt;
Person&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	age&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Tom&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ただ、さらに本を読み進めると最後にカンマをつければコンパイルエラーにならないそうでスッキリしました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// これならスッキリ&lt;/span&gt;
Person&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	age&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	name&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Tom&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;インターフェース&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9&quot; aria-label=&quot;インターフェース permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;インターフェース&lt;/h3&gt;
&lt;p&gt;インターフェースはわかるかたも多いかもしれませんが、「振る舞い」を規定する関数みたいなものです。中身のロジックを持たずに外面だけを定義します。
インターフェースではロジックを書かないので関数の名前とパラメータ（引数）・戻り値だけを定義します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  関数名（パラメータリスト） 戻り値の型
  関数名（パラメータリスト） 戻り値の型
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// type宣言を使って名前をつけて定義する場合&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; インターフェース型名 &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  関数名（パラメータリスト） 戻り値の型
  関数名（パラメータリスト） 戻り値の型
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;予備知識として関数を一つしかもたないインターフェースの場合インターフェース名は「関数名 + er」とするのが
習わしらしいです。例をそえておきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; Reader &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;Read&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;p &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;n &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; err &lt;span class=&quot;token builtin&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;自動的に実装されるインターフェース&lt;/h4&gt;
&lt;p&gt;Goのインターフェースは自動的に実装されるそうで、「インターフェース」と「それを実装した型」との関係性を
明示的に書く必要がないそうです。&lt;/p&gt;
&lt;p&gt;Javaとかだと&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;java&quot;&gt;&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Sample&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;インターフェース&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;というように型に対してどのインターフェースを実装するかを明示的に書く必要があるのですが、
Goではこれが必要なく既存の方に&lt;strong&gt;後付け&lt;/strong&gt;でインターフェースを実装することができるようです。&lt;/p&gt;
&lt;h4&gt;空インターフェース&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;空インターフェースとは、「インターフェースに実装すべき関数がない」 =&gt; 「すべての型が空インターフェースを実装している」
ということになるので空インターフェースにはどんな値も代入可能です。なんでもできます。&lt;/p&gt;
&lt;h4&gt;型変換について&lt;/h4&gt;
&lt;p&gt;Go言語では型アサーションという機能がありレシーバーの後ろに「.」と丸括弧で変換先を記述することで型変換を行ったり、
型変換可能かどうかを確認することができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// 空インターフェースの変数の値をstring型に変換&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; i &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;test&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; s &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;型アサーションが可能かどうかを調べたいだけの時は、型アサーションから返ってくる二番目の論理値を使います。
型アサーションから二番目の値を取得する場合は、型変換できなくても失敗しないので型変換可能かどうかをチェックできます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; s &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;test&quot;&lt;/span&gt;
s2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ok &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;dummy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ok&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;型switch文&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%9E%8Bswitch%E6%96%87&quot; aria-label=&quot;型switch文 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;型switch文&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;switch&lt;/span&gt; 値&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; 型&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// type が型1の時ここが実行される。&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; 型&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// type が型2の時ここが実行される。&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// type が上以外の型の場合&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;型switch文です！ついに来ました！個人的にこれだいぶ便利そうな感じするのですが実際どうなのでしょうか？&lt;/p&gt;
&lt;p&gt;型switch文は単純に型ごとに処理を分けられるのですが、その結果を変数に代入することもできるので
変数の型を気にしない実装ができそうな気がしています。多用して簡単に分岐作っちゃうのもよくないとは思うのですが
どうしてもという時に役たちそうです。&lt;/p&gt;
&lt;p&gt;コードも書いていない状態でフライング気味ですが、ぜひ使ってみたい機能の一つです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;当初記事二本でまとめ切ろうと思いましたが、無理でした。もう一、二本で完結させたいです。&lt;/p&gt;
&lt;p&gt;文法をまとめている間にどんどん時はすぎていくので早くコード書けという話なのですが、まだ書けていないので
とりあえず記事にしておきます。文法をなんとなくさらったらコマンドベースで動くものでも作ってみると良さそうですね。
最終的にはGoのWebフレームワーク使ってAPI開発などできればというところですね。&lt;/p&gt;
&lt;p&gt;ペースはゆったりですがじわじわ進めていければ。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/02/20190214_get-start-go-2/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[リモートワークするエンジニアがデスク周りを充実させるために購入したものまとめ]]></title><description><![CDATA[私はフリーランスのエンジニアとして、昨年から家で仕事することが増えクライアントさん
の元で仕事をするとき以外はほとんど自宅の机でPC作業したり、コード書いたりしています。 （というか別に休日もPC…]]></description><link>https://ver-1-0.net/blog/2019/02/04/summary-of-gadget-on-the-desk</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/02/04/summary-of-gadget-on-the-desk</guid><pubDate>Mon, 04 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;私はフリーランスのエンジニアとして、昨年から家で仕事することが増えクライアントさん
の元で仕事をするとき以外はほとんど自宅の机でPC作業したり、コード書いたりしています。&lt;/p&gt;
&lt;p&gt;（というか別に休日もPCの前にいることが多いです。）&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2018/10/14/full-remote-engineer&quot;&gt;フルリモートエンジニアになったので、これまでの経緯をまとめてみた。&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そういうわけでデスクで過ごす時間が生活のほとんどなのでそこで使うPCデスク、椅子、ディスプレイ等々充実させたい気持ちが強く昨年からぼちぼち一年くらいかけてデスク周りを充実させていってます。
デスク周り改善プロジェクトで割とものがそろってきたのでここらへんで一旦購入したものレビュー感想というのをまとめておこうかなと思います。&lt;/p&gt;
&lt;h2 id=&quot;L字型デスク&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#L%E5%AD%97%E5%9E%8B%E3%83%87%E3%82%B9%E3%82%AF&quot; aria-label=&quot;L字型デスク permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;L字型デスク&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B07HHMH1YY/ref=as_li_ss_il?ie=UTF8&amp;psc=1&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=c90beb25090722d537aa2570259869dd&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B07HHMH1YY&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B07HHMH1YY&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2MRWE05&quot;&gt;選べる4カラー ワークデスク L字型 3段 サイドチェスト 約W120×D145×H73.5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;見ての通りL字型デスクです。昔からL字デスクというか広い作業スペースへの憧れがあったので一旦手が出せる範囲のやつを買ってみました。&lt;/p&gt;
&lt;p&gt;作業スペースがでかくなったので割と快適なんですが、ちょっと無駄に場所とる感はありますね。一時避難の書類や書籍はデスクのサイズを満たすまで膨張するので別にこんなにでかいのいらねぇんじゃないかなとは買って思いました笑。机自体は割と大きめで場所取ってるのですが、机下のスペースが使えて机下にちっちゃい本棚とか置けるのでそこはまぁいいかなという感じです。&lt;/p&gt;
&lt;h2 id=&quot;机上デスク--NEARPOW-改良版-折りたたみ式-ノートパソコンスタンド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%BA%E4%B8%8A%E3%83%87%E3%82%B9%E3%82%AF--NEARPOW-%E6%94%B9%E8%89%AF%E7%89%88-%E6%8A%98%E3%82%8A%E3%81%9F%E3%81%9F%E3%81%BF%E5%BC%8F-%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89&quot; aria-label=&quot;机上デスク  NEARPOW 改良版 折りたたみ式 ノートパソコンスタンド permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;机上デスク | NEARPOW 【改良版】 折りたたみ式 ノートパソコンスタンド&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/NEARPOW-%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89-%E3%83%99%E3%83%83%E3%83%89%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB-4%E3%81%A4%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E6%96%B9-%E4%B8%A1%E3%83%BB%E5%8F%B3%E3%83%BB%E5%B7%A6%E5%88%A9%E3%81%8D%E5%AF%BE%E5%BF%9C/dp/B0792VMWQX/ref=as_li_ss_il?s=aps&amp;ie=UTF8&amp;qid=1549467631&amp;sr=1-6-catcorr&amp;keywords=%E6%9C%BA%E4%B8%8A%E3%83%87%E3%82%B9%E3%82%AF+%E6%8A%98%E3%82%8A%E3%81%9F%E3%81%9F%E3%81%BF&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=4ba1e2b08671a1513449d2f264e61e81&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B0792VMWQX&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B0792VMWQX&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2SvxauD&quot;&gt;NEARPOW 【改良版】 折りたたみ式 ノートパソコンスタンド ベッドテーブル 4つ組み立て方 両・右・左利き対応 ローテーブル 机上台&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最近長時間座っているからか、肩が凝ったり腰が痛かったりでこの先ずっとエンジニアをやるにあたってすぐに限界が見えそうだったのでスタンディング作業を導入することにしました。スタンディングをするには電動昇降式のデスクが便利そうですが、L字デスクへの憧れがあったので&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L字デスク+机上デスク&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; 
という構成でスタンディングデスクを構築するようにしました。正直このデザインはあまり気に入ってないのですが、机上デスクとしては十分でソファと併用したりすると寝ながら作業できたりするので汎用性が高く機能面では結構満足しました。折りたたみ式なので使わないときはコンパクトにして机の下とかにしまって置けます。&lt;/p&gt;
&lt;h2 id=&quot;ディスプレイ--Acer-4K-モニターディスプレイ-ET322QKAbmiipx-315インチHDR&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4--Acer-4K-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-ET322QKAbmiipx-315%E3%82%A4%E3%83%B3%E3%83%81HDR&quot; aria-label=&quot;ディスプレイ  Acer 4K モニターディスプレイ ET322QKAbmiipx 315インチHDR permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ディスプレイ | Acer 4K モニターディスプレイ ET322QKAbmiipx 31.5インチ/HDR&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B07BRG12KN/ref=as_li_ss_il?ie=UTF8&amp;psc=1&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=69157b1fc753d14ff75700375a1ebb1d&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B07BRG12KN&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B07BRG12KN&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2DfGGsb&quot;&gt;Acer 4K モニターディスプレイ ET322QKAbmiipx 31.5インチ/HDR Ready対応/VA/4K/16:9/4ms/DisplayPort ・HDMI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;31.5インチなのでそれなりに大きめです。デスクの奥行きがないとちょっと近すぎちゃうかなぁというのもあったのですが、普段作業する時にはサイズに関わらず、ディスプレイ１つで作業するのが定着しているのである程度しっかりしたサイズのディスプレイを選びました。&lt;/p&gt;
&lt;p&gt;あまり使う機会なさそうなんですが、HDMIの端子が二つあり画面を２つに分割してそれぞれの映像を表示する機能があるっぽいです。テレビチューナーにつなげれば4K放送も見れるので、テレビみながら出演者の情報を調べたりできるみたいです。&lt;/p&gt;
&lt;h2 id=&quot;モニターアーム--エルゴトロン-LX-デスクマウント-モニターアーム-長身ポール-45-295-026&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0--%E3%82%A8%E3%83%AB%E3%82%B4%E3%83%88%E3%83%AD%E3%83%B3-LX-%E3%83%87%E3%82%B9%E3%82%AF%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0-%E9%95%B7%E8%BA%AB%E3%83%9D%E3%83%BC%E3%83%AB-45-295-026&quot; aria-label=&quot;モニターアーム  エルゴトロン LX デスクマウント モニターアーム 長身ポール 45 295 026 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;モニターアーム | エルゴトロン LX デスクマウント モニターアーム 長身ポール 45-295-026&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B00689HXI4/ref=as_li_ss_il?ie=UTF8&amp;psc=1&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=52f9002832685ea2dd95d7159bb7faea&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00689HXI4&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B00689HXI4&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2DbHy0S&quot;&gt;エルゴトロン LX デスクマウント モニターアーム 長身ポール 45-295-026&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;モニターアームはエレゴトロンです。amazonで購入して取り付けてみましたがやはり作りがしっかりしてて32インチのディスプレイでもなんなく空間に固定できます。
電動の昇降式スタンディングデスクは諦めたので、モニターアームと机上デスクを駆使してスタンディング作業を実現しています。
恥ずかしながら取り付けの際、ネジを締めるとアームの固定力が上がるのを知らずディスプレイを取り付けてスタンディングの位置までモニターを上がると自然と落ちてきてしまう現象にテンションだだ下がりしてましたがしっかりとネジを締めれば、32インチのディスプレイでも難なく固定されます。&lt;/p&gt;
&lt;h2 id=&quot;トラックパッド--Apple-Magic-Trackpad-2-MJ2R2JA&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%91%E3%83%83%E3%83%89--Apple-Magic-Trackpad-2-MJ2R2JA&quot; aria-label=&quot;トラックパッド  Apple Magic Trackpad 2 MJ2R2JA permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;トラックパッド | Apple Magic Trackpad 2 MJ2R2J/A&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Apple-Magic-Trackpad-2-MJ2R2J/dp/B016ZE7K8O/ref=as_li_ss_il?s=computers&amp;ie=UTF8&amp;qid=1549468769&amp;sr=1-5&amp;keywords=mac+%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%83%E3%83%89&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=02c7a6a76b6c8f2a649cc355d31cf4f5&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B016ZE7K8O&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B016ZE7K8O&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2GaicER&quot;&gt;Apple Magic Trackpad 2 MJ2R2J/A&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;純正のやつです。家にいる時はMacbookを閉じて作業したい+トラックパッドないと生きていけない体になっているので購入しました。Macbookのトラックパッドより
クリック時のストロークが深いきがしていて（気のせい？）押し込むと結構気持ちいいです。&lt;/p&gt;
&lt;h2 id=&quot;キーボード--PFU-Happy-Hacking-Keyboard-Professional-BT-英語配列白-PD-KB600W&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89--PFU-Happy-Hacking-Keyboard-Professional-BT-%E8%8B%B1%E8%AA%9E%E9%85%8D%E5%88%97%E7%99%BD-PD-KB600W&quot; aria-label=&quot;キーボード  PFU Happy Hacking Keyboard Professional BT 英語配列白 PD KB600W permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;キーボード | PFU Happy Hacking Keyboard Professional BT 英語配列/白 PD-KB600W&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/PFU-Hacking-Keyboard-Professional-PD-KB600W/dp/B073F45RL5/ref=as_li_ss_il?ie=UTF8&amp;qid=1549468033&amp;sr=8-11&amp;keywords=HHKB&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=3a41ed3adb024e3b29c576c5bf10445b&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B073F45RL5&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B073F45RL5&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2Svq75e&quot;&gt;PFU Happy Hacking Keyboard Professional BT 英語配列/白 PD-KB600W&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;キーボードはHHKBのbluetooth対応モデルです。
ワイヤレスが良くてこれを選んだんですが、現状電池を買ったり捨てるのが面倒でUSBで繋ぎながら使ってます。Bluetoothの必要ないですね。&lt;/p&gt;
&lt;p&gt;周りだと黒の無刻印・英字配列が人気な気がするのですが色は白の、刻印有りを選びました。デスク周りが割と黒が多いので中和のためっていうのと白は白でかわいさがあるので、白にしてみました。&lt;/p&gt;
&lt;h2 id=&quot;Macbookスタンド--Twelve-South-BookArc-アルミニウム-for-MacBook-v2&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Macbook%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89--Twelve-South-BookArc-%E3%82%A2%E3%83%AB%E3%83%9F%E3%83%8B%E3%82%A6%E3%83%A0-for-MacBook-v2&quot; aria-label=&quot;Macbookスタンド  Twelve South BookArc アルミニウム for MacBook v2 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Macbookスタンド | Twelve South BookArc アルミニウム for MacBook v2&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%80%90%E6%97%A5%E6%9C%AC%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E5%93%81%E3%80%91Twelve-South-%E3%82%AF%E3%83%A9%E3%83%A0%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89%E7%94%A8-MacBook%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89-TWS-ST-000037/dp/B071RBFLGY/ref=as_li_ss_il?s=computers&amp;ie=UTF8&amp;qid=1549469857&amp;sr=1-16&amp;keywords=mac+stand&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=b1d651d8bce13b9b5924822987b8008c&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B071RBFLGY&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B071RBFLGY&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2GqyybD&quot;&gt;【日本正規代理店品】Twelve South BookArc アルミニウム for MacBook v2 クラムシェルモード用 MacBookスタンド TWS-ST-000037&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Apple Storeで売っているやつです。先にもかいたように家では基本MacBookを閉じて使うので購入しました。単純に縦置きすると省スペースになって机が広く使えます。&lt;/p&gt;
&lt;h2 id=&quot;Amazon-Echo--Echo-Dot-第3世代-Newモデル---スマートスピーカー-with-Alexaチャコール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Amazon-Echo--Echo-Dot-%E7%AC%AC3%E4%B8%96%E4%BB%A3-New%E3%83%A2%E3%83%87%E3%83%AB---%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC-with-Alexa%E3%83%81%E3%83%A3%E3%82%B3%E3%83%BC%E3%83%AB&quot; aria-label=&quot;Amazon Echo  Echo Dot 第3世代 Newモデル   スマートスピーカー with Alexaチャコール permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Amazon Echo | Echo Dot 第3世代 (Newモデル) - スマートスピーカー with Alexa、チャコール&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Amazon-Echo-Dot-%E3%82%A8%E3%82%B3%E3%83%BC%E3%83%89%E3%83%83%E3%83%88-New%E3%83%A2%E3%83%87%E3%83%AB---%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC-%E3%83%81%E3%83%A3%E3%82%B3%E3%83%BC%E3%83%AB/dp/B0792PG3S9/ref=as_li_ss_il?_encoding=UTF8&amp;pd_rd_i=B0792PG3S9&amp;pd_rd_r=7022b8c0-2a29-11e9-87d2-296b6d8dd993&amp;pd_rd_w=wTlom&amp;pd_rd_wg=Eb322&amp;pf_rd_p=546a854e-3ca8-49c6-8e2f-dc88f5c2740e&amp;pf_rd_r=T6MZVVJN5G73EBZJD0A6&amp;psc=1&amp;refRID=T6MZVVJN5G73EBZJD0A6&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=e1aae8f774e605e4e6ac76025932ee7a&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B0792PG3S9&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B0792PG3S9&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2SvmaNP&quot;&gt;Echo Dot 第3世代 (Newモデル) - スマートスピーカー with Alexa、チャコール&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらは引っ越し祝いに頂いたスマートスピーカーです。
スマートスピーカー対応の照明とかと合わせれば「アレクサ、電気消して」で電気を消せるそうです。照明もechoも家にあるのでこれは試せるのですが、設定するタイミングを逃し続けて今に至るので、echoは料理やインスタントを作る時の高性能タイマーとして活躍してます。声でタイマーセットできるのが地味に便利なので他のものも声で操作できると便利なんだろうなぁと類推してます。&lt;/p&gt;
&lt;h2 id=&quot;ポモドーロタイマー&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9D%E3%83%A2%E3%83%89%E3%83%BC%E3%83%AD%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC&quot; aria-label=&quot;ポモドーロタイマー permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ポモドーロタイマー&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/candyfouse-%E3%81%8B%E3%82%8F%E3%81%84%E3%81%84-%E3%82%AD%E3%83%83%E3%83%81%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC-%E3%83%88%E3%83%9E%E3%83%88%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC-1-60%E5%88%86-360%E5%BA%A6/dp/B06X9T9VK1/ref=as_li_ss_il?ie=UTF8&amp;qid=1549469479&amp;sr=8-4&amp;keywords=%E3%83%9D%E3%83%A2%E3%83%89%E3%83%BC%E3%83%AD%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=edd373fe5bf11e6a1877ba4426ea943a&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B06X9T9VK1&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B06X9T9VK1&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2MTgojV&quot;&gt;かわいい キッチンタイマー　トマトタイマー　1~60分 360度&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Amazonが出している高性能タイマーに機能面で劣るものの、レトロなビジュアルと真っ黒なデスクのアクセントとして役立っています。&lt;/p&gt;
&lt;h2 id=&quot;冬用スリッパ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%86%AC%E7%94%A8%E3%82%B9%E3%83%AA%E3%83%83%E3%83%91&quot; aria-label=&quot;冬用スリッパ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;冬用スリッパ&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B07JJSSS1B/ref=as_li_ss_il?ie=UTF8&amp;psc=1&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=64f99bf7ed32f499288767bf00215988&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B07JJSSS1B&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B07JJSSS1B&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2MRnplo&quot;&gt;もこもこ 冬用 スリッパ ルームシューズ 室内 メンズ レディース ふわふわ 洗える 4カラー &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;別にデスク関係ないんですけど、冬場は足元ひえるし靴下履くと洗濯もの増えるんでこれ履きながら作業してます。スリッパを裸足で履いてるとそれなりに蒸れるので、二足買って交互に使い回すと良さげです。
洗濯もネットに入れて洗濯機に投げるだけで良くて結構楽です。履き心地は馴染む前はちょっと硬いかなぁという感じなんですがら、馴染んでくると割とリラックスして履けてもふもふしてあったかいです。&lt;/p&gt;
&lt;h2 id=&quot;パームレストリストレスト&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%91%E3%83%BC%E3%83%A0%E3%83%AC%E3%82%B9%E3%83%88%E3%83%AA%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E3%83%88&quot; aria-label=&quot;パームレストリストレスト permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;パームレスト・リストレスト&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B00OAZ7U8G/ref=as_li_ss_il?ie=UTF8&amp;psc=1&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=33eafa31685e86dee07e665980cbc97f&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00OAZ7U8G&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B00OAZ7U8G&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2SyJnyL&quot;&gt;サンワサプライ キーボード用低反発リストレスト(ブラック) 手首疲労軽減 ウレタン素材 TOK-MU3NBK&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B00OAZ7SB0/ref=as_li_ss_il?ie=UTF8&amp;psc=1&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=30cee98246bd7802e86fd41a641f1dfb&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00OAZ7SB0&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=B00OAZ7SB0&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2SvtadG&quot;&gt;サンワサプライ 低反発リストレストミニ(ブラック) TOK-MU2NBK&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;昔手首を痛めたことがあり、長時間キーボード叩いていると手首が痛くなってくるので購入しました。ちっちゃいほうをトラックパッド用、長い方をキーボード用にして使ってます。
手首がまっすぐない状態でキーボードが叩けると一番痛くならないので、こいつらを間に挟むことで手首の角度を調節できます。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;と、こんな感じで一年くらいかけてぼちぼちものを集めてきました。モニターアームと机上デスクでのスタンディングパターンは汎用性高く結構気に入っています。&lt;/p&gt;
&lt;p&gt;当初L字デスクを壁にくっつけてつかっていたのですがモニターアーム導入同時に壁にくっつけられなくなったので思い切ってデスクが部屋の真ん中に向くようにしてみたところモニターアームの
柔軟性を最大限にいかせるレイアウトになりました。スピーカーの裏側とかコードとかが丸見えになるというデメリットはあるのですが、モニターアームをがっつり動かしてソファ側にディスプレイを
向けるとソファに座りながら&lt;strong&gt;Netflix&lt;/strong&gt;とか&lt;strong&gt;Amazon Prime Video&lt;/strong&gt;を観れるようになりました。&lt;/p&gt;
&lt;p&gt;この中できになるものがあればぜひチェックしてみてください。
では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/02/20190204_summary-of-gadget-on-the-desk/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Go言語の文法を勉強して印象にのこったところまとめ。]]></title><description><![CDATA[今年はGo言語を新たにはじめてみたいなということで、
とりあえず文法をなめるために一冊本を買って勉強しました。 そのまとめとしてGoの文法をまとめていきたいと思います。
ただ単に全ての文法事項をリスト的にまとめてもおもしろくないので
個人的に感じたGo…]]></description><link>https://ver-1-0.net/blog/2019/01/21/get-start-go</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/01/21/get-start-go</guid><pubDate>Mon, 21 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今年はGo言語を新たにはじめてみたいなということで、
とりあえず文法をなめるために一冊本を買って勉強しました。&lt;/p&gt;
&lt;p&gt;そのまとめとしてGoの文法をまとめていきたいと思います。
ただ単に全ての文法事項をリスト的にまとめてもおもしろくないので
個人的に感じたGoはこういうところが特徴的なのね。というコメントをを書きつつまとめていければと思います。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;勉強に使用した本&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8B%89%E5%BC%B7%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E6%9C%AC&quot; aria-label=&quot;勉強に使用した本 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;勉強に使用した本&lt;/h2&gt;
&lt;p&gt;とりあえず入門としてGoの文法をさらいたかったので、
こちらの本を選択しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2CA6kaU&quot;&gt;改訂2版 基礎からわかる Go言語&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E6%94%B9%E8%A8%822%E7%89%88-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8B-Go%E8%A8%80%E8%AA%9E-%E5%8F%A4%E5%B7%9D-%E6%98%87/dp/4863541783/ref=as_li_ss_il?ie=UTF8&amp;qid=1548033254&amp;sr=8-1&amp;keywords=%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8BGo&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=e8ed2f069df15a718c5cb35e0bc33965&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4863541783&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4863541783&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;まだ一周読んだだけですが、
これ一冊でバランスよくGoの文法がまとめられているので
一回通しでよんだ後に、簡単なコマンドベースのコードを書きつつ
不明なところを再度読み直せば結構かけるようになる気がします。&lt;/p&gt;
&lt;h2 id=&quot;Go言語golangについて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Go%E8%A8%80%E8%AA%9Egolang%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;Go言語golangについて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Go言語(golang)について&lt;/h2&gt;
&lt;p&gt;ここらへんはすでに知っている人も多いのかもしれませんが一応まとめておくと、
Go言語は、Googleが2009年に公開したプログラミング言語で、まだ公開されてから
10年弱といったところのようです。この記事を書いている時点で最新版のバージョンは1.11
です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Go&lt;/strong&gt;の特徴としては、シンプルな構文でコンパイルが速い、並列処理をサポートしている点に
あります。C言語のようなインクルードファイルを採用しなかったのでCに比べてコンパイルが格段に
速いそうで、並列処理に関しては、&lt;strong&gt;ゴルーチン&lt;/strong&gt;と呼ばれる実行単位で複数の処理を同時かつ
効率的に実行することができます。&lt;/p&gt;
&lt;p&gt;他にも、継承がなかったりメソッドが複数の値を返却できたりと様々な特徴があるようです。&lt;/p&gt;
&lt;p&gt;まだ本を読んだだけで実際のコードは書いていないのですが、
Javaとかみたいなもっさりしたコードを書く必要はなさそうで、行末のセミコロンを省略できたり
if文の丸括弧がいらなかったりで読んでるだけでもシンプルに書けそうだなーという感じでした。&lt;/p&gt;
&lt;h2 id=&quot;文法のまとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%96%87%E6%B3%95%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;文法のまとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;文法のまとめ&lt;/h2&gt;
&lt;p&gt;ここからは実際にGo言語の文法に触れていきますが、
特徴をリスト化して書くのでなく個人的に印象に残ったところを書いています。
さーっと読むとGoってこんな感じなのねというのが雰囲気で伝われば良いのかなと
思っています。&lt;/p&gt;
&lt;p&gt;ちゃんと学びたいのであればリファレンスをみるなり本を買ったりして勉強した方が
よいので流し読みで雰囲気を感じとって頂ければ&lt;/p&gt;
&lt;h3 id=&quot;コンパイルと実行&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%A8%E5%AE%9F%E8%A1%8C&quot; aria-label=&quot;コンパイルと実行 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コンパイルと実行&lt;/h3&gt;
&lt;p&gt;Go言語の実行は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;go run hello.go&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;と書け、go runとするとコンパイルと実行を一発でやってくれるそうです。
Java, Cとかだとコンパイルと実行はは完全に別でやるので地味に便利です。&lt;/p&gt;
&lt;p&gt;コンパイルだけしたい場合は、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;go build hello.go&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;として実行したくなった場合はそのまま、ビルドされたファイルを叩くだけです。&lt;/p&gt;
&lt;h3 id=&quot;基本的な文法&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E6%96%87%E6%B3%95&quot; aria-label=&quot;基本的な文法 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;基本的な文法&lt;/h3&gt;
&lt;p&gt;Hello Worldを出力するプログラムは以下になります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;fmt&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hello World&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Go言語のソースファイルは必ずpackage文から始まり, mainパッケージのmain関数が
ファイル実行時に最初に呼び出されます。&lt;/p&gt;
&lt;p&gt;見てわかるように行末のセミコロンが不要です。Go言語ではセミコロンを書かなくてよくなったことで、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&apos;Hello World&apos;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このような関数定義の開始の{ を行頭にする書き方ができなくなっているようです。
（正確には誤って解釈されるかコンパイルエラーになっているそう）&lt;/p&gt;
&lt;h3 id=&quot;型について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%9E%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;型について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;型について&lt;/h3&gt;
&lt;p&gt;Go言語にはクラスという概念が存在しません。クラスはなく型しかありません。
値の型を他の型へ変換することをGoでは「変換」(キャストとは言わない？）というそうで結構型チェックが厳しく、
明示的に変換を使用しないと整数同士の型であっても代入、比較できないようです。&lt;/p&gt;
&lt;h3 id=&quot;変数について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%A4%89%E6%95%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;変数について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;変数について&lt;/h3&gt;
&lt;p&gt;もっとも基本的な変数の宣言方法は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; 変数名 型 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 初期値&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ですが、初期値を与えた時は型を省略して記述でき&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;さらにvarキーワードも:=を使用することで省略できます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;:=はなにか特別な演算子のようにもみえ最初にGoのコードを見た時には「？」となりましたが、
、変数宣言時の記述量減らせて便利ですね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;定数の宣言にはconstを使います。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; c &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;さらには、Goには「iota」列挙子なるものが存在するらしくiotaを
使うと連番が簡潔に書けちゃいます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  ZERO &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;iota&lt;/span&gt;
  ONE &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;iota&lt;/span&gt;
  TWO &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;iota&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こうすると、&lt;/p&gt;
&lt;p&gt;定数ZEROには0の値、定数ONEには1、定数TWOには2が代入されて自動的に連番を作れるそうです。定数に割り振る数字を変えたいなどの場合に間に新しい定数をさしこむだけで変更できるので連番の定数を使うときなどは使えそうですね。&lt;/p&gt;
&lt;p&gt;男性、女性の連番の数字の定数にその他を0の値で追加したいという時に
サクッと追加できますね。
(普通に書くとMALE, FEMALEの値を繰り上げて書き直さないといけない)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  MALE &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;iota&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 0&lt;/span&gt;
  FEMALE &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;iota&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 1&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  OTHER &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;iota&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// 0&lt;/span&gt;
  MALE &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;iota&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// 1&lt;/span&gt;
  FEMALE &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;iota&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 2&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;繰り返し処理について&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E5%87%A6%E7%90%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;繰り返し処理について permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;繰り返し処理について&lt;/h3&gt;
&lt;p&gt;Go言語にも他の言語と同様にFor文が用意されていますが、
GoのFor文はかっこがいりません。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;また、Goにはwhile文がなく、多言語ののwhile文にあたる処理は
for文で書きます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;


&lt;span class=&quot;token comment&quot;&gt;// 無限ループはこちら&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;rubyのeach文、jsのforEach、Javaの拡張for文？のような構文はrange式を
使用して書いていきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;arr &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;range&lt;/span&gt; arr &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;条件分岐&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90&quot; aria-label=&quot;条件分岐 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;条件分岐&lt;/h3&gt;
&lt;p&gt;何回か書いていますが、Go言語では条件文に丸括弧がいりません。
そのためif文はこのような形になっています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;は偶数&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;は奇数&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;switch文は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;switch&lt;/span&gt; i &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;1 or 2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;other&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;のように書けますが、多言語の場合case式の終わりにbreak文をつけないと他のケースでも
条件が一致していれば処理が継続されてしまいますがGo言語の場合はデフォルトでbreakされる
ようになっており、breakしたくない場合はfallthrough文をつける必要があるようです。&lt;/p&gt;
&lt;p&gt;(自分で書いていてbreak書かなかったことがあまりないので記述量が減って嬉しそう)&lt;/p&gt;
&lt;h3 id=&quot;ポインタ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF&quot; aria-label=&quot;ポインタ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ポインタ&lt;/h3&gt;
&lt;p&gt;Go言語ではポイントが使用できます。変数が存在するメモリ上の場所をアドレスといい、
そのアドレスを格納できるのがポインタです。&lt;/p&gt;
&lt;p&gt;単純な変数のアドレスを取得したい場合には,「&amp;#x26;」を使い&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;iのアドレス&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにします。ポインタを格納したい変数には、*をつけて型宣言を行います。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; ptr &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使い方はほぼ、C言語と同じはず（あまり自信がない）なのですが、
唯一ポインタの演算だけ不正なメモリアクセスのリスクを回避するために許可されていないようです。&lt;/p&gt;
&lt;h3 id=&quot;関数&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%96%A2%E6%95%B0&quot; aria-label=&quot;関数 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;関数&lt;/h3&gt;
&lt;h4&gt;関数について&lt;/h4&gt;
&lt;p&gt;Go言語は複数の値を関数で返せるので、複数の値を返す場合には
一旦オブジェクトに詰め込んでオブジェクト自体を返すなどの必要があるのですが
Go言語ではそれがなくなるようです。&lt;/p&gt;
&lt;p&gt;まず単純な関数の宣言を見てみてると&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/* func 関数名(パラメータリスト）戻り値の型 {
 *  return 戻り値
 * }
 */&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; plus &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このような形で、多値を返す場合はカンマで区切って値を
返却します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;float32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こうやって見ると、受け取り側の受け取り方が気になりますが
受け取り側も同じようにカンマ区切りで受け取りことができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;add&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; sub&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; mul&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; div &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;戻り値には名前をつけることもでき、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;add &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; sub &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; mul &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; div &lt;span class=&quot;token builtin&quot;&gt;float32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// あらかじめ宣言した変数に値を代入&lt;/span&gt;
  add &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b
  sub &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; b
  mul &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; b
  div &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// return文を呼び出せば多値がかえる&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このようにすることでreturn文で返す値を書きつらねなくても多値を返すことができます。&lt;/p&gt;
&lt;h4&gt;メソッドについて&lt;/h4&gt;
&lt;p&gt;Go言語では型にメソッドをもたせることができるらしく、
funcキーワードとメソッド名のまdに「レシーバ」を記述することでメソッドが
どの型に所属するのか決めることができます。&lt;/p&gt;
&lt;p&gt;※レシーバとして使用する型はメソッドと同じパッケージ内で宣言されている必要があります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; myType init

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value myType&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; z myType &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1234&lt;/span&gt;

  z&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;さらにメソッド値なる概念があるらしく、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; myType &lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;myType&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;increment myType&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; myType &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;value &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; increment
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;value
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; i myType

  &lt;span class=&quot;token comment&quot;&gt;// 変数i に対し、addメソッドを呼び出し、3を加算&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// =&gt; 3が出力される。&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;printLn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// メソッド値を取得。このメソッド値の型は「func(myType) myType」&lt;/span&gt;
  methodValue &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;add

  &lt;span class=&quot;token comment&quot;&gt;// メソッド値に対し、メソッドを呼び出し、再度3を加算&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// =&gt; 4が出力される。&lt;/span&gt;
  fmt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;methodValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;メソッドを自体を変数に代入して、レシーバなしで変数からメソッドを呼び出せるようです。
JavaScriptでも変数にfunctionを詰め込めるのでそれと同じと理解してます。&lt;/p&gt;
&lt;h4&gt;関数の遅延実行&lt;/h4&gt;
&lt;p&gt;defer文を使うと関数の遅延実行が可能で、defer文を使うと関数の戻り値を使うことはできませんが、
呼び出し元の関数が終了したときに呼び出されます。&lt;/p&gt;
&lt;p&gt;これは、リソースの解放などに便利で
ファイルのオープンを例にとると以下のようなコードになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;os&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;err &lt;span class=&quot;token operator&quot;&gt;:=&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;OpenFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;test.txt&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;O_WRONLYlos&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;0_CREATE&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0666&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// オープンに失敗したときは終了&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; err &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Exit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;defer&lt;/span&gt; file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Close&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;WriteString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;あいうえお&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例では、defer文を使ってファイルのクローズが遅延実行されるようにしてあります。
defer文がひとつの関数に複数ある場合は、呼び出し元が終了したあと宣言された順番に
実行されるようです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;長くなったので一旦ここで区切りとします。
次回は構造体、インタフェース、配列・スライス・マップ、エラーハンドリング、並列処理
などなどです。&lt;/p&gt;
&lt;p&gt;この前半パートではやっぱり関数の戻り値として多値を返せるというのが印象的でした。
記事にも書いたように他のプログラム言語だとわざわざオブジェクトにつけたりしていたので、
それがなくなりすっきりとした関数が書けそうです。（まだ書いていないけど）&lt;/p&gt;
&lt;p&gt;他はiota文が地味に便利そうなのと、記事で触れるのわすれたのですがswitch文は普通の
値のswitchの他に型switchなるものがあるそうなのでこっちもちょっと使ってみてみたいです。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/01/20190121_get-start-go/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[React Nativeでのルート管理ライブラリReact Navigationの使い方を整理。]]></title><description><![CDATA[これまで仕事でReact Navigationを使う機会はあったのですが、
この度再度ReactNavigationをインストールから実際に使うところまでを経験
できたので改めて使い方を整理します。 インストール 元はこちら https://reactnavigation.org…]]></description><link>https://ver-1-0.net/blog/2019/01/19/summary-of-react-navigation</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/01/19/summary-of-react-navigation</guid><pubDate>Sat, 19 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;これまで仕事でReact Navigationを使う機会はあったのですが、
この度再度ReactNavigationをインストールから実際に使うところまでを経験
できたので改めて使い方を整理します。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;インストール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; aria-label=&quot;インストール permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;インストール&lt;/h2&gt;
&lt;p&gt;元はこちら&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnavigation.org/docs/en/getting-started.html&quot;&gt;https://reactnavigation.org/docs/en/getting-started.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インストールは現状最新版の3系を入れていきます。&lt;/p&gt;
&lt;p&gt;まずはadd, expoは使っていないのでreact-native-getsture-handlerも合わせて
インストールします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;yarn add react-navigation
yarn add react-native-gesture-handler
react-native link react-native-gesture-handler&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;iOSはこれで終わりですが、Android用には別でMainActivity.java
に必要なコードを足していきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;diff&quot;&gt;&lt;pre class=&quot;language-diff&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;package com.reactnavigation.example;

import com.facebook.react.ReactActivity;
&lt;span class=&quot;token inserted-sign inserted&quot;&gt;&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt; import com.facebook.react.ReactActivityDelegate;
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt; import com.facebook.react.ReactRootView;
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt; import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
&lt;/span&gt;
public class MainActivity extends ReactActivity {

&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; @Override
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; protected String getMainComponentName() {
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;   return &quot;Example&quot;;
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; }
&lt;/span&gt;
&lt;span class=&quot;token inserted-sign inserted&quot;&gt;&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;  @Override
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;  protected ReactActivityDelegate createReactActivityDelegate() {
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;    return new ReactActivityDelegate(this, getMainComponentName()) {
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;      @Override
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;      protected ReactRootView createRootView() {
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;       return new RNGestureHandlerEnabledRootView(MainActivity.this);
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;      }
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;    };
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;  }
&lt;/span&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これでひとまずはインストール完了です。&lt;/p&gt;
&lt;h2 id=&quot;使い方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BD%BF%E3%81%84%E6%96%B9&quot; aria-label=&quot;使い方 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;使い方&lt;/h2&gt;
&lt;p&gt;React NavigationではcreateStackNavigatorというメソッドで
ルーティングを定義するのが基本の使い方です。&lt;/p&gt;
&lt;p&gt;StackNavigatorでルーティングを定義するまえに親玉のコンポーネントをcreateAppContainerを
使って作っていきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; AppContainer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createAppContainer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;AppNavigator&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;App&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;AppContainer &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; AppNavigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Home&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; HomeScreen
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;createAppContainerにはcreateStackNavigatorで作成したコンポーネントを渡し、
アプリ起動後最初に呼ばれるAppコンポーネントでは、createAppContainerで作成した
AppContainerのみを返却するようにします。&lt;/p&gt;
&lt;p&gt;これでHomeScreenコンポーネントの内容がアプリ起動時に表示されます。&lt;/p&gt;
&lt;h3 id=&quot;Stack-Navigatorの基本的な使い方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Stack-Navigator%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9&quot; aria-label=&quot;Stack Navigatorの基本的な使い方 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Stack Navigatorの基本的な使い方&lt;/h3&gt;
&lt;p&gt;Stack Navigator(Webで言うところのルート定義のようなもの)は、ルート名をキーにしたオブジェクトを
引数に渡すことで定義を行なっていきます。&lt;/p&gt;
&lt;p&gt;先ほどのHomeという根本のコンポーネント以外定義していないところに新たなルーティングを足すには、
以下のようにしていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;diff&quot;&gt;&lt;pre class=&quot;language-diff&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;
const AppNavigator = createStackNavigator({
&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; Home: HomeScreen,
&lt;/span&gt;&lt;span class=&quot;token inserted-sign inserted&quot;&gt;&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;  Details: DetailsScreen
&lt;/span&gt;});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ここではDetailsScreenというコンポーネントをDetailsというルーティングとして追加しています。
例ではルーティングの書き方として一番簡易的なものですが、より詳細に定義したい場合はルーティングの
バリュー部分をオブジェクトで以下のように渡してあげるとより細かな設定が可能です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; AppNavigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Home&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; HomeScreen&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Details&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;screen&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DetailsScreen&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;naviagtionOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    	&lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;詳細&apos;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;screenキーでルーティングで使用するコンポーネントを指定して、navigationOptionsでタイトルなどの細かな指定をすることができます。
navigationOptionsの細かい設定はこちらに書いてあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnavigation.org/docs/en/stack-navigator.html#navigationoptions-for-screens-inside-of-the-navigator&quot;&gt;https://reactnavigation.org/docs/en/stack-navigator.html#navigationoptions-for-screens-inside-of-the-navigator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;createStackNavigatorは第二引数でStackNavigatorのオプションを渡すことができます。
第二引数では、遷移時のスクリーンをモーダルで出すのかや、ヘッダーのタイプ、遷移時のコールバックを定義できます。&lt;/p&gt;
&lt;h3 id=&quot;画面の移動&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%94%BB%E9%9D%A2%E3%81%AE%E7%A7%BB%E5%8B%95&quot; aria-label=&quot;画面の移動 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;画面の移動&lt;/h3&gt;
&lt;p&gt;遷移を行うには、StackNavigatorで指定されたコンポーネント（さきほどのHomeScreenやDetailScreen)は自動的にnavigationという
stateがバインドされるので、それを使って画面遷移を行なっていきます。&lt;/p&gt;
&lt;p&gt;先ほどの例のDetailsに遷移したい場合の構文は以下です。
 &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;navigation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;navigate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Details&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;propsで渡されたnavigationのnavigateメソッドにルーティングのキーを渡して画面を遷移させます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; StyleSheet&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; View &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-native&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Button &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-native-elements&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Home&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;View&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      	&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Button&lt;/span&gt;&lt;/span&gt;
      	&lt;span class=&quot;token attr-name&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Got to Details&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
      	&lt;span class=&quot;token attr-name&quot;&gt;onPress&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;navigation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;navigate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Details&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
      	&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;View&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; 
React Navigationで特に考えずに画面を遷移するとデフォルトでヘッダに戻るボタンが付いてきますが、
意識的に画面を前の画面に戻したい場合は、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;this.props.navigation.goBack()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;goBackには引数を渡さずに実行すると今のルートを消して前の画面にもどるのですが、
引数としてRouteを渡すと特定のRouteの一個前の画面に戻れるようで、&lt;/p&gt;
&lt;p&gt;スクリーンA
スクリーンB
スクリーンC
スクリーンD ← 現在地&lt;/p&gt;
&lt;p&gt;というスクリーンがすでにスタックされており、今Dの画面を開いているが、Aに戻りたいという場合は
goBack(&apos;スクリーンB&apos;)とするとD, C, Bをポップ（スタックから取り除いて）AのRouteにたどり着けるようです。&lt;/p&gt;
&lt;p&gt;またはこの例だとStackの一番先頭のスタックに戻れれば良いのでpopToTopというAPIを使うという代替手段もあるようです。&lt;/p&gt;
&lt;p&gt;navigation propsには画面を遷移させたり、パラメータを渡したりするAPIを備えているので詳細な使い方は
こちらを参照すると良いと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnavigation.org/docs/en/navigation-prop.html&quot;&gt;https://reactnavigation.org/docs/en/navigation-prop.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;遷移時のパラメータの受け渡し&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%81%B7%E7%A7%BB%E6%99%82%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%AE%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%97&quot; aria-label=&quot;遷移時のパラメータの受け渡し permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;遷移時のパラメータの受け渡し&lt;/h3&gt;
&lt;p&gt;Webのルーティングではurlに乗せて、リソースのIDなどを画面間で受け渡しできますがReact Navigationではparamsを通して受け渡しを行います。
遷移時のパラメータはnavigateメソッドの第二引数で定義ができ、
 &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;navigation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;navigate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Details&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1234&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;このようにDetails画面にidというパラメータを引き渡すことができます。
実際にこのパラメータを受け取る場合はgetParamを使います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;navigation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getParam&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;id&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;遷移時のパラメータはnavigatio.stateに保持されているので直接アクセスすれば
値を取得することもできるのですが、パラメータが全く設定されていない場合にnull落ちするので
getParamを利用してパラメータを取得することが推奨されています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
# &lt;span class=&quot;token constant&quot;&gt;OK&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;navigation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getParam&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;id&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

# &lt;span class=&quot;token constant&quot;&gt;NG&lt;/span&gt; paramsが設定されていない場合に&lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;落ちする
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;navigation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;ヘッダーのカスタマイズ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA&quot; aria-label=&quot;ヘッダーのカスタマイズ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ヘッダーのカスタマイズ&lt;/h3&gt;
&lt;p&gt;先にも少し書きましたが、createStackNavigatiorのオプションでヘッダーのカスタマイズを行うことができます。
React Navigationはデフォルトで戻るボタンをヘッダにつけてくれたりしますが、そもそもいらないという時や
戻る部分の文言やアイコンを変えたいという場合にはnavigationOptionsを使ってヘッダの要素をカスタマイズできます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnavigation.org/docs/en/stack-navigator.html#navigationoptions-for-screens-inside-of-the-navigator&quot;&gt;https://reactnavigation.org/docs/en/stack-navigator.html#navigationoptions-for-screens-inside-of-the-navigator&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;タブバー&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%BF%E3%83%96%E3%83%90%E3%83%BC&quot; aria-label=&quot;タブバー permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;タブバー&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/01/20190119_summary-of-react-navigation/react-navigation-sample.gif&quot; alt=&quot;React Navigation Sample&quot;&gt;&lt;/p&gt;
&lt;p&gt;アプリなどだとこのgifのようなタブバーを設置することがあると思うのですが、それもReactNavigationを使って実現可能です。&lt;/p&gt;
&lt;p&gt;タブバーを使う場合はcreateBottomTabNavigatorを使用して以下のように書くことができます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; HomeStack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Home&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Details&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;initialRouteName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Home&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;navigationOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;tabBarIcon&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Icon name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;home&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; MypageStack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Mypage&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Details&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;initialRouteName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Mypage&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;navigationOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;tabBarIcon&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Icon name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;person&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; postLoginNavigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createBottomTabNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Home&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; HomeStack&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Mypage&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MypageStack&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;createBottomTabNavigatorを使用しているのはコードの一番下部分なのですが、
あらかじめStackNavigatorでそれぞれのTabでのルーティングを定義しておいてそれぞれを
createBottomTabNavigatorに渡してタブを実現しています。&lt;/p&gt;
&lt;p&gt;タブにはアイコンを設置するのが一般的かとは思いますが、アイコンはnavigationOptionsで
設定をしています。&lt;/p&gt;
&lt;p&gt;さらに例のGifでは、ログイン前と後でタブを出しわけしているのでログイン画面のルーティングを
付け足したStackNavigatorを追加しています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; postLoginNavigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createBottomTabNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Home&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; HomeStack&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Mypage&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MypageStack&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; AppNavigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;   Login&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;   PostLogin&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; postLoginNavigator
&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;   mode&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;modal&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;   headerMode&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;none&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;   initialRouteName&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Login&apos;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ここではheaderModeやmodeオプションを付与していますが、headerModeをnoneにしないと
ログインした後の画面でヘッダーが二つになって（StackNavigatorがネストしているので）しまうので
ヘッダは出さないようにしています。またログイン時にしたから浮き出るようなアニメーションになっているのも
modeがmodal指定になっているからでStackNavigatorではこれらの制御も行うことができます。&lt;/p&gt;
&lt;p&gt;以下App.jsの部分だけですが、Gifに使ったコードを載せておきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; StyleSheet&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; View&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Button &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-native&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  createStackNavigator&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  createAppContainer&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  createBottomTabNavigator&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-navigation&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Icon &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-native-elements&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; DetailsScreen &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./src/screens/DetailsScreen&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; HomeScreen &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./src/screens/HomeScreen&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; MypageScreen &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./src/screens/MypageScreen&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; LoginScreen &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./src/screens/LoginScreen&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Home &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;screen&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; HomeScreen&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token function-variable function&quot;&gt;navigationOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; navigation &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;ホーム&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Details &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;screen&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DetailsScreen&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token function-variable function&quot;&gt;navigationOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; navigation &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;詳細&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Mypage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;screen&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MypageScreen&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token function-variable function&quot;&gt;navigationOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; navigation &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;マイページ&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Login &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;screen&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; LoginScreen&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token function-variable function&quot;&gt;navigationOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; navigation &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;ログイン&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; HomeStack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Home&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Details&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;initialRouteName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Home&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;navigationOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;tabBarIcon&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Icon name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;home&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; MypageStack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Mypage&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Details&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;initialRouteName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Mypage&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;navigationOptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;tabBarIcon&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Icon name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;person&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; postLoginNavigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createBottomTabNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Home&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; HomeStack&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;Mypage&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MypageStack&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; AppNavigator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStackNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  Login&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;PostLogin&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; postLoginNavigator
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;modal&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;headerMode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;none&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;initialRouteName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Login&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; AppContainer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createAppContainer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;AppNavigator&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;App&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;AppContainer &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Stack Navigatorの基本的な挙動についてざっくりまとめてみました。
naviagteの時の細かい挙動などまとめきれていないところは結構ありそうですが、
適宜追記するか、別の記事などで紹介できれば良いかなと思っています。&lt;/p&gt;
&lt;p&gt;英語のリファレンス読むのも慣れてきたのですが、まだまだ日本語リソースの方が吸収効率がよいので
かんたんでも日本語のドキュメントあるとありがたいです。&lt;/p&gt;
&lt;p&gt;英語力上げてこういう差がなくなればいいんですけど単純に結構コストかかりそうなので、
RN界隈も日本語ソース増えるとよいですね。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/01/20190119_summary-of-react-navigation/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[2018年。フリーランス一年やってみての振り返り。]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2019/01/16/look-back-2018</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/01/16/look-back-2018</guid><pubDate>Wed, 16 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;新年はじまってしばらく経ってますが、一昨年末頃にフリーランス始めてざっくり一年が過ぎたので、少し振り返りをやってみます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;なんでフリーランスになったの&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%AA%E3%82%93%E3%81%A7%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%AE&quot; aria-label=&quot;なんでフリーランスになったの permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;なんでフリーランスになったの？&lt;/h2&gt;
&lt;p&gt;フリーランスは就職活動の時期からぼんやりやってみたいなと思ってました。&lt;/p&gt;
&lt;p&gt;フリーランスになりたいとは思ってましたが、その肩書きに執着があるわけでなく9時17時で言われた業務をこなす人生を過ごすよりは、自分の頭使いながら分野問わず挑戦したりダラダラしたりできた方が楽しそうだなと思ったからです。&lt;/p&gt;
&lt;p&gt;そんな中一昨年末に会社を辞める決意をして次何しようかなと考えたところ、また次会社選んでも二、三年で辞めるならフリーランスとかちょっと色の変わったことやろうかなと考えて独立しました。&lt;/p&gt;
&lt;p&gt;もうちょっと経験積んでかやった方がみたいな所も言われましたが、フリーランスはフリーランスでフリーランス特有のスキルみたいなものがあるから早めに経験した方が得では？（フリーランスはフリーランスで値付けだったり、営業の仕方だったり、帳簿つけたりなどなどは特有のスキルかもしれません）
と考えて独立しました。&lt;/p&gt;
&lt;p&gt;今のところ思い通りにならない部分もありますが、平準化すると順調で苦境という苦境もないのでこの頃考えたことは間違いではなかったようです。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://ver-1-0.net/2018/11/26/how-to-be-enginner&quot;&gt;フリーランスエンジニアなるには？ソフトランディング戦略でいってみよう&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id=&quot;ふりかえり&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%B5%E3%82%8A%E3%81%8B%E3%81%88%E3%82%8A&quot; aria-label=&quot;ふりかえり permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ふりかえり&lt;/h2&gt;
&lt;p&gt;フリーランスにも色々な面があるので、それぞれの面でふりかえってみました。&lt;/p&gt;
&lt;h3 id=&quot;お金のはなし&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%8A%E9%87%91%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%97&quot; aria-label=&quot;お金のはなし permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;お金のはなし&lt;/h3&gt;
&lt;p&gt;増えました。まぁ会社員時代に比べると全然違いますね。&lt;/p&gt;
&lt;p&gt;税金とか年金とか保険料とかもろもろ入れるとどうなの？という話はありますが、単純に自分の興味あることに経費としてお金使えて、その分の経験できるのでメリデメあるよねと考えてます。&lt;/p&gt;
&lt;p&gt;短期的にみて金銭的、時間的な余裕ができてその余剰を自分のサービス作ったりとか、海外旅行行ったりとか、カンファレンス行ったりとかに使えるのでそこも含めてフリーランスになるかは考えないといけないんじゃないですかね？と思っています。&lt;/p&gt;
&lt;h3 id=&quot;技術的なはなし&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AA%E3%81%AF%E3%81%AA%E3%81%97&quot; aria-label=&quot;技術的なはなし permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;技術的なはなし&lt;/h3&gt;
&lt;p&gt;ReactもVueもやったことのない状態から、Rails一本でフリーランスとして独立して
Rails, Vue, React, React Nativeなどの案件をこなして技術の幅と深さが広がった一年でした。&lt;/p&gt;
&lt;p&gt;週6日で働いていた時が一番力が伸びた気がしていて、単純に週6日でRailsとReactのコードを
書いていたのでそれだけでだいぶ技術力をつけられたんじゃないかと思っています。&lt;/p&gt;
&lt;p&gt;React, React Native, Expressあたりの仕事を行うにあたって英語のドキュメントを読みながら
作業することが多かったのですが、こういうところで英語の勉強しておいてよかったなと感じました。
英語をよんで技術を習得する力があると、ドキュメントの少ない技術も抵抗なく入れられるのでエンジニア×英語は
ほんと大事ですね。とはいえ自分の英語力も大したことないので、技術力とあわせて伸ばしていきたいです。&lt;/p&gt;
&lt;h3 id=&quot;人とのつながり的なはなし&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BA%BA%E3%81%A8%E3%81%AE%E3%81%A4%E3%81%AA%E3%81%8C%E3%82%8A%E7%9A%84%E3%81%AA%E3%81%AF%E3%81%AA%E3%81%97&quot; aria-label=&quot;人とのつながり的なはなし permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;人とのつながり的なはなし&lt;/h3&gt;
&lt;p&gt;フリーランスになってフリーランスの知り合いが増えました。&lt;/p&gt;
&lt;p&gt;これは考えてみれば当たり前なのかもしれませんが、フリーランスや個人事業主ですと名乗ることで、
昔の知り合いから連絡もらえたり、同じような人と繋がれたりしたのでフリーランス始めたての頃には
考えていない嬉しい誤算でした。&lt;/p&gt;
&lt;p&gt;気のせいか、会社員時代より知り合いも増え、知り合いも前向きで主体的にそれぞれの目標にむかって行動を
しようという人が増えた気がします。
「今後こうようことしていこうと思うんだよね」
などなど未来志向の会話が増えた気がしています。&lt;/p&gt;
&lt;h2 id=&quot;この先やりたいこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%93%E3%81%AE%E5%85%88%E3%82%84%E3%82%8A%E3%81%9F%E3%81%84%E3%81%93%E3%81%A8&quot; aria-label=&quot;この先やりたいこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;この先やりたいこと&lt;/h2&gt;
&lt;p&gt;一年通して、まだまだ未熟ではありますが技術的な成長や金銭面での充実やなど
順調なスタートが切れた一年でした。フリーランスとしてはまずまずのスタートを
切れて、ある程度落ちついてきたので、これを基盤にさらなる技術的成長を図ったり、
新しいことはじめたりしたいななんて思ってます。&lt;/p&gt;
&lt;p&gt;昨年の初めにこんなことをかいていたのですが、まぁ半分くらいできたかなぁという感じですね。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2018/01/01/action-report-1225&quot;&gt;2018年やること・やらないことリスト -&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;残念ながらエンジニアとして以外に収益月10万円なんて書いていますが、これは結構ダメでしたね。
個人で作ったサイトでぽちぽち1万円程度の売り上げが立つことはありますが安定性にかけるので、
この目標も引き続き継続してやっていきたいです。&lt;/p&gt;
&lt;p&gt;リンクの記事に書いたRails+Reactで固めてやっていくというのもできましたし、1年間生き延びるのも
できました。&lt;/p&gt;
&lt;p&gt;昨年の目標完遂とはなりませんでしたが、まぁ最低限はできたのでOKとして2019年新たに計画練り直してやっていきます。&lt;/p&gt;
&lt;p&gt;2019年は英語力の強化とエンジアリング事業（準委任の仕事）以外で価値を出すことなどをテーマにやっていきます。
英語力の強化のところでいうと2,3ヶ月ほど海外で仕事したり、英語で記事書いたりなんかもしていきたいです。&lt;/p&gt;
&lt;p&gt;昨年は一年の目標みたいな感じのざっくりとした計画だったので、今期はもう少し3ヶ月スパンくらいのモチベーションが
たもている目標を立てて活動してきたいです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;フリーランスという働き方にたいしては賛否両論あると思いますが、ひとつのモデルケースとして
今後もこういった記事をあげられればななんて思っています。&lt;/p&gt;
&lt;p&gt;フリーランスにはやっぱり向き不向きがあると思っていて「自分で考えて実行できる人」でないとやっぱり難しいのかな
なんて思いました。&lt;/p&gt;
&lt;p&gt;今エンジニアでそれなりに経験のある人だと、それなりの案件の受注はできて普通に仕事をこなしていれば
普通かそれよりいい暮らしができると思うのですが、それに甘んじると社員ほどお金のかからない労働力として企業に使われるだけ
になってしまうので個人としてなんらかの色を出していきたいという人はぜひとも挑戦してみれば良いんじゃないでしょうか。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://ver-1-0.net/2018/12/03/freelance-agent-select&quot; &gt;フリーランスエンジニアが初めに選ぶオススメのフリーランスエージェント3選。&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/01/20190116_look-back-2018/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[ReactNativeで位置情報を取得する。]]></title><description><![CDATA[iOSからだとcorelocationというAPIを使って位置情報を取得できるのですが、React Nativeの場合はGeolocationというブラウザなどで位置情報を取得するAPI…]]></description><link>https://ver-1-0.net/blog/2019/01/14/get-current-position-by-rn</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/01/14/get-current-position-by-rn</guid><pubDate>Mon, 14 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;iOSからだとcorelocationというAPIを使って位置情報を取得できるのですが、React Nativeの場合はGeolocationというブラウザなどで位置情報を取得するAPIを使って位置情報を取得できるようです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;現在地を取得するための設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%8F%BE%E5%9C%A8%E5%9C%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;現在地を取得するための設定 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;現在地を取得するための設定&lt;/h2&gt;
&lt;p&gt;設定方法はここにあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://facebook.github.io/react-native/docs/geolocation&quot;&gt;https://facebook.github.io/react-native/docs/geolocation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Geolocationを使うにはいくつか設定を行う必要があるのですが、
expoだと使えず、xcodeやandroid sdkでビルドしないとGeolocationは使えないようです。&lt;/p&gt;
&lt;h3 id=&quot;iOSの場合&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#iOS%E3%81%AE%E5%A0%B4%E5%90%88&quot; aria-label=&quot;iOSの場合 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;iOSの場合&lt;/h3&gt;
&lt;p&gt;iOSの場合は、Info.plistに新たなキーを追加する必要があります。&lt;/p&gt;
&lt;p&gt;アプリ起動中のみ位置情報を取得するには、
NSLocationWhenInUseUsageDescription
バックグランドでも位置情報を取得したい場合は
NSLocationAlwaysUsageDescriptionをさらに追加します。&lt;/p&gt;
&lt;p&gt;キーの追加はXcodeから可能で、./ios下のXXXX.xcodeprojを開いて
&apos;Capabilites&apos;tabから設定できます。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/01/20190114_get-current-position-by-rn/xcode.png&quot; alt=&quot;xcode tab&quot;&gt;&lt;/p&gt;
&lt;p&gt;画像だとPrivacy - Location When In Use Usage DescriptionとPrivacy - Location Always Usage Descriptionというのがそれです。&lt;/p&gt;
&lt;h3 id=&quot;Androidの場合&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Android%E3%81%AE%E5%A0%B4%E5%90%88&quot; aria-label=&quot;Androidの場合 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Androidの場合&lt;/h3&gt;
&lt;p&gt;Androidの場合は、AndroidManifest.xmlを編集して&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;&amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;を追加すればよいです。
さらにAndroid API 23以降を使用する場合は&lt;img src=&quot;https://facebook.github.io/react-native/docs/permissionsandroid.html&quot; alt=&quot;PermissionAndroid API&quot;&gt;
を利用して権限の確認を行わないといけないそうです。&lt;/p&gt;
&lt;h2 id=&quot;位置情報を取得するコード&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89&quot; aria-label=&quot;位置情報を取得するコード permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;位置情報を取得するコード&lt;/h2&gt;
&lt;p&gt;上の設定が終わったら以下のコードで現在位置を取得できます。
Androidなどの場合は権限チェックしたりする必要がありますが、一旦iOS用ということで以下のようなコードになっています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;App&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;componentDidMount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; location &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getCurrentPos&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; error &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; location &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;getCurrentPos&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;timeout &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5000&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;resolve&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; reject&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      navigator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;geolocation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getCurrentPosition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;resolve&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; reject&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        timeout&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;enableHighAccuracy&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; error &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;View&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;styles&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;location &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;error &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Text&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; fetching data... &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Text&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;location &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
          Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;coords&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;key&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
              &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Text&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; : &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;coords&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Text&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;error &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
          Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;key&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
              &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Text&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; : &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Text&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;View&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;エミューレータで試すとエミュレータで設定された現在地が返ってくるようです。
実機でも試しましたが、試すときにiPhoneの設定で位置情報の許可をする必要があります。&lt;/p&gt;
&lt;p&gt;位置情報の許可は「設定」-&gt;「プライバシー」-&gt;「位置情報サービス」から設定できます。&lt;/p&gt;
&lt;h2 id=&quot;取得される位置情報オブジェクトについて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8F%96%E5%BE%97%E3%81%95%E3%82%8C%E3%82%8B%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;取得される位置情報オブジェクトについて permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;取得される位置情報オブジェクトについて&lt;/h2&gt;
&lt;p&gt;位置情報はgetCurrentPositionのコールバックで取得されますが、そこで取得されるオブジェクトはcoordsというキーを
持っていますが、そのcooridsに位置情報が入ってきます。&lt;/p&gt;
&lt;p&gt;coordisは表のようなデータを返します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;key&lt;/th&gt;
&lt;th&gt;description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;latitude&lt;/td&gt;
&lt;td&gt;緯度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;longitude&lt;/td&gt;
&lt;td&gt;経度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;altitude&lt;/td&gt;
&lt;td&gt;高度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;accuracy&lt;/td&gt;
&lt;td&gt;取得された緯度、経度の正確性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;altitudeAccuracy&lt;/td&gt;
&lt;td&gt;高度の正確性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;heading&lt;/td&gt;
&lt;td&gt;方向。北を0として時計回りに360までの値が返却される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;speed&lt;/td&gt;
&lt;td&gt;速度。秒速何m移動しているかを表す&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;accuracy, altitudeAccuracyあたりがピントこないのですが、
それぞれの誤差の範囲をmで表してくれるようです。&lt;/p&gt;
&lt;p&gt;もっと詳しく知りたい方はこちらのGeolocationAPIのドキュメントから確認できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://w3c.github.io/geolocation-api/#coordinates%5C_interface&quot;&gt;https://w3c.github.io/geolocation-api/#coordinates\_interface&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;これで一通りRNでの現在地取得方法はまとめられたかと思います。&lt;/p&gt;
&lt;p&gt;RNでの現在地取得を調べるためにネットサーフィンをしていたら&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/facebook/react-native/issues/671&quot;&gt;https://github.com/facebook/react-native/issues/671&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We have geolocation support from CoreLocation (check out GeolocationExample.js), but not beacon support.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;こんなissueを見つけました。CorelocationもGeolocation使っているんですかね？&lt;/p&gt;
&lt;p&gt;わからない。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/01/20190114_get-current-position-by-rn/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[GatsbyおよびReactでのAdsense設置方法。]]></title><description><![CDATA[当サイトではアドセンスを設置していたのですが、
Wordpressからの移行に際してReactでアドセンスを設置することに
なったので、
Reactでのアドセンスの設置方法をまとめておきます。 Gatsbyの場合、記事外はReact…]]></description><link>https://ver-1-0.net/blog/2019/01/13/how-to-display-adsense-on-gatsby</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/01/13/how-to-display-adsense-on-gatsby</guid><pubDate>Sun, 13 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;当サイトではアドセンスを設置していたのですが、
Wordpressからの移行に際してReactでアドセンスを設置することに
なったので、
Reactでのアドセンスの設置方法をまとめておきます。&lt;/p&gt;
&lt;p&gt;Gatsbyの場合、記事外はReactコンポーネントで表現できますが、
記事内はマークダウンなのでレンダリング時(ビルド時)にadsenseを埋め込む形にしています。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;記事外の設置&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A8%98%E4%BA%8B%E5%A4%96%E3%81%AE%E8%A8%AD%E7%BD%AE&quot; aria-label=&quot;記事外の設置 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;記事外の設置&lt;/h2&gt;
&lt;p&gt;記事外に設置する場合は、
もともとのアドセンスのコードが以下だとすると&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;html&quot;&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- レスポンシブ広告2 --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ins&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;adsbygoogle&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value css language-css&quot;&gt;&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;block&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;token attr-name&quot;&gt;data-ad-client&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;XXXX&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;token attr-name&quot;&gt;data-ad-slot&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;XXXX&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;token attr-name&quot;&gt;data-ad-format&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;auto&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;token attr-name&quot;&gt;data-full-width-responsive&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ins&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;adsbygoogle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;adsbygoogle &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;adsbygoogle.jsは他のレイアウトテンプレート内で読み込んでおくとして、
最終的には以下のように、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;html&quot;&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;scrip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
(adsbygoogle = window.adsbygoogle || []).push({});
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このscriptタグの部分とinsタグの部分を分割して、
(htmlタグはjsxに変換しています。）&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Adsense&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;componentDidMount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;window&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;adsbygoogle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;adsbygoogle &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;component&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ins&lt;/span&gt;
      &lt;span class=&quot;token attr-name&quot;&gt;className&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;adsbygoogle&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;inline-block&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;300px&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;250px&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token attr-name&quot;&gt;data-ad-client&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;XXXX&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token attr-name&quot;&gt;data-ad-slot&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;XXXX&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;AdsenseRectangle&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Adsense&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Rectangle&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; AdsenseRectangle
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにします。&lt;/p&gt;
&lt;p&gt;Gatsbyでは、ビルド時にwindowが空でビルドされるので、
componentDidmount内で叩くのが望ましいです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;adsbygoogle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;adsbygoogle &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;またAdsense広告も種類(AMP広告だったり、記事内広告だったり)
があるのですがwindowの部分は変わらないので
それぞれ中身だけ変えられるようにAdsenseという名前の親コンポーネントを作り、
そこに中身をpropsとして与えるように作っています。&lt;/p&gt;
&lt;h2 id=&quot;記事内の設置&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A8%98%E4%BA%8B%E5%86%85%E3%81%AE%E8%A8%AD%E7%BD%AE&quot; aria-label=&quot;記事内の設置 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;記事内の設置&lt;/h2&gt;
&lt;p&gt;記事内の設置はGatsby内部だとMarkdownがhtmlに変換されてコンポーネントに渡されてくるので、
htmlを書き換える形で実現しています。&lt;/p&gt;
&lt;p&gt;記事内のMarkdownに特定のセレクタをもったdiv要素を仕込んでおき、
そこにadsenseのタグを挿入する感じでアドセンスを設置しています。&lt;/p&gt;
&lt;p&gt;コードで書くと以下のような形です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; parser &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; DOMParser &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;undefined&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DOMParser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;insertAdsense&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;ad&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;html&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;parser&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; html&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; dom &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; parser&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;parseFromString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;html&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;text/html&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; eles &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;slice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dom&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;.adsense&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eles&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    eles&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ele&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ele&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ad&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; dom&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;body&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;記事の中身を表示するコンポーネントで&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;insertAdsense([アドセンスのコード])(html)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;のように呼び出してあげるとコードが挿入された形のhtmlが返却されます。&lt;/p&gt;
&lt;p&gt;コードの中身は、先ほどあげたアドセンスのコードのadsbygoogle.jsの部分を
抜いたものを渡します。
こちらもAMP広告かどうかなど中身が変わるのでアドセンスのコードを
外から渡す形にしています。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;これらを自分で実装した時は、windowの部分やDOMParserの部分でつまずきました。
develop環境では特にこれらを考慮しなくても動くのですが、実際にビルドしようとした時にこけます。&lt;/p&gt;
&lt;p&gt;windowとかDOMParserが使えるかどうかはwebpackのビルドモードに関係しているっぽいです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webpack.js.org/concepts/targets/&quot;&gt;https://webpack.js.org/concepts/targets/&lt;/a&gt;&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/01/20190113_how-to-display-adsense-on-gatsby/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Nodejsでmkdir -pをする。再帰的にディレクトリを作成する。]]></title><description><![CDATA[Node.jsでmkdir -pをしたかったのですが、Node10系からでないとmkdir, mkdirSyncなどの
ディレクトリ作成メソッドのrecrusiveオプションが使えません。 https://nodejs.org/docs/latest-v10.x/api/fs…]]></description><link>https://ver-1-0.net/blog/2019/01/12/how-to-mkdir-p-by-node</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/01/12/how-to-mkdir-p-by-node</guid><pubDate>Sat, 12 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Node.jsでmkdir -pをしたかったのですが、Node10系からでないとmkdir, mkdirSyncなどの
ディレクトリ作成メソッドのrecrusiveオプションが使えません。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://nodejs.org/docs/latest-v10.x/api/fs.html#fs%5C_fs%5C_mkdirsync%5C_path%5C_options&quot;&gt;https://nodejs.org/docs/latest-v10.x/api/fs.html#fs\_fs\_mkdirsync\_path\_options&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Node8系などで、
パスを与えると存在しないディレクトリも含めてズバッとディレクトリを掘ってくれる
コードを残しておきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; fs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;fs&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;mkdirSyncRecrusive&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;postPath&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  postPath&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reduce&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;acc&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; item&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; path &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; item &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;acc&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; item&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;existsSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mkdirSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;mkdirSyncRecrusive&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/dir/you/want/to/make&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/01/20190112_how-to-mkdir-p-by-node/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Gatsbyビルドでprismjsのsyntax hilightが効かなかった話]]></title><description><![CDATA[最近、当サイトをGatsby+Netlifyでリプレースしたのですが、 WordpressブログをGatsby+Netlifyでリプレースした話。 もともとのWordpressから記事を移行しもろもろレイアウト変えたりの実装
を終えていざNetlify…]]></description><link>https://ver-1-0.net/blog/2019/01/11/not-work-prismjs-on-build</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/01/11/not-work-prismjs-on-build</guid><pubDate>Fri, 11 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近、当サイトをGatsby+Netlifyでリプレースしたのですが、&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2019/01/10/blog-renewal-by-gatsby&quot;&gt;WordpressブログをGatsby+Netlifyでリプレースした話。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;もともとのWordpressから記事を移行しもろもろレイアウト変えたりの実装
を終えていざNetlifyにデプロイしてみたところ、
なぜかPrismjsのSyntaxHilightが聞いていない状態に気づき絶望しました。&lt;/p&gt;
&lt;p&gt;原因はpurgecssという使っていないcssをビルド時に取り除いてくれるプラグイン
が原因でした。&lt;/p&gt;
&lt;p&gt;わかってみるとなんてことのないものなのですが、手元ではハイライトされているのに、
デプロイするとハイライトが効かないという非常に気持ち悪い挙動だったので
同じように困る人がいないように記事にまとめます。&lt;/p&gt;
&lt;h2 id=&quot;Purgecssとは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Purgecss%E3%81%A8%E3%81%AF&quot; aria-label=&quot;Purgecssとは permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Purgecssとは？&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.purgecss.com://www.purgecss.com/&quot;&gt;https://www.purgecss.com://www.purgecss.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Purgecssとは、使っていない不要なCSSを取り除いてくれるライブラリです。
webpackのプラグインとしてかませて、ビルド時にcssを軽くしてくれます。&lt;/p&gt;
&lt;p&gt;今回は、gatsbyのプラグインとして利用しており最初からインストールされて
いたので「なんかあるなー」とは思っていましたが、prismjsシンタックスハイライト
が効かない問題が表面化するまでは特に気に止めていませんでした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gatsbyjs.org/packages/gatsby-plugin-purgecss/&quot;&gt;https://www.gatsbyjs.org/packages/gatsby-plugin-purgecss/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;プラグイン時の設定で開発時でもpurgecssを動かすかどうか決められるのですが、
デフォルトではビルド時しか動かないので、ビルドするまで気づかなかったという
感じです。&lt;/p&gt;
&lt;h2 id=&quot;原因特定の経緯&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8E%9F%E5%9B%A0%E7%89%B9%E5%AE%9A%E3%81%AE%E7%B5%8C%E7%B7%AF&quot; aria-label=&quot;原因特定の経緯 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;原因特定の経緯&lt;/h2&gt;
&lt;p&gt;prismjsがビルド時に効かない問題の事象ときてはdevelop時は普通に動くけどbuild時には動かないという所だったので、
それぞれの条件でどういう所に差異があるのかなとか考えながら色々と見ていると、
gatsby-config内にpurgecssといういかにもcssをいじっているそうな奴がいたので
コメントアウトしてビルドすると見事にシンタックスハイライトが効くようになりました。&lt;/p&gt;
&lt;p&gt;原因が判明した後にビルドの出力をみてみると、こんな感じで結果を出力してくれてました。
（purgeしたら75%もサイズが小さくなってますね。）&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2019/01/20190111_not-work-prismjs-on-build/purge-result.png&quot; alt=&quot;perge result&quot;&gt;
&lt;p&gt;さらに良く調べてGatsbyのプラグインのページでドキュメントを確認すると、
purgeした結果を出力できるようです。&lt;/p&gt;
&lt;p&gt;gatsby-configでprintRejected、printAllをtrueにすると取り除かれたcssを確認できます。&lt;/p&gt;
&lt;h5&gt;gatsby-config.js&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;gatsby-plugin-purgecss&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;printRejected&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;printAll&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この設定で再度ビルドすろと、
cssフレームワークとしてmaterializeを入れているのでそこらへんの使用していないセレクタ達がバスバスpurgeされていて、
見事にprismjsもパージされていました。&lt;/p&gt;
&lt;h2 id=&quot;Prismjsを取り除かないように設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Prismjs%E3%82%92%E5%8F%96%E3%82%8A%E9%99%A4%E3%81%8B%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;Prismjsを取り除かないように設定 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Prismjsを取り除かないように設定&lt;/h2&gt;
&lt;p&gt;原因がわかったのでPrismjsが取り除かれないように設定します。
ignoreオプションが用意されているのでそこにprismjsを加えて完了です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;diff&quot;&gt;&lt;pre class=&quot;language-diff&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;{
&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; resolve: `gatsby-plugin-purgecss`,
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; options: {
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;   printRejected: true,
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;   printAll: true,
&lt;/span&gt;&lt;span class=&quot;token inserted-sign inserted&quot;&gt;&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;    ignore: [&apos;node_modules/prismjs/&apos;]
&lt;/span&gt;
&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; }
&lt;/span&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;Selectorベースで取り除かないように設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Selector%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A7%E5%8F%96%E3%82%8A%E9%99%A4%E3%81%8B%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;Selectorベースで取り除かないように設定 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Selectorベースで取り除かないように設定&lt;/h2&gt;
&lt;p&gt;ライブララリベースだとprismjsがごっそりpurgeされていたのですが、
自分で書いたcssでもいくつか取り除かれてしまっているのがあったので、
whitelistにセレクタのパターンを書いてこちらも取り除かれないようにしました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;diff&quot;&gt;&lt;pre class=&quot;language-diff&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;{
&lt;span class=&quot;token unchanged&quot;&gt;&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; resolve: `gatsby-plugin-purgecss`,
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; options: {
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;   printRejected: true,
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;   printAll: true,
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;   ignore: [&apos;node_modules/prismjs/&apos;],
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt;   whitelistPatternsChildren: [/^post/, /^sns-buttons/]
&lt;span class=&quot;token prefix unchanged&quot;&gt; &lt;/span&gt; }
&lt;/span&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;詳しいオプションの設定はこちらで確認いただければと思います。
&lt;a href=&quot;https://www.gatsbyjs.org/packages/gatsby-plugin-purgecss/&quot;&gt;https://www.gatsbyjs.org/packages/gatsby-plugin-purgecss/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上、Prismjsがビルドした時に効かなかった話でした。&lt;/p&gt;
&lt;p&gt;取り込んでいるプラグインくらい把握しておけという話ではあるので、Gatsby使っているところでの
つまずきぽいんだったのでまとめておきます。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/01/20190111_not-work-prismjs-on-build/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[WordpressブログをGatsby+Netlifyでリプレースした話。]]></title><description><![CDATA[久しぶりの投稿ですが、新年始めての投稿になります。
しばらく投稿が滞りましたが、これには深い理由がありまして、
みてわかるようにこのブログSo Far, So Techを12月から年始にかけてせこせこと
Gatsby+Netlifyでリプレース作業をしていました。 結果的に…]]></description><link>https://ver-1-0.net/blog/2019/01/10/blog-renewal-by-gatsby</link><guid isPermaLink="false">https://ver-1-0.net/blog/2019/01/10/blog-renewal-by-gatsby</guid><pubDate>Thu, 10 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;久しぶりの投稿ですが、新年始めての投稿になります。
しばらく投稿が滞りましたが、これには深い理由がありまして、
みてわかるようにこのブログSo Far, So Techを12月から年始にかけてせこせこと
Gatsby+Netlifyでリプレース作業をしていました。&lt;/p&gt;
&lt;p&gt;結果的に1ヵ月ほど仕事の合間にせこせこ作業して今回無事リプレースを終えることができました。
Wordpressのブログよりまだまだ機能は少ないですが、今後も必要そうな機能をたしていこうかな
なんて思っております。&lt;/p&gt;
&lt;p&gt;Wordpressからの移行作業では紆余曲折いろいろなことがありましたので、
なんで機能豊富なWordpressをやめてGatsbyでサイトを作ろうと思ったのか、
移行で苦労した部分などをまとめます。&lt;/p&gt;
&lt;h2 id=&quot;なぜWordpressをやめたかなぜGatsbyNetlifyを選択したのか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%AA%E3%81%9CWordpress%E3%82%92%E3%82%84%E3%82%81%E3%81%9F%E3%81%8B%E3%81%AA%E3%81%9CGatsbyNetlify%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E3%81%AE%E3%81%8B&quot; aria-label=&quot;なぜWordpressをやめたかなぜGatsbyNetlifyを選択したのか permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;なぜWordpressをやめたか、なぜGatsby+Netlifyを選択したのか？&lt;/h2&gt;
&lt;p&gt;まず、なんでWordpressをやめたのかというところですが
大きく分けてここらへんになると思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wordpressのコードと向き合う勇気がもてなかった。&lt;/li&gt;
&lt;li&gt;CSS書くのがつらい。&lt;/li&gt;
&lt;li&gt;コードがgit管理できない。コードミスると一発でサイトが動かなくなる。&lt;/li&gt;
&lt;li&gt;もっとカジュアルに記事をかきたい。(Markdownなど)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;一応箇条書きにしましたが、Wordpressをやめたかった理由は&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「Wordpressのコードと向き合う勇気が持てなかった」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;という一言につきると思います。&lt;/p&gt;
&lt;p&gt;Wordpress導入当初は、ブログを書くために導入コストの低いWordpressを選択しましたが、
ブログを続けているうちにだんだんとWordpressがつらくなってきました。&lt;/p&gt;
&lt;p&gt;普段の開発の仕事はPHPを書いているわけでもないし、Wordpressを使って仕事している
わけでもないのでWordpressと悪戦苦闘しながら現在の標準になっているような開発
の仕方を取り入れていくことに全くもってメリットを感じませんでした。&lt;/p&gt;
&lt;p&gt;cssを書くにも、コードを修正する、ソースを管理するにもなんにしても
Wordpress独自の手法をインプットしつつこのサイトに適用していくといく作業が非常に
苦痛に感じられました。&lt;/p&gt;
&lt;p&gt;その点、GatsbyはReact+Graphqlで静的サイトを構築できもちろん普段使い慣れた
npmパッケージも利用できるので自分の技術スタックとの親和性や興味の観点からで
もピッタリでした。&lt;/p&gt;
&lt;p&gt;記事をコードとして編集して、コミットしてmasterにプッシュすれば記事が公開
されるというのが普段の開発と同じようにできるので、仕事しながら記事を書く上で
抵抗なく使えます。&lt;/p&gt;
&lt;p&gt;まぁ色々と理由はあるのですが、
単純にGatsby使うとReactでコード書きながら自分のサイトを思い通りに構築できるので、
移行作業そのものが楽しかったですし、今後もストレス少なくサイトのメンテを行えそうです。&lt;/p&gt;
&lt;h2 id=&quot;リプレースにあたってやったこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%83%97%E3%83%AC%E3%83%BC%E3%82%B9%E3%81%AB%E3%81%82%E3%81%9F%E3%81%A3%E3%81%A6%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;リプレースにあたってやったこと permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リプレースにあたってやったこと&lt;/h2&gt;
&lt;p&gt;Wordpressからgatsbyに移行するにあたってやったことを載せておきます。
Wordpressはやはり機能豊富でgatsbyで一から全部作っていくのはなかなか
骨がおれましたが、だいたいどのサイトでも以下の作業は必要かな
という感じです。&lt;/p&gt;
&lt;p&gt;AMP対応は結構大変だったので、ここは個人の判断でリプレース前に対応するか、
リプレース後に対応するかというところは決めれば良いのではないでしょうか。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;記事の移行&lt;/li&gt;
&lt;li&gt;画像の移動&lt;/li&gt;
&lt;li&gt;Wordpressの機能の再現&lt;/li&gt;
&lt;li&gt;AMP対応&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;記事の移行&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A8%98%E4%BA%8B%E3%81%AE%E7%A7%BB%E8%A1%8C&quot; aria-label=&quot;記事の移行 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;記事の移行&lt;/h3&gt;
&lt;p&gt;WordpressはAPI機能があるのでそれを使えば、Wordpressで記事を書いてGatsby
側でAPIを叩いて記事を生成するということができそうなのですがWordpressとの
関係をなるべく切って行きたかったので、既存の記事をSQLでcsvとして出力して
スクリプトを書いてmarkdownに変換してきました。&lt;/p&gt;
&lt;p&gt;スクリプトは慣れているrubyで書きました。
&lt;a href=&quot;https://github.com/version-1/blog/blob/master/scripts/wp2md/index.rb&quot;&gt;https://github.com/version-1/blog/blob/master/scripts/wp2md/index.rb&lt;/a&gt;
(一度変換したあとは使っていないのであまり綺麗ではないです。）&lt;/p&gt;
&lt;p&gt;gatsbyではマークダウンのヘッダに記事のタイトルやテンプレートの情報を
書き込むのでcsvから必要な情報を抜き出し、ヘッダに書き込み、記事部分は
そのままcsvのものを突っ込むようなスクリプトです。&lt;/p&gt;
&lt;p&gt;wordpressで記事は基本的にhtmlで書かれますが、markdownがhtmlのタグ
も許容しているので記事部分はそのままコピーしています。&lt;/p&gt;
&lt;p&gt;ただescapeされているhtmlを元に戻す作業など地味だけど大変な作業もありました。&lt;/p&gt;
&lt;h3 id=&quot;画像の移動&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%94%BB%E5%83%8F%E3%81%AE%E7%A7%BB%E5%8B%95&quot; aria-label=&quot;画像の移動 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;画像の移動&lt;/h3&gt;
&lt;p&gt;画像の移動はとりあえず、手元から配信する感じにすればいいやーという
甘い考えで取り組みました。
画像はwordpressの物をそのままコピーしてきてもよかったのですが、
どの記事でどの画像を使っているのかが一発でわかると楽なので、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;[ 記事ディレクトリ ] +- index.md
                     |- image1.png
                     |- image2.png&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のような形で保存されるように工夫したりしました。&lt;/p&gt;
&lt;p&gt;こちらもスクリプト書いて対応しました。
&lt;a href=&quot;https://github.com/version-1/blog/tree/master/scripts/fetchImages&quot;&gt;https://github.com/version-1/blog/tree/master/scripts/fetchImages&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ただ、手元に画像を保存してgatsby-imageで画像を読み込む感じにしたところ
開発中でも都度画像がblobに変換されるのでビルド時間がのびて開発中とても
ストレスフルな状態になったので、
画像は外部に置く感じにしてs3 + cloudflareで配信するようにしました。
(手元に画像はあったので階層構造そのままs3にアップロードしました。)&lt;/p&gt;
&lt;h3 id=&quot;Wordpress機能の再現&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Wordpress%E6%A9%9F%E8%83%BD%E3%81%AE%E5%86%8D%E7%8F%BE&quot; aria-label=&quot;Wordpress機能の再現 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Wordpress機能の再現&lt;/h3&gt;
&lt;p&gt;自分で実装するとわかるのですが、WordpressおよびWordpressテーマ、プラグインには豊富な
機能があり、自分で実装するとそのありがたみがわかってきます。AMPなどもそうですが、
ありがたみを感じながら、Wordpressとの縁を断つべく感謝の移行作業の一覧はこちらです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;レイアウトの変更&lt;/li&gt;
&lt;li&gt;ページネーション&lt;/li&gt;
&lt;li&gt;sns ボタン&lt;/li&gt;
&lt;li&gt;GA&lt;/li&gt;
&lt;li&gt;Adsense&lt;/li&gt;
&lt;li&gt;ogp&lt;/li&gt;
&lt;li&gt;rss&lt;/li&gt;
&lt;li&gt;404ページの作成&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これら全部が全部自前で実装したわけではなく、プラグインを導入したりしたものが
ほとんどなのですが、wordpressで実装されていた機能を洗い出し取捨選択して実装していく
一連の作業がそれなりに骨が折れました。&lt;/p&gt;
&lt;p&gt;Adsenseの埋め込みなどは、記事外部には自由にreactコンポーネントで実現できるのですが
記事内(マークダウン内）にどうやってAdsenseをはめ込むかなどは考えて実装しました。&lt;/p&gt;
&lt;p&gt;Gatsbyという記事を採用する以上ここの大変さはある程度しょうがないですが、リプレースに
むけて本当に必要な機能を絞り込んで実装していくのが大切かなと思います。
実際現状関連記事の表示や月別アーカイブ、タグ機能、検索などなど機能が不足しているので
おって実装していく形です。&lt;/p&gt;
&lt;h3 id=&quot;AMP対応&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#AMP%E5%AF%BE%E5%BF%9C&quot; aria-label=&quot;AMP対応 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;AMP対応&lt;/h3&gt;
&lt;p&gt;これが4つの中で一番大変でした。単純な記事のAMP化もあるのですがvideoタグやiframeなど
などそれぞれのタグが必要だったりadsense, gaなども個別で対応必要だったりして大変でした。&lt;/p&gt;
&lt;p&gt;当初はプラグインがあるので「これで行けんじゃね？？」と思っていたのですが、
プラグインが思うように動かず自分で実装しました。
(jsdomがうまく動かずとりあえずissueだけあげときました。)&lt;/p&gt;
&lt;p&gt;自分で実装してnetlifyにあげた時にこれだけのAMPエラーが見えた時はさすがに心が折れかけました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://statics.ver-1-0.xyz/uploads/2019/01/20190110_blog-renewal-by-gatsby/amperror.png&quot; alt=&quot;AMPエラー&quot;&gt;&lt;/p&gt;
&lt;p&gt;gatsbyでのAMP対応は大変だった分学びも多かった気がするので別途記事にするかもしれません。&lt;/p&gt;
&lt;h2 id=&quot;Gatsby導入をオススメする人の特徴&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#Gatsby%E5%B0%8E%E5%85%A5%E3%82%92%E3%82%AA%E3%82%B9%E3%82%B9%E3%83%A1%E3%81%99%E3%82%8B%E4%BA%BA%E3%81%AE%E7%89%B9%E5%BE%B4&quot; aria-label=&quot;Gatsby導入をオススメする人の特徴 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Gatsby導入をオススメする人の特徴&lt;/h2&gt;
&lt;p&gt;今回Gatsby+Netlifyでブログをリプレースしましたが、
やっぱり自分の興味ある技術を使って開発をしていくと多少大変でも面白みがありました。&lt;/p&gt;
&lt;p&gt;そんな中で、実際にGatsby導入をおすすめする人の特徴をまとめると
こういう感じになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wordpress辞めたい&lt;/li&gt;
&lt;li&gt;ブログも普段の開発同様の運用にしたい&lt;/li&gt;
&lt;li&gt;Reactが使える（使えるようになりたい）&lt;/li&gt;
&lt;li&gt;英語のドキュメントが読める&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここまで色々と書きましたがGatsbyで実際にブログを構築していくにはそれなりの
技術力が必要だと感じています。日本語の情報はやはり少ないですし英語のドキュメントを
読みながら試行錯誤していく必要があります。&lt;/p&gt;
&lt;p&gt;ただ、Gatsby+Netlifyのような構成でブログを構築すればほぼお金がかからず
(ドメイン代くらい）
にすむのでレンタルサーバ+Wordpressよりは安くすみそうですし、
Reactを初めしたWebフロント力をつけていくことができます。&lt;/p&gt;
&lt;p&gt;Wordpressやめたいんだけどなんか良いCMSライブラリないかなぁなんて人にはオススメです。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回のリプレースは大変でしたが、Graphql使ったりnetlify使ったり、Reactのコード書いたりで
楽しみながら作業させてもらいました。&lt;/p&gt;
&lt;p&gt;AMP対応などなどそれぞれの知見は記事にできればなと考えておりますので折を見て投稿していきます。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2019/01/20190110_blog-renewal-by-gatsby/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[フリーランスエンジニアが初めに選ぶオススメのフリーランスエージェント3選。]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2018/12/03/freelance-agent-select</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/12/03/freelance-agent-select</guid><pubDate>Mon, 03 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;フリーランスになる時の手っ取り早い方法がエージェントに案件を紹介してもらい、案件に参画することですが、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「エージェントってどこが良いの？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「それぞれどんな所に違いがあるの？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;という疑問があると思うので、自分なりにここらへんが良いのではというエージェントをいくつか選びました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「エージェントをつかうメリット・デメリットは？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「そもそもフリーランスって良いの？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;みたいなところは、一旦置いておいて（下の方でそれぞれ書いています）オススメのエージェントを紹介します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;おすすめエージェント3選&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;はじめて会った人などにフリーランスです。と自己紹介をすると「どうやって仕事みつけてるんですか？」と聞かれることが多いのですが、答えはまあ色々です。フリーランスなりたての頃はエージェントを使って常駐の案件紹介してもらいましたし、他にも知り合い、Twitter、ブログなどさまざまです。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://ver-1-0.net/2018/11/26/how-to-be-enginner/&quot; data-blogcard=&quot;1&quot;&gt;フリーランスエンジニアなるには？ソフトランディング戦略でいってみよう&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;さらに「結局どうやって仕事見つけるのがいいんですかね？」という質問がありますがフリーランスなりたての人にはエージェントを使って案件獲得するのをオススメしています。理由は後ほど紹介しますが、私のオススメエージェントはこちらです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;レバテックフリーランス&lt;/h3&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/12/20181203_freelance-agent-select/levatech.jpg&quot; alt=&quot;levatech.jpg&quot;&gt;
&lt;p&gt;引用元: &lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2ZAXFD+FJ244Q+2JK4+1THW9E&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;レバテックフリーランス&lt;/a&gt;
&lt;img src=&quot;https://www17.a8.net/0.gif?a8mat=2ZAXFD+FJ244Q+2JK4+1THW9E&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;p&gt;個人的には&lt;strong&gt;一番有名だと思われるエージェント&lt;/strong&gt;さんです。有名なだけあって&lt;strong&gt;求人数も豊富ですし、企業へのヒアリングを通して「どんな企業がどんな人材を求めているか」を理解し高いマッチング制度を誇っている&lt;/strong&gt;そうです。&lt;/p&gt;
&lt;p&gt;実際に企業と面談を行う前には、個別にエージェントの面談も用意されていてこちらの今の状況や希望の案件などを伝えることができます。私自身こちらの転職サービスを過去に利用したことがあるのですが、チャットでやりとりができたり面談先の企業をスプレッドシートで管理していたりと迅速にやりとりができる工夫をされていて、気軽に情報交換ができます。&lt;/p&gt;
&lt;p&gt;他にも支払いが月末締めで翌月15日払いという支払いサイトの短さは地味に嬉しいです。エージェントの中には支払いが翌々月になってしまうところもあるので、支払いまでの速さは地味に嬉しいです。&lt;/p&gt;
&lt;p&gt;レバテックフリーランスのサイトから案件や参画時の単価などを見ることもできるので、一度ご覧になってみると良いと思います。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;js-ga-click-levatech-freelance&quot; id=&quot;levatech-1&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=2ZAXFD+FJ244Q+2JK4+1TMTQA&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;フリーエンジニアの案件探しは、レバテックフリーランス&lt;/a&gt;
&lt;img src=&quot;https://www19.a8.net/0.gif?a8mat=2ZAXFD+FJ244Q+2JK4+1TMTQA&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;h3&gt;ITプロパートナーズ&lt;/h3&gt;
&lt;a href=&quot;https://itpropartners.com/&quot;&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/12/20181203_freelance-agent-select/itpro.jpg&quot; alt=&quot;itpro.jpg&quot;&gt;
&lt;/a&gt;
&lt;p&gt;（引用元: &lt;a href=&quot;https://itpropartners.com/&quot;&gt;&lt;a href=&quot;https://itpropartners.com/&quot;&gt;https://itpropartners.com/&lt;/a&gt;&lt;/a&gt; )&lt;/p&gt;
&lt;p&gt;お次はITプロパートナーズです。&lt;strong&gt;こちらは週2,3日などフルタイムでないフリーランスの案件紹介を強み&lt;/strong&gt;としているエージェントさんです。&lt;/p&gt;
&lt;p&gt;こちらのエージェントさん自体私も利用したことがあるのですが、&lt;strong&gt;スタートアップで勢いのある企業さんの紹介が多く&lt;/strong&gt;エンジニアとして、フロントだけとかサーバだけなど分野を決めつけないで割と幅広くフルスタックな形でやりたいという方にはオススメなのかなと思います。&lt;/p&gt;
&lt;p&gt;また、週2,3日のように稼働を限った形の案件も紹介していただけるのでサービスを作りながら、生活資金を稼ぎたいみたいな方にはオススメです。（ただ、ある程度のスキルがないと週2,3日などの希望は通りづらいのでそこはご了承ください。。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;js-ga-click-it-propartners&quot; id=&quot;it-propartners-1&quot; href=&quot;https://itpropartners.com/&quot;&gt;こちら&lt;/a&gt;から無料登録できて、飛び先にどういった思いで事業を立ち上げたかなどの記事もあるのでご覧になると良いと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;ポテパンフリーランス&lt;/h3&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/12/20181203_freelance-agent-select/potepan.jpg&quot; alt=&quot;potepan.jpg&quot;&gt;
&lt;p&gt;引用元:&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2ZU6N8+37I6GA+3UES+BW8O2&amp;amp;a8ejpredirect=https%3A%2F%2Ffreelance.potepan.com%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;a href=&quot;https://freelance.potepan.com/&quot;&gt;https://freelance.potepan.com/&lt;/a&gt;&lt;/a&gt;
&lt;img src=&quot;https://www12.a8.net/0.gif?a8mat=2ZU6N8+37I6GA+3UES+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;p&gt;ポテパンフリーランスは、他のエージェントと同様エンド直での高単価な案件の紹介が強みです。また、ポテパンは、&lt;strong&gt;ポテパンキャンプというプログラミングスクールも運営していて技術や業界に詳しいコンサルタントにサポートしてもらうことができます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;少しサイトを見てみると&lt;strong&gt;案件獲得までには早ければ1〜3日、平均的に2週間以内には複数案件から選べる状況になっています。&lt;/strong&gt;というようなことなので気になる方はぜひ登録してみると良いかと思います。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;js-ga-click-potepan-freelance&quot; id=&quot;potepan-1&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=2ZU6N8+37I6GA+3UES+5YRHE&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;高単価案件が最短二日で決まる！【ポテパンフリーランス】&lt;/a&gt;
&lt;img src=&quot;https://www16.a8.net/0.gif?a8mat=2ZU6N8+37I6GA+3UES+5YRHE&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;h2&gt; エージェントを利用するメリット・デメリット&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;タイトルの都合上先にオススメのエージェントさんを紹介させて頂きましたが、ここからはエージェントを利用するメリット・デメリットを書かせて頂ければと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;エージェントを利用するメリット&lt;/h3&gt;
&amp;nbsp;
&lt;h4&gt;不慣れな契約や案件探しをサポートしてもらえる&lt;/h4&gt;
&amp;nbsp;
&lt;p&gt;ここは散々言われている部分ではあると思いますが、フリーランスなりたてのころは&lt;strong&gt;相場観がわからなかったり案件の進め方がわからなかったりするので業界経験の長いコンサルタントに色々と聞いてフリーランスについての知識を深めることができます。&lt;/strong&gt;（需要の多いプログラミング言語や現場のレベル感など）&lt;/p&gt;
&lt;p&gt;また、多くの方がこれまでエンジニアとしての社会人経験がメインの人が多いと思いますので契約の仕方などに不慣れな人が多いと思います。エージェントを使うと契約書の作成や現場との調整をお願いできるのでエンジニアとしての自分の作業に集中することができます。&lt;/p&gt;
&lt;p&gt;エージェントの方とは定期的に連絡をとることになるので今の現場の状況やこうしたいというのを伝えておくと、契約の切れ目などに「次どうしますか？」「ここの現場である程度経験をつめたので次の現場ではもうちょっと単価よくなりますよ。」などのアドバイスをもらえたりします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;組織体制の整った案件が見つかる&lt;/h4&gt;
&amp;nbsp;
&lt;p&gt;これは完全に肌感ですが、&lt;strong&gt;エージェントさんを通すと一定のスクリーニングが効いているのかある程度組織体制ができた会社に出会える気がします。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;もちろん、大企業レベルまで分業がされているわけではなくあくまでもスタートアップやベンチャーの企業さんが中心になるのですが、ベンチャー・スタートアップでもエンジニア・マーケ・営業などそれぞれのチームは小さいですが部署間の分業をしっかり図っており、組織としてのパフォーマンスが最大化されるような組織づくりをしようという意図が感じられる企業さんが多いです。（人手不足などの問題もやはりあり理想とはいえない部分も多くありますが）&lt;/p&gt;
&lt;p&gt;こういったそれぞれの社員が集中しやすい環境の現場に入れるとエンジニアは安心して自分の技術力と向き合いながら開発できるので、こういう現場に出会えると幸せなのかなと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;エージェントを利用するデメリット&lt;/h3&gt;
&amp;nbsp;
&lt;h4&gt;仲介手数料（マージン）の分収入が下がる&lt;/h4&gt;
&amp;nbsp;
&lt;p&gt;これもよく言われることですが、エージェントさんを挟む場合と挟まない場合では単純に企業さんとフリーランスの間にエージェントさんが入る形になるので、企業から支払われる報酬の一部がエージェントの取り分になります。&lt;/p&gt;
&lt;p&gt;そのため、&lt;strong&gt;直契約の場合とくらべ相対的にフリーランスへの報酬は少なくなります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;働き方の柔軟性がさがる。&lt;/h4&gt;
&amp;nbsp;
&lt;p&gt;エージェントさんを使った場合、会社員時代に比べれば圧倒的に働き方の柔軟性が出る可能性は高いですが、&lt;strong&gt;直契約に比べるとまだまだ働き方の柔軟性は低い&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;エージェントさんを利用すると基本は週5日の常駐案件が基本ですし、それなりのスキルがないとリモートワークの案件を獲得するのはなかなか難しいです。&lt;/p&gt;
&lt;p&gt;一方直契約の場合はクライアントさんとの関係性でだいぶ柔軟な働き方ができるので（現実として、リモートの仕事や週3日程度の仕事していますし界隈でそういう話も聞きます。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;フリーランスならエージェント使うべき？&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;エージェントを使うか使わないかという所に関する私の意見では、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;エージェント使う場合と使わない場合でメリデメあるのでそこ理解しながら使い分けましょうね。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;というところが最終的なところです。&lt;/p&gt;
&lt;p&gt;ある程度のフリーランス歴が長いと業界でのつながりができていたりして、知り合いに案件聞きながらという形でも回せるのですが駆け出しフリーランスや現在会社員の方はそういったつながり少ないので、エージェントを使ってさっと案件に参画して実績なり経験なりつながりなりを作ってしまった方が良いと思われます。&lt;/p&gt;
&lt;p&gt;一方、エージェントしか案件獲得できない状態だと多くの人が希望するであろうリモートワークや週3日などの案件を実現するのが難しくなるので、個人レベルで案件獲得できるスキルを磨くことも大切です。&lt;/p&gt;
&lt;p&gt;なので、エージェントを使うか？というところに対してはケースバイケースというあやふやな答えしかできないのですが、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;これからフリーランスを始める方にはエージェントを利用して案件獲得するのがオ&lt;/strong&gt;&lt;strong&gt;ススメ&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;というのは行っておきたいと思います。「フリーランスになろうかな〜。どうしようかな〜」と悩んでいる方は多いと思いますが、どれか一つエージェントさんに登録してしまえば色々な話もきけるので、考える前にまず行動という形でぜひ一度エージェントさんの話を聞いてみるとよいでしょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;ぶっちゃけフリーランスって良いの？&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまで、これからフリーランスになるならエージェントさん使いましょうというところやエージェントと直契約のメリ・デメみたいなところをお話しましたが、こちらを読まれている方からすると&lt;strong&gt;「フリーランスって実際どう？」&lt;/strong&gt;というところも気になるのではないでしょうか？&lt;/p&gt;
&lt;p&gt;幸いなことにフリーランスになって今までのところ年収も増えて働き方も柔軟になってReact,Vueなどの割と新しい技術を使いながら仕事ができているので本当に&lt;strong&gt;フリーランスになってよかったと思っています。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;なので、これからフリーランスになるか悩んでいる人は一回やってみればと思っています。&lt;/p&gt;
&lt;p&gt;ただ、ここ一年くらいフリーランスとして働いてみるとやっぱり、&lt;strong&gt;「エンジニアとして何歳くらいまでコード書いて仕事できるかなぁ」&lt;/strong&gt;という不安は常に付きまといます。&lt;/p&gt;
&lt;p&gt;コードがかけることはそれだけで十分素晴らしい専門性で価値のあることだとは思っているのですが、40歳になって人並みにコードかけるだけとなるとちょっと厳しいかなという感じもありますし個人的に人生色々なことに挑戦してみたいという志向がある私にとっては少しものたりない部分も感じます。&lt;/p&gt;
&lt;p&gt;なので、フリーランスエンジニアという部分をベースに今後もう少し自分の幅を広げられる活動ができると良いのかなというのも考えています。&lt;/p&gt;
&lt;p&gt;フリーランスという働き方は本当になにするにも自由なので、何もしないでただ目の前の案件をこなすということもできるのですがそれだとフリーランスである意味をあまり感じないです。&lt;/p&gt;
&lt;p&gt;なのでフリーランスエンジニアとしてやりつつも自分のサービスも作りたい！や空き時間を利用して飲食店やってみたいなどなどフリーランスという働き方を生かして複数の物事にチャレンジできる人はぜひやってみると良いと思います。&lt;/p&gt;
&lt;p&gt;また、↑このようにエネルギッシュに振る舞えるかわからないけど、やってみたいという人は一度フリーランスになってみてから考えるということでも良いと思います。周りでもフリーランスになった後にやっぱちがうとなって会社員に戻る方もいるのでそういうキャリアも全然ありだなと思います。&lt;/p&gt;
&lt;p&gt;フリーランスという状況を楽しめて行動できる方にはぜひともオススメですし、色々悩んでいるけどやっぱりフリーランスになりたい！という方には一度フリーランスになって考えることをオススメししておきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;先の項目にもかきましたがフリーランスという働き方を楽しめる人にはフリーランスおすすめです。「そんなのなってみないとわからないよ！」というのも確かにそうだなと思います。実際私も「やってみたいし、なってみないとわからないことも多いから」というのがフリーランスになった動機でした。&lt;/p&gt;
&lt;p&gt;これからフリーランスになる方にはエージェントを利用して生活の基盤を固めた上でフリーランスをスタートさせるのがオススメですので上にかいたようなことを参考にしながらスタートを切って頂ければと思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/12/20181203_freelance-agent-select/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[フリーランスエンジニアなるには？ソフトランディング戦略でいってみよう]]></title><description><![CDATA[どうも、フリーランスのエンジニアをしております。version-…]]></description><link>https://ver-1-0.net/blog/2018/11/26/how-to-be-enginner</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/11/26/how-to-be-enginner</guid><pubDate>Mon, 26 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうも、フリーランスのエンジニアをしております。&lt;a href=&quot;https://twitter.com/version1_2017&quot;&gt;version-1&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt;そろそろフリーランスになって一年が立とうとしているので、フリーランスのなり方みたいなところを書いてみたいと思います。&lt;/p&gt;
&lt;p&gt;フリーランスのなり方みたいなところはネット上にたくさんの記事が乗っていますが、リアルな世界で割と「フリーランスってどうやってなるんですか？どうやって仕事とってるんですか？」のような質問されることが多いので改めてまとめておこうかなとおもいました。&lt;/p&gt;
&lt;p&gt;一応簡単に経歴を説明するとSIer二年半ののちに、事業会社の社内エンジニアを経て昨年独立して、現在はRails, React/Vueなどの技術をメインに自社サービスを開発している会社様のお仕事を手伝わせていただいているような形になっています。&lt;/p&gt;
&lt;p&gt;幸いなことに、フリーランス一年目から収入的には安定し、月ごとの売り上げが乱高下することなく徐々に上がってきていて、フリーランスのスタートととしてはまずまずの成果があげられたのかなと思っているので、自分がフリーランスとして安定的に仕事をとれるまでどういう意識で取り組んでいたかを書いていきたいと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;ソフトランディング（やわらかな着地）戦略とは？&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/11/20181126_how-to-be-enginner/luggage-1799224_640.jpg&quot; alt=&quot;luggage-1799224_640.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これはタイトルに書いて「？？？」となった人もいるかとおもうのですが、勝手にわかりやすいように名前をつけました。&lt;/p&gt;
&lt;p&gt;これは特段特別なことはなく、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;フリーランスの最初のうちは、エージェントなどを使って常駐型の案件を獲得して正社員の時とあ&lt;/strong&gt;&lt;strong&gt;まり変わらない状態ではじめよう&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;というとことです。&lt;/p&gt;
&lt;p&gt;要は「フリーランスになる！」とかいって思いっきり覚悟決めて、今までリモートとか全然やったことがないのにリモートの案件しか探さない。エージェントに仲介手数料とられるのがいやだから最初から不慣れな直契約を獲得のために動く。などの&lt;strong&gt;フリーランスっぽい感じをいきなり目指さない&lt;/strong&gt;ということです。&lt;/p&gt;
&lt;p&gt;フリーランスになる方はやはり自由な働き方や高単価を求めていることが多いと思いますが、いきなりそこを目指すよりは徐々にそこに近づいていくというのが現実的で精神的に負担が少ない戦略なのかなと思っています。&lt;/p&gt;
&lt;p&gt;実際私自身もフリーランスになる前に、知り合いのエージェントさんに相談してこれくらいの経歴であればフリーランスでもいけますよ。と言われたのでそこから常駐の案件に参画して、10ヶ月くらいかけてフルリモートにシフトしていきました。&lt;/p&gt;
&lt;p&gt;正直なところ、常駐型のフリーランスのエンジニアになると正社員と変わるのは単価とかくらいなのでフリーランスになってからも正社員の時と同じような形ではたらけてあまり変化はないです。&lt;/p&gt;
&lt;p&gt;ここに安住してしまうのはよくないですが、フリーランスになって最初はやはり不慣れなことも多いので劇的に環境を帰るのではなくこういった周りのサポートを受けやすいような形でソフトランディングしていけば良いのではないでしょうか？&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;エージェントを使用するか？知り合いつたいか？&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/11/20181126_how-to-be-enginner/figures-1372458_640.jpg&quot; alt=&quot;figures-1372458_640.jpg&quot;&gt;
&lt;p&gt;フリーランスエンジニアになる文脈でエージェントに紹介してもらうのか、知り合いに紹介してもらうのかといった話はありますが、&lt;strong&gt;個人的にもともとベンチャー、スタートアップでバリバリ仕事していてい知り合いがたくさんいるとかでなければエージェントを利用してスタートをするのが得策です。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;エージェントさんを利用すると企業側から支払われる一定の割合がエージェントさんの取り分となるわけで、相対的に直契約に比べて個人事業主側の取り分が少なくなりがちです。ここはデメリットに思われる方も多いの方思うのですが、やはりある程度しっかりしたエージェントさんに紹介してもらえる企業というのはビジネスなどトータルでみてしっかりしている企業さんをチョイスして紹介してもらえるので十分にエージェントさんを利用する価値はあります。&lt;/p&gt;
&lt;p&gt;特にフリーランス始めたての頃というのは、&lt;strong&gt;フリーランス同士のつながりみたいなのも少ないことが多いので最初の案件でしっかりした企業さんのプロジェクトに参画して繋がりを作れると良いのではないでしょうか？&lt;/strong&gt;私もフリーランスとして最初に受けた案件は常駐の仕事でしたが、現場には同じようなフリーランスの方もいてそこで知り合いになれたり、企業の中のエンジニアと知り合えたりというのができて大変よかったです。&lt;/p&gt;
&lt;p&gt;知り合いつてでフリーランスを始めるのも良いのですが、自分の知り合いで成長段階の企業である程度社員もいて体制が整っている、最新の技術をキャッチアップしているという人と知り合いであることは少ないので、そういった会社とのコネクションを持っているエージェントに頼るというのは全くおかしいことではありません。&lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2018/12/03/freelance-agent-select&quot;&gt;フリーランスエンジニアが初めに選ぶオススメのフリーランスエージェント3選。&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;参画案件の成長性って関係あるの？&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/11/20181126_how-to-be-enginner/question-mark-2123967_640.jpg&quot; alt=&quot;question-mark-2123967_640.jpg&quot;&gt;
&lt;p&gt;こういう話をしていると&lt;/p&gt;
&lt;p&gt;「業務委託でちゃんと支払いだけもらえれば、企業の成長とかはスコープ外だ」&lt;/p&gt;
&lt;p&gt;ということを言われる方もいるかとは思うのですが（個人的にはあまり同意できない意見です）、やはり組織としてある程度成熟しているか成長している会社でないとエンジニアとしての普段の業務にも支障がでてきます。&lt;/p&gt;
&lt;p&gt;やはりエンジニアですと自分の作った機能は使ってもらいたいですし、使われるかどうかわからない機能は実装したくないと思うのですが、マーケティング体制などが弱く感覚で機能を実装するやりがいを感じられないような所にいると徐々に開発へのモチベーションが下がってきたりすることも往々にあります。&lt;/p&gt;
&lt;p&gt;また、ある程度小さな会社だと多めにみる部分はありますが、社員の出入りの激しい現場では開発へのノイズも多いです。&lt;/p&gt;
&lt;p&gt;個人的な肌感ではあるのですが、エージェントさんから紹介される企業はやはり売り上げや成長性などもしっかりあり組織としても強い印象があるのでフリーランスの始めのほうにそういった会社さんで働かれるのをオススメします。&lt;/p&gt;
&lt;p&gt;正社員の転職でもある程度名の知れた企業につとめていた人が転職の時に有利になるのと同様にフリーランスでも前の現場の実績が評価されるのである程度しっかりした会社の案件に参画するというのは後のフリーランス人生を考えても有利に働きます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;常駐型案件に入ったあとは？&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/11/20181126_how-to-be-enginner/binoculars-1209011_640.jpg&quot; alt=&quot;binoculars-1209011_640.jpg&quot;&gt;
&lt;p&gt;ここまでの戦略を実践して、常駐型案件に入った後の話ですが最初の案件で徐々にリズムが掴めてきたらだんだんと&lt;strong&gt;自分のやりたい方に近づけるためのアクションをとれると良いのでしょうか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;私の場合は、働く際の場所への依存を一回取り払いたかったのと単価をあげたかったので常駐案件は週4日程度に抑えて並行で案件を探して、見つけた週二の案件を同時に並行して行いました。この週二の案件はリモートだったのですが、エージェントさんの案件ではまだまだリモートができるかつ週二、三日でOKな案件はまだまだ少ないのでフルリモートを目指される方は常駐の案件をベースに個人で（エージェントを使わずに）リモートの案件を探されると良いです。&lt;/p&gt;
&lt;p&gt;リモートの案件の獲得のために使える手段としてはは、twitter、ブログ、各種勉強会やミートアップ、同じ現場の人の知り合い、前の職場の同僚などではないでしょうか？&lt;/p&gt;
&lt;p&gt;私の場合はこのブログでの案件を獲得した実績もあり、そこまで多くに読まれるブログでもないのですが一定数スカウトのメールみたいなものは届くのでブログの更新というのは割とオススメの方法です。&lt;/p&gt;
&lt;p&gt;ここでは、リモート案件獲得についてしかいていないですが他にもエンジニア以外の仕事をやりたい！などなど色々な方向性はあるのである程度フリーランスに慣れてきた所でつぎのアクションをとり徐々に目標に近づけていくという戦略をとってみるのをオススメします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;related-post&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;/2018/10/14/full-remote-engineer&quot;&gt;フルリモートエンジニアになったので、これまでの経緯をまとめてみた。&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまでソフトランディング戦略という勝手に名付けた方法について説明しましたが、いかがだったでしょうか？&lt;/p&gt;
&lt;p&gt;簡単にまとめると&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;&lt;strong&gt;エージェントを利用して常駐型案件獲得&lt;/strong&gt;&lt;/li&gt;
 	&lt;li&gt;&lt;strong&gt;並行して別案件を探す&lt;/strong&gt;&lt;/li&gt;
 	&lt;li&gt;&lt;strong&gt;自分の目指したい方向性をめざしてアクションをとる。(リモート案件や高単価案件など）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
となります。難しいことはないです。ただたソフトランディングしていきましょうということです。
&lt;p&gt;また、書いてみて気づいたのですが、これはここまでに僕がとった戦略を説明しただけで必勝法でもなんでもなくある意味ポジショントークです笑。&lt;/p&gt;
&lt;p&gt;とはいえ、一年という短い期間ですがここまで大きなストレスやブラック化することなく続けられている一定の成果が期待される方法ですので一つのモデルケースとして記憶にとどめておいて頂ければと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;a class=&quot;js-ga-click-levatech-freelance&quot; id=&quot;levatec-1&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=2ZAXFD+FJ244Q+2JK4+1TIR4H&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;
&lt;img src=&quot;https://www24.a8.net/svt/bgt?aid=180228793939&amp;amp;wid=004&amp;amp;eno=01&amp;amp;mid=s00000011866011005000&amp;amp;mc=1&quot; alt=&quot;&quot; width=&quot;350&quot; height=&quot;240&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;img src=&quot;https://www18.a8.net/0.gif?a8mat=2ZAXFD+FJ244Q+2JK4+1TIR4H&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/11/20181126_how-to-be-enginner/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[フルリモートエンジニアになったので、これまでの経緯をまとめてみた。]]></title><description><![CDATA[この度1…]]></description><link>https://ver-1-0.net/blog/2018/10/14/full-remote-engineer</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/10/14/full-remote-engineer</guid><pubDate>Sun, 14 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;この度10月からフルリモートエンジニアになったので、振り返りがてらフルリモートのエンジニアになるためにやったことをまとめました。&lt;/p&gt;
&lt;p&gt;フルリモートというのは、フリーランスのエンジニア（業務委託のエンジニア）の仕事というと常駐型（お客様先のオフィスに行ってそこで仕事をする）とリモート型（家でお仕事）に別れるのですが、このリモート型の案件だけを持っている状態を個人的にフルリモートと呼ばせて頂いています。&lt;/p&gt;
&lt;h2&gt;フルリモートになるためにやったこと&lt;/h2&gt;
「フルリモート」という働き方が自分の中で現状そこまで優先順位が高くなかった（単価などの方が気になっていました。。）のですが、移動せずに仕事ができるのであればそれが理想の環境でもあるので少し嬉しくラッキーという感じです。
&lt;p&gt;これやれば絶対リモート案件とれる！みたいなのではないですが僕が実際に行ったことでフルリモートになるに当たってプラスに働いことをあげてみます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;ブログを書く&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;これは予想外だったのですが、ブログ経由でお仕事の依頼を受けることがありました。単発の仕事もありますし、継続的なものもあります。このブログ自体そこまでPVも多くないので見ているひとは見ているのだなと感じました。ブログ経由でコンタクトをとってくるような会社さんだと柔軟な考え方をされる方が多いので比較的働き方も自由なのではないでしょうか？&lt;/p&gt;
&lt;p&gt;以前、どこかの記事でブログにTipsの様なものを書くのも大事だけど、&lt;strong&gt;仕事への考え方とか大事にしているものが見える記事も載っけておく&lt;/strong&gt;とオファーも出しやすいよというのを見たことがります。その人が考えていること、関心ごとがみえるブログだとそういう仕事のオファーもきやすいのかなと思いました。（ちなみに、僕の場合はオファーした会社が使っていた技術で検索上位に来ていたから連絡がきたらしいです。。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;スタートアップなど比較的若い会社とお仕事をする&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;スタートアップなど比較的若い会社ではリモート勤務のメリットを理解している場合が多く交渉によってリモートにできたり、そもそも常駐しているひとがあまりいないなんてことも多くあります。&lt;/p&gt;
&lt;p&gt;僕自身小さいチームで仕事をする方が好きで、スタートアップの雰囲気なども好きなのでそういう案件の話が来ることが多いのですがフリーランス自体働き方みたいな部分は本当にクライアントさんに左右されるので、自分にあった働き方ができる会社というのがどういうものかというのはなるべく明確に持っていると良いです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;フリーランスになったことを公言する&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;FacebookでもTwitterでもInstagramでもなんでも良いのですが身近なつながりのある人たちに対してフリーランスになったことを伝えるのは意外と大事です。各種SNSだと前に一緒に仕事をしていた人と繋がっていることも多いのでそういった場で自分がフリーランスであることをしっかり書いて共有しておくと、エンジニア必要な知り合いが連絡してきて頂けたり、仕事を紹介してもらえたりします。&lt;/p&gt;
&lt;p&gt;エンジニアは供給不足なんてのもよく言われますが、本当にちょっとした知り合いから連絡もらえることも多いので、フリーランスの方々はこう行ったところも意識して発信できるとよいかもしれません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;フルリモートになって実際のところどう？&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;フルリモートになって、やはり通勤がないぶん&lt;strong&gt;朝の隙間時間にブログ書けたり、コード書けたり、勉強ができる&lt;/strong&gt;のでやっぱり快適だなという感じです。&lt;/p&gt;
&lt;p&gt;ただ仕事ベースで考えるとずっーーーと家にいて仕事しているというのはやはり辛そうです。人と話さなくなるというのもそうかもしれませんが、&lt;strong&gt;現場にいないとプロジェクトの進み具合や温度感が雑談などを通して入ってこないのでやはりコミュニケーションの部分で限界を感じつつあります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;週に二、三回も出勤する必要はなさそうですが、二週に一二回は出勤してチームのメンバーと雑談したり打ち合わせしたりをするっていうのを意識的にやっていかないと仕事を進めるのに支障をきたしそうな気配を感じております。&lt;/p&gt;
&lt;p&gt;ここらへん私自身もリモートの経験はまだまだなのでどうやるのが良いのかわからないのですが、仕事をしていきつつベストプラクティスを見つけていければなという感じです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回はフルリモートエンジニアになったので、節目としてこういう形でまとめさせていただきましたが「フルリモート最高！！」みたいな感じではないです。リモートも常駐もやはりそれぞれ一長一短あるのでそれぞれを組み合わせつつうまくワークする仕組みを模索できればなとおもっています。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/10/20181014_full-remote-engineer/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[これやっておけば・・・とならないために。アメリカに行く前の準備まとめ]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2018/09/21/prepare-travel-to-usa</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/09/21/prepare-travel-to-usa</guid><pubDate>Fri, 21 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;この度一週間ほど、アメリカ旅行にいってきたのでアメリカに初めて行く方のためにアメリカ旅行のための準備をまとめておきます。&lt;/p&gt;
&lt;p&gt;アメリカは今回二回目、海外旅行自体もすでに数回こなしているので今回は大丈夫！かと思いきや同行者の準備も含めて万全の準備というのはなかなかなか難しいです。&lt;/p&gt;
&lt;p&gt;次回旅行する際にぬかりない旅行をするためにもここに記事として残しておきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;パスポート&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/passport-315266_640.jpg&quot; alt=&quot;passport-315266_640.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これは言わずもがな、&lt;strong&gt;国外に出るのであればパスポートは必須です。&lt;/strong&gt;また海外で飲酒する際やカジノ、クラブなどに入場する際にID(身分証明書）の提示を求められることも多いので海外旅行時は常に携帯しておきたいもののひとつです。&lt;/p&gt;
&lt;p&gt;申請の豊富おは住民登録をしている都道府県のパスポート申請窓口での申請になります。&lt;/p&gt;
&lt;p&gt;詳しい方法はここでは書かないので下記外務省のリンクを参考にしていただけるとよいかと思います。
&lt;a href=&quot;https://www.mofa.go.jp/mofaj/toko/passport/pass_2.html&quot;&gt;&lt;a href=&quot;https://www.mofa.go.jp/mofaj/toko/passport/pass_2.html&quot;&gt;https://www.mofa.go.jp/mofaj/toko/passport/pass_2.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;申請してから取得までは長くても&lt;strong&gt;10日間&lt;/strong&gt;ほどでできるようですが、&lt;strong&gt;各種住民票や戸籍謄本などの準備も必要なので90~60日前くらいからは動きだして、余裕を持って準備を進めていきたいですね。&lt;/strong&gt;後述するESTA申請もあるので早めの準備を心がけたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;航空券&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/airport-690556_640.jpg&quot; alt=&quot;airport-690556_640.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こちらも言わずもがなですが、アメリカ渡航のためのチケットです。候補としては、&lt;strong&gt;JAL,ANAやDelta,American、他アジア系航空会社&lt;/strong&gt;などありますがアジア系の会社だと香港でトランジットして移動に20時間以上かかるなんてチケットもあるので価格と相談しつつも最適なチケットを予約しましょう。&lt;/p&gt;
&lt;p&gt;JAL,ANAは日本の会社ということもあり機内食もおいしく、サービスが行き届いてますがその分高いです。American,DeltaなどはJAL,ANAなどに比べればお手頃ですが、機内食がおいしくないなどのデメリットがあります。この選択は人によって異なるのでお財布と相談して決めていきましょう。&lt;/p&gt;
&lt;p&gt;ちなみに、アメリカに渡航する場合は、日本発の往路が9時間程度、アメリカ発の復路が10,11時間程度です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;ESTA申請&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/new-york-668616_640.jpg&quot; alt=&quot;new-york-668616_640.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回の旅行では完全に忘れてました。。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ESTA申請。&lt;/strong&gt;アメリカ渡航時にはパスポートの他に渡航のための手続きが必要です。&lt;/p&gt;
&lt;p&gt;このESTA申請（ビザ免除プログラム)ですが、米国国土安全保障省（DHS）により2009年1月12日から義務化された制度で短期商用・観光目的（90日以下）の目的で旅行するすべてのビザ免除プログラム渡航者は、米国行きの航空機や船に搭乗する前にオンラインでESTA渡航認証を受けなければなりません。&lt;/p&gt;
&lt;p&gt;旅行前にちゃんと地球の歩き方などを読んでいればESTA申請が必要なことがわかるのですが、意外としられていない制度なのでアメリカ渡航の前にしっかり確認しておきたいところです。&lt;/p&gt;
&lt;p&gt;ESTAというなんかアルファベットで難しそうな雰囲気をかもしだしていますが、手続きは意外と簡単でこちらのリンクから
&lt;a href=&quot;https://esta.cbp.dhs.gov/esta/application.html?execution=e1s1&quot;&gt;&lt;a href=&quot;https://esta.cbp.dhs.gov/esta/application.html?execution=e1s1&quot;&gt;https://esta.cbp.dhs.gov/esta/application.html?execution=e1s1&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;案内にしたがって手続きを行えば&lt;strong&gt;数分で手続き完了できます。&lt;/strong&gt;航空券のようにeチケットを空港に持って行くなどの手順は必要なく、オンラインで申請したあとは入国時に審査官がシステムでチェックしてくれるので申請をおこなって審査が完了していれば問題ありません。&lt;/p&gt;
&lt;p&gt;審査は&lt;strong&gt;旅行出発日の72時間前までに済ませておく必要があります&lt;/strong&gt;が、スムーズに行くと一瞬で申請から審査完了までが終わるので、当日空港にわすれていたことに気づいて申請して間に合うこともあるようです。そうは言っても、早めに審査を終えておくことにこしたことはないので、審査に時間がかからない事実を踏まえつつも余裕をもって申請しておきましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;モバイルWiFiなど現地通信機器&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/wifi-1371030_640.jpg&quot; alt=&quot;wifi-1371030_640.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;アメリカ国内では多くの建物にWiFi設備がありますが、WiFiに時間制限があったりして完璧とはいえない感じです。また、&lt;strong&gt;アメリカ国内での移動ではUberが使えると便利なので室外でもネットが使えると便利&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;海外用の携帯レンタルサービスなどもありますが、僕は海外でも使い慣れた携帯を使いたいので、モバイルWifi+マイ携帯という組み合わせを採用しています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Uberのインストール・登録&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/Uber_Logo.png&quot; alt=&quot;Uber_Logo.png&quot;&gt;
&lt;p&gt;Uberはアメリカで広く利用されている配車サービスです。Uberのアプリに搭載された地図上で目的地を指定して、自分がいまいる現在地に車を呼んで目的地まで運んでもらうことができます。&lt;/p&gt;
&lt;p&gt;これは最初のアメリカ渡航の時に後悔したのですが、&lt;strong&gt;Uberのインストールは日本国内にいるうちにやっておきたいです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Uberのインストール・登録にはSMS（電話番号をつかったメッセージサービス）での認証があるのですが海外にいるときにSMSを受け取れないことがあるので日本国内で先に自分のアカウントを登録できるとよいでしょう。&lt;/p&gt;
&lt;p&gt;Uberでは、先に目的地を地図（グーグルマップのような地図）で指定して料金を確認したあとに配車できるので「運転手が道にまよった」「道が渋滞していて、通常より時間が増えて料金が高くなった」などの心配をすることがなくなります。英語で目的地を伝えるのが不安なひとも地図上で目的地を指定できるので心配いりません。&lt;/p&gt;
&lt;p&gt;さらには、&lt;strong&gt;料金の割り勘機能&lt;/strong&gt;なども存在するので友達との海外旅行での支払いも楽チンです。&lt;/p&gt;
&lt;p&gt;また、一般的に&lt;strong&gt;タクシーより料金が安い&lt;/strong&gt;のもUberを使う魅力の一つです。アメリカを旅行する際にはぜひUberを使いこなして、効率的に移動できるようになりましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Skypeクレジットの準備&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/skype-2048156_640.png&quot; alt=&quot;skype-2048156_640.png&quot;&gt;
&lt;p&gt;海外でのデータ通信はモバイルWifiで問題なしですが、現地で現地の番号に電話かけないといけないということもままあります。&lt;/p&gt;
&lt;p&gt;そんなときは&lt;strong&gt;Skypeクレジット&lt;/strong&gt;がおすすめです。Skypeのアプリを携帯にインストールしてクレジットカードを登録しておけばアプリ上にチャージ可能です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Skypeにクレジットカードで必要な分をチャージをしておけば、あとはそのチャージ分を使って通常の電話をかけることができます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;現地の旅行会社に電話する。カード盗難・紛失時の電話など電話を利用する機会も一定程度あるので旅行前に準備しておきましょう。（チャージなどは現地でもできるので、現地からでも問題ないです。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;充電器・コンセント（アダプタの形は変わらないので心配無用）&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/power-plug-2802656_640.jpg&quot; alt=&quot;power-plug-2802656_640.jpg&quot;&gt;
&lt;p&gt;海外旅行の際に心配な電源の確保ですが、&lt;strong&gt;アメリカのコンセントは日本のコンセントと変わらない形状&lt;/strong&gt;なので&lt;strong&gt;変換用のアダプタなどを改めて購入する必要はありません。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;少し注意が必要なのが&lt;strong&gt;電圧で日本が100Vなのに対して、アメリカは120Vあるいは200Vです。&lt;/strong&gt;最近の家電では100-240Vなど幅広い電圧に対応しているので問題になることは少ない（MacBookやiPhoneなども幅広い電圧に対応している）のですが、念のため日本から持って行く家電の対応電圧は確認しておきましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;現地通貨（ドル）・クレジットカード&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/bank-note-941246_640.jpg&quot; alt=&quot;bank-note-941246_640.jpg&quot;&gt;
&lt;p&gt;現地通貨はドルですが、アメリカではほとんどの場合でクレジットカードで決済できてしまうので現金としてのドルは少額で問題ありません。滞在期間などによりますが一週間の滞在でも&lt;strong&gt;200ドルほど&lt;/strong&gt;あればだいたい事足りるのではないでしょうか？&lt;/p&gt;
&lt;p&gt;アメリカには多額の現金を持ち込む必要はありませんが、&lt;strong&gt;クレジットカードを持って行くのは忘れないようにしましょう。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;海外旅行保険&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;海外では、盗難やスリ、交通事故などのトラブルに巻き込まれることもありますので海外旅行保険に加入しておくことをおすすめします。&lt;/p&gt;
&lt;p&gt;海外旅行保険に個別で加入するのも良いですが、楽天カードなどですと羽田空港へ向かうまでのシャトルバスの交通費、航空券の費用などでカードを使って決済をしていた場合に保険が適用されます。クレジットカードに付帯する保険の場合、わざわざ保険に申し込まなくても保険が適用される条件さえ満たせば万が一の自体に備えることができるので、海外旅行保険の準備はクレカで行うのがおすすめです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt; (番外編）地球の歩き方&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/B04-%E5%9C%B0%E7%90%83%E3%81%AE%E6%AD%A9%E3%81%8D%E6%96%B9-%E3%82%B5%E3%83%B3%E3%83%95%E3%83%A9%E3%83%B3%E3%82%B7%E3%82%B9%E3%82%B3%E3%81%A8%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%90%E3%83%AC%E3%83%BC-2018-2019-%E5%9C%B0%E7%90%83%E3%81%AE%E6%AD%A9%E3%81%8D%E6%96%B9%E7%B7%A8%E9%9B%86%E5%AE%A4/dp/4478821011/ref=as_li_ss_il?ie=UTF8&amp;amp;qid=1537534267&amp;amp;sr=8-1&amp;amp;keywords=%E5%9C%B0%E7%90%83%E3%81%AE%E6%AD%A9%E3%81%8D%E6%96%B9+%E3%82%B5%E3%83%B3%E3%83%95%E3%83%A9%E3%83%B3%E3%82%B7%E3%82%B9%E3%82%B3&amp;amp;linkCode=li2&amp;amp;tag=llg01-22&amp;amp;linkId=c3587687f35bd8fc8d81de974097e60a&amp;amp;language=ja_JP&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;img src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4478821011&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;img style=&quot;border: none !important; margin: 0px !important;&quot; src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4478821011&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;p&gt;これは番外編ですが、&lt;strong&gt;地球の歩き方&lt;/strong&gt;もおすすめです。空港の本屋さんなどでも購入できるので旅のおともに一冊用意しておくとよいでしょう。観光スポットなどの紹介はもちろん旅行に際しての準備や現地の文化、治安など幅広い情報を網羅しています。年ごとの情報も充実していて、ラスベガスの地球の歩き方ではカジノを観光スポットとして紹介するだけではなく、実際の遊び方・ルールなども載っていて道中の移動やホテルなどでさっとよんでおくだけでも非常にためになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;アメリカ投稿前の準備をまとめてみましたがいかがでしたでしょうか？パスポート海外旅行保険、Wifiなどはどの国に旅行する際にも必要な一般的なものですが、Uberなどはアメリカに行くのであれば日本にいる際にインストールしてから渡航したいです。&lt;/p&gt;
&lt;p&gt;Skypeクレジットで一般電話の番号に電話をかけられるというのも意外と知られていない情報なので、これを機にチェックできると良いでしょう。&lt;/p&gt;
&lt;p&gt;旅行に合わせて仕事の休みもうまく調整して、チケットの手配もしてと準備して迎えた旅行でパスポートを忘れてスケジュールが大幅変更やESTA申請を忘れて入国できなかったなどは避けたいですよね。&lt;/p&gt;
&lt;p&gt;こちらに書かれている情報が参考になって楽しい旅行の実現に役立てれば嬉しいです。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/09/20180921_prepare-travel-to-usa/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Rubyでデザインパターン。Strategyパターン。Design Pattern in Ruby]]></title><description><![CDATA[Ruby でデザインパターン今回は Strategy パターンです。 デザインパターンはオブジェクト指向のエッセンスが詰まったものなので本を読み進めしつつ、ここにまとめてしっかりと理解していきたいです。   早速Strategy…]]></description><link>https://ver-1-0.net/blog/2018/09/02/ruby-strategy</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/09/02/ruby-strategy</guid><pubDate>Sun, 02 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Ruby でデザインパターン今回は Strategy パターンです。&lt;/p&gt;
&lt;p&gt;デザインパターンはオブジェクト指向のエッセンスが詰まったものなので本を読み進めしつつ、ここにまとめてしっかりと理解していきたいです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;iframe style=&quot;width: 120px; height: 240px;&quot; src=&quot;//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=llg01-22&amp;amp;language=ja_JP&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=as_ss_li_til&amp;amp;asins=B004YW6M6G&amp;amp;linkId=ec52d6ae172022e5fe853f63f31bce31&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;span data-mce-type=&quot;bookmark&quot; style=&quot;display: inline-block; width: 0px; overflow: hidden; line-height: 0;&quot; class=&quot;mce_SELRES_start&quot;&gt;﻿&lt;/span&gt;&lt;/iframe&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;アルゴリズムを分離するStrategyパターン&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;早速&lt;strong&gt;Strategy パターン&lt;/strong&gt;のコードはこちらです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Report&lt;/span&gt;
  attr_reader &lt;span class=&quot;token symbol&quot;&gt;:title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:text&lt;/span&gt;
  attr_accessor &lt;span class=&quot;token symbol&quot;&gt;:formatter&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;initialize&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;formatter&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Monthly Report&apos;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Things are going&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;really, really well.&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@formatter&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; formatter
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@formatter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;output_report&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HTMLFormatter&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;html&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;head&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;    &amp;lt;title&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/title&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;/head&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;body&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;line&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;    &amp;lt;p&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/p&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;/body&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;/html&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TextFormatter&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;****** &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; ******&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;line&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;line&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;いきなりポンと見せられてもわからないので個別に切り出して説明していきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;アルゴリズムをサブクラスに委譲&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;こちらの記事で&lt;strong&gt;TemplateMethod パターン&lt;/strong&gt;を紹介しましたが、&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2018/08/31/ruby-template-method/&quot; data-blogcard=&quot;1&quot;&gt;Ruby でデザインパターン。Template Method パターン。Design Pattern in Ruby&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TemplateMethod パターン&lt;/strong&gt;では、名前の通りスーパークラスのテンプレートメソッドでどういう処理をどういった順序で行うというのを規定して、個別の処理はサブクラスでメソッドをオーバーライドして利用するというものでした。&lt;/p&gt;
&lt;p&gt;この TemplateMethod パターンは処理の順序などのロジックを親クラスにもっているので、肝心の処理の順序が変更されてしまうと親クラス、子クラス全てのモジュールに影響を与えてしまいます。&lt;/p&gt;
&lt;p&gt;そういった問題点を解決しているのが&lt;strong&gt;Strategy パターン&lt;/strong&gt;で Strategy パターンでは実際のロジックをストラテジーのクラスに委譲してしまいます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Report&lt;/span&gt;
  attr_reader &lt;span class=&quot;token symbol&quot;&gt;:title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:text&lt;/span&gt;
  attr_accessor &lt;span class=&quot;token symbol&quot;&gt;:formatter&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;initialize&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;formatter&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Monthly Report&apos;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Things are going&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;really, really well.&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@formatter&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; formatter
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@formatter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;output_report&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;TemplateMethod パターンではこの output_report に title を出力するメソッド、body を出力するメソッドなど必要な処理を手続き的に書いていましたが、Strategy パターンではこれらのロジックを全て formatter として与えられたインスタンスの output_report に委譲します。&lt;/p&gt;
&lt;p&gt;Strategy パターンでは、実際のロジックを全てストラテジークラスに委譲しているので動的に実行するロジックを切り替えるということも可能です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;report &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Report&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;HTMLFormatter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
report&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;output_report

report&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;formatter &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TextFormatter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;
report&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;output_report&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;また Strategy パターンではロジックとデータを分離していて、Report クラスの例でいうと title や text などのデータは親クラス（Context クラスといったりします）が保持し、実際のロジックを実行する部分で自分自身をデータとして渡します。&lt;/p&gt;
&lt;p&gt;対象のコードは下記の部分で&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt; &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@formatter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;output_report&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;@formatter に注入されたクラスのメソッドに対して self で自分自身を引き渡しています。さらに storategy 側では受け取っとた context からデータを取得し、実際のレポート主力時に出力を行なっています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TextFormatter&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;****** &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; ******&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;line&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;line&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Rubyの特徴を生かしたlambdaでお手軽Strategyパターン&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまでですと一般的な Strategy パターンとあまり代わりありませんが、
&lt;a href=&quot;https://amzn.to/2C9AEvR&quot;&gt; Design Patterns in Ruby (Adobe Reader) (Addison-Wesley Professional Ruby Series)&lt;/a&gt;
では、Ruby の Proc オブジェクトを使った簡単な Strategy パターンの実装も紹介してありました。&lt;/p&gt;
&lt;p&gt;本では Quick-and-Dirty Strategies と書かれていましたが、Javascript などでも似たような考え方ができて覚えておいて損しない考え方かなと思いました。&lt;/p&gt;
&lt;p&gt;Ruby では lambda という記法を使うことでブロックをオブジェクト化して変数につめて使うことができます。下がその例ですが、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;sayHello &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; lambda &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; puts &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;hoge&apos;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; sayHello&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;call
hoge
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;lamda を使うと Proc オブジェクトが生成され格納したブロックを実行する場合は、
call を利用します。&lt;/p&gt;
&lt;p&gt;これを使って Strategy パターンを組む場合は、さきほどの Report クラスを以下のようにします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Report&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;initialize&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;formatter&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Monthly Report&apos;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Things are going&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;really, really well.&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@formatter&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; formatter
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@formatter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;call&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;あとは次のように lamda で strategy を実装して渡してあげれば簡易 strategy パターンのできあがりです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token constant&quot;&gt;HTML_FORMATTER&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; lambd &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;context&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# HTMLFormatter#output_reportの処理を書く&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

report &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Report&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;HTML_FORMATTER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
report&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;output_report&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この書き方だとクラスを使わないのでかなり簡潔にかけそうですが、
まああまり多用は避けたいですね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回は Strategy パターンを紹介しましたが、Strategy パターンは委譲をベースとしたデザインパターンで Template Method パターンよりは、親クラスへの依存度を下げた形で実装を行うことができます。&lt;/p&gt;
&lt;p&gt;こうやって書くと Strategy パターンの方が優れているような書き方になってしまっていますが、それぞれのパターンには向き不向きあるのでそれぞれの良いところと悪いところをわかった上で使い分けできるとよさそうですね。&lt;/p&gt;
&lt;p&gt;また、Ruby の lambda を使った書き方も紹介しましたがこういう選択肢もあるよという感じで覚えておくとどこかで役にたつかもしれないですね。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/09/20180902_ruby-strategy/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Rubyでデザインパターン。Template Methodパターン。Design Pattern in Ruby]]></title><description><![CDATA[増補改訂版 Java 言語で学ぶデザインパターン入門 が有名で大変ためになる本ですが、これらのデザインパターンを ruby で書こうとするとどうなるのかというのでこちら購入して読んでみました。 Design Patterns in Ruby (Addison-Wesley…]]></description><link>https://ver-1-0.net/blog/2018/08/31/ruby-template-method</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/08/31/ruby-template-method</guid><pubDate>Fri, 31 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Rubyでのデザインパターン&lt;/h2&gt;
デザインパターンといえば、こちらの本
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2wta3Vd&quot;&gt;増補改訂版 Java 言語で学ぶデザインパターン入門&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;が有名で大変ためになる本ですが、これらのデザインパターンを ruby で書こうとするとどうなるのかというのでこちら購入して読んでみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amzn.to/2TJL3Cu&quot;&gt;Design Patterns in Ruby (Addison-Wesley Professional Ruby Series) (英語)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Design-Patterns-Ruby-Addison-Wesley-Professional/dp/0321490452/ref=as_li_ss_il?ie=UTF8&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=6af42eb4b01edaa8a7b67184be235a39&amp;language=ja_JP&quot; target=&quot;_blank&quot;&gt;&lt;img width=&quot;121&quot; height=&quot;160&quot; layout=&quot;fixed&quot; border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=0321490452&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&amp;amp;language=ja_JP&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;language=ja_JP&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=0321490452&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;はい、英語です。日本語版もあるのですが、6000 円ほどで結構高かったり英語の技術書を読破するという今年の目標もあったので、こちらを選びました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;TemplateMethodパターン&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;早速デザインパターンの紹介にうつります。第一回目は TemplateMethod パターンです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Report&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;initialize&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Monthly Report&apos;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;THings are going&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;really, really well&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;
    output_start
    output_head
    output_body_start
    output_body
    output_body_end
    oputput_end
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_body&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;line&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
      output_line&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;line&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_start&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_head&lt;/span&gt;&lt;/span&gt;
    output_line&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_line&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;line&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;raise&lt;/span&gt;  &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Called abstract method: output_line&apos;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_body_end&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_end&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;先にコードをのせてしまいましたが、Template Method パターンではこのような抽象クラスを定義して、この Report クラスのようなクラスを継承した具象クラスでメソッドをオーバーライドして実装していきます。&lt;/p&gt;
&lt;p&gt;このデザインパターンのミソはこのコードでいうと&lt;strong&gt;ouput_report&lt;/strong&gt;メソッドになります。このメソッド内で実行する処理の順番などを定義して、そこに定義された分割されたメソッドの実際の挙動はサブクラスで定義していくというような実装になります。&lt;/p&gt;
&lt;p&gt;サブクラスでは、&lt;strong&gt;サブクラスでそのサブクラス特有の処理だけ実装すればよくなる(output_report のようなメソッドは共通処理なので抽象クラスに実装しておくだけですむ)&lt;/strong&gt;ので、全体としてコードの重複をさけて記述量を減らすことができます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Template Methodで適用する例&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;先ほど紹介したデザインパターンの例を引用しますが、ある日月次のレポートとして HTML でのレポートを作成する必要がありそれを実装することになった場合を考えます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Report&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;initialize&lt;/span&gt;&lt;/span&gt;
   title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Monthly Report&apos;&lt;/span&gt;&lt;/span&gt;
   &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Things are going&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;really, really well.&apos;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;html&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;heade&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;    &amp;lt;title&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/title&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;/head&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;body&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;eah &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;line&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;    &amp;lt;p&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/p&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;   &amp;lt;/body&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;/html&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;HTML を出力するだけなので、このよな実装をしたとします。しかし、後からテキスト形式でも出してほしいといったときにこまってしまいます。&lt;/p&gt;
&lt;p&gt;ここで付け焼き刃的な実装をするとこんな感じになってしまいます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Report&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;initialize&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Monthly Report&apos;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Things are going&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;really, really well&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_report&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;format&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; format &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:plain&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;*** #{@title{} ***&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;elsif&lt;/span&gt; format &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:html&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;html&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;heade&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;    &amp;lt;title&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/title&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;/head&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;body&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;raise&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Unknown format: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

    &lt;span class=&quot;token variable&quot;&gt;@text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;eah &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;line&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; format &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:plain&lt;/span&gt;
        puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;    &amp;lt;p&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/p&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;
        puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;    &amp;lt;p&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/p&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;   &amp;lt;/body&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;/html&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;うーん、動きはしそうですが、if 文が多くてなかなか読みづらいですね。しかも、こんどは別の csv 形式で出力してほしいとなった場合にまた if 文が増えて辛くなりそうな気しかしないです。&lt;/p&gt;
&lt;p&gt;こういうときに Template Method パターンで実装をすると、一番最初に紹介した Report クラスを継承する形で HTMLReport クラスと TextReport クラスを実装するとだいぶ楽になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTMLReport.rb&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HTMLReport&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; Report
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_start&lt;/span&gt;&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;html&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_head&lt;/span&gt;&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;head&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;    &amp;lt;title&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/title&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;  &amp;lt;/head&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_body_start&lt;/span&gt;&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;body&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_line&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;line&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;  &amp;lt;p&gt;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;/p&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_body_end&lt;/span&gt;&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;/body&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_end&lt;/span&gt;&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&amp;lt;/html&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;TextReport&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TextReport&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; Report

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_head&lt;/span&gt;&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;*** &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;@title&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; ***&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;output_line&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;line&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    puts&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;line&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このようにそれぞれの出力フォーマットを Report クラスのサブクラスとして切り出すことによってすっきりとしたコードになりました。&lt;/p&gt;
&lt;p&gt;これらのクラスを使う場合は、出力したいフォーマットにあわせて&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# HTML出力する場合&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;HTMLReport&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;output_report

&lt;span class=&quot;token comment&quot;&gt;# Text出力する場合&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;TextReport&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;output_report&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまでで、TemplateMethod パターンの紹介は以上です。デザインパターンはなかなか覚えるのに時間かかかるのですが、実装前の段階でデザインパターンを知っているか知らないかで実装の簡潔さや変更の容易さがかわってきて知っていると本当に便利です。&lt;/p&gt;
&lt;p&gt;最初にもちょっと触れましたが、TemplateMethod パターンの肝は&lt;strong&gt;抽象クラスのそれぞれのメソッドを呼び出す親メソッド（Report クラスの output_report メソッド）&lt;/strong&gt;と&lt;strong&gt;サブクラスでの実装を強制するメソッド
&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;親メソッドというか&lt;strong&gt;テンプレートメソッド&lt;/strong&gt;が&lt;strong&gt;どういう順番で個別のメソッドを呼び出すかというのを定義して、それに合わせてサブクラスでメソッドをオーバライドしていく&lt;/strong&gt;ので当然このテンプレートメソッドがクラス設計の重要な部分になってきます。設計時にはどういうパターンが今後の変更などを加味してどういうメソッドにするのかというのを決めていきましょう。&lt;/p&gt;
&lt;p&gt;また、Report クラスでは output_line ではメソッド内で例外をなげるように実装することで子クラスでオーバーライドされない場合にはエラーで処理を止めるように実装しています。一方その他のメソッドはデフォルトで返却する値（もしくは何もしない）を決めているのでサブクラスで固有の処理がない場合はそのまま Report クラスのメソッドを実行するようにして、コードの重複を減らしています。&lt;/p&gt;
&lt;p&gt;この大きくわけて二つのテンプレートメソッドと、オーバライド必須のメソッドを覚えておけばわりとするっと実装できるのが TemplateMethod パターンです。&lt;/p&gt;
&lt;p&gt;ぜひ実務や個人開発でも TemplateMethod パターンが適用できないかどうか考えて実装してきれいなコード書いていきましょう。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/08/20180831_ruby-template-method/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[ReactのComponent, PureComponent, SFCComponentのレンダリングの挙動の違いをまとめてみる。]]></title><description><![CDATA[「Componentはどういう時に再レンダリングされるんですか？」 Reactで開発している方はもちろん、「propsやstateが変更された時だよ！」と自信をもって答えられるかもしれません。 が、 「ネストした時はどうなるんですか？」 「PureComponentやSFC…]]></description><link>https://ver-1-0.net/blog/2018/08/23/diffrence-between-react-components</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/08/23/diffrence-between-react-components</guid><pubDate>Thu, 23 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「Componentはどういう時に再レンダリングされるんですか？」&lt;/p&gt;
&lt;p&gt;Reactで開発している方はもちろん、「propsやstateが変更された時だよ！」と自信をもって答えられるかもしれません。&lt;/p&gt;
&lt;p&gt;が、&lt;/p&gt;
&lt;p&gt;「ネストした時はどうなるんですか？」&lt;/p&gt;
&lt;p&gt;「PureComponentやSFCとかってレンダリングの挙動が変わるんですか？どう変わるんですか？」&lt;/p&gt;
&lt;p&gt;みたいなところにちゃんと答えられる自信がなかったのでそれぞれのコンポーネントの違いをまとめてみました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;各コンポーネントの違い&lt;/h2&gt;
&amp;nbsp;
&lt;h3&gt;Component&lt;/h3&gt;
&amp;nbsp;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HelloComopnent&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Hello World&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;言わずと知れたReactのComponentクラスです。&lt;/p&gt;
&lt;p&gt;チュートリアルでも使っているように特に意識しなければ、このクラスを継承する形でコンポーネントを定義します。&lt;/p&gt;
&lt;p&gt;Component classにはライフサイクルメソッドなるものが実装されており、コンポーネントのマウント時から、アンマウント時、propsが変化した場合などにフックを仕込むことができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactjs.org/docs/react-component.html#the-component-lifecycle&quot;&gt;he Component Lifecycle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;PureComponent&lt;/h3&gt;
&amp;nbsp;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HelloComopnent&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PureComponent&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Hello World&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Reactのv15.3から追加されたコンポーネントで基本的な部分はComponentと変わらずライフサイクルメソッドが使えます。&lt;/p&gt;
&lt;p&gt;Componentとの大きな違いは、デフォルトでshouldComponentUpdateが実装されている所です。&lt;/p&gt;
&lt;p&gt;shouldComponentUpdateはライフサイクルメソッドの一つでReactコンポーネントを再レンダリングするかどうかをtrue/falseで返すことで再レンダリングを制御できます。(trueを返した場合だけ再レンダリングされます。)&lt;/p&gt;
&lt;p&gt;繰り返しにはなりますがPureComponentはshouldComponentUpdateがデフォルトで実装されているので自身のコンポーネントのpropsに変更がなければ再レンダリングが走らないようになっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;SFC(Stateless Functional Component)&lt;/h3&gt;
&amp;nbsp;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;HelloComopnent&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Hello World&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;SFCはステートレスの名前の通り、内部に状態を持ちません。&lt;/p&gt;
&lt;p&gt;関数としてのコンポーネントなので、同じpropsからはつねに同じdomがレンダーされることが保証されています。&lt;/p&gt;
&lt;p&gt;表示に特化したPlesentationalなコンポーネントとして用いられいることが多く、ライフサイクルメソッドが使えません(渡されたpropsを表示するだけとなので必要ないと言えばそうなのですが)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;デモでそれぞれの違いを確認&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;説明のためにデモを作ってみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://version-1.github.io/react-rendering-sample/&quot;&gt;デモ&lt;/a&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/08/20180823_diffrence-between-react-components/Screen-Shot-2018-08-23-at-7.58.42.png&quot; alt=&quot;react component demo&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;実際にデモを見てもらうとわかるのですが、
親のコンポーネントがあってそのなかにそれぞれ並列でComponent,PureComponent,SFCが存在するような構造になります。&lt;/p&gt;
&lt;p&gt;ソースはこちらです。
&lt;a href=&quot;https://github.com/version-1/react-rendering-sample&quot;&gt;version-1/react-rendering-sample&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;紫のボタンがcounterをインクリメントしてくれるボタンで、
それぞれの色のボタンがそれぞれのflgをトグルしてくれるボタンです。&lt;/p&gt;
&lt;p&gt;stateは全て親コンポーネントをラップするAppComponentが保持しています。&lt;/p&gt;
&lt;p&gt;紫のボタンをクリックするとタブがcounterがインクリメントされます。
その他の色のボタンを押すと対応したコンポーネント内に表示されているflgの値が切り替わります。&lt;/p&gt;
&lt;p&gt;また、それぞれのコンポーネントのrenderメソッド内にconsole.logを仕込んであるのでコンポーネントが再レンダリングされるタイミングでコンソールにログが表示されるようになっています。
（以下で色々と説明していきますが、実際にデベロッパーツール開いて自分で試した方がわかりやすいです。）&lt;/p&gt;
&lt;p&gt;これらを前提に実際のコンポーネントの挙動を見ていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;親コンポーネントから渡されたpropsが変化した場合&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;先ほども説明したように、紫のボタンを押すとcounterの値がインクリメントされるので&lt;strong&gt;親コンポーネントのpropsが変化し、再レンダリング&lt;/strong&gt;されます。続いてそのpropsが渡されている子のコンポーネントも連鎖して&lt;strong&gt;再レンダリングが走ります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;親コンポーネントから渡されていないpropsが変化した場合&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;親コンポーネントからpropsが渡されていない（自身のpropsが変化しない）ケースを試したいので、それぞれのボタンを押下して各コンポーネントがレンダリングされるかどうかを調べます。&lt;/p&gt;
&lt;p&gt;結果は次の表の通りになり、&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;緑ボタン押下&lt;/th&gt;
&lt;th&gt;黄ボタン押下&lt;/th&gt;
&lt;th&gt;赤ボタン押下&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Component（緑）&lt;/th&gt;
&lt;td&gt;レンダリングされる&lt;/td&gt;
&lt;td&gt;レンダリングされる&lt;/td&gt;
&lt;td&gt;レンダリングされる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Pure Component（黄）&lt;/th&gt;
&lt;td&gt;&lt;strong&gt;レンダリングされない&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;レンダリングされる&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;レンダリングされる&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;SFC（赤）&lt;/th&gt;
&lt;td&gt;レンダリングされる&lt;/td&gt;
&lt;td&gt;レンダリングされる&lt;/td&gt;
&lt;td&gt;レンダリングされる&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
PureComponent以外は親の状態（props) が変化すると自身の状態が変化していないのにもかかわらず再レンダリングされてしまうことがわかります。
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;無駄なレンダリングを避けるためのPureComponent&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;実際にデモを動かしてみて、無駄なレンダリング（自身の状態が変わっていないのに再描画すること）によるオーバヘットを防ぐにはPureComponentを極力使っていった方が良いということがわかりました。&lt;/p&gt;
&lt;p&gt;もちろん、ComponentでもshouldComponentUpdateを愚直に実装すれば同じことができるのですが、まあPureComponentで良いですよね。またSFCの場合は、recomposeなどのライブラリを使えばPureComponentチックなSFCもかけるみたいです。&lt;/p&gt;
&lt;p&gt;「現状そんなに複雑で大きいコンポーネントってないから別にPureComponentじゃなくても」というのもあるかと思うのですが、個人的な意見としてシステムは寿命が長くなるほど大きく複雑に変化しておくのでいまのうちから少しずつPureComponentで実装しておくと後が楽なのかなと思っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;PureComponentを使わない方が良い場合&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;どうやら、shouldComponentUpdateの計算コストも少なくないらしく、頻繁にpropsが変化するようなコンポーネントでは、毎回レンダリングするかどうかの計算を行わないといけないのでそういったコンポーネントにはComponentを使って無条件に再レンダリングさせるのが良いようです。&lt;/p&gt;
&lt;p&gt;PureComopnent最高！という感じで全てのコンポーネントを置き換えると逆に遅くなったというのもありますので一応ここは念頭においておく必要があるのではないでしょうか？&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;ul&gt;
 	&lt;li&gt;PureComponentはデフォルトでshoulComponentUpdateが実装されており、自身のpropsが変化していなければ再レンダリングしないという判断を自動でしてくれる。&lt;/li&gt;
 	&lt;li&gt;親が再レンダリングされるとComponentもSFCも再レンダリングされ自身のpropsが変わっていないのにレンダリングされるという無駄が生じる。&lt;/li&gt;
 	&lt;li&gt;PureComponentは頻繁に自身のpropsが書き換わるようなコンポーネントでは使わない方がよい&lt;/li&gt;
&lt;/ul&gt;
このように3つまとめてみましたが、今回の観点で比べるとPureComponentが特徴的な動作をするのでこのようなPureComponentが主役のまとめになりました。
&lt;p&gt;レンダリングの挙動が言葉で説明されてもいまいちピンとこなかったのでデモを作って公開してみました。実際にさわってみると自分でも結構わかりやすいなと感じたのでぜひ触ってみてください。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/08/20180823_diffrence-between-react-components/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Android React Nativationでキーボードと一緒にタブバーも上がってしまう問題の対策]]></title><description><![CDATA[ReactNativeで開発をする際ルーティングの為にReactNavigationを使っている方が多いかと思うのですが、 そのReactNavigationのタブバーを何も気にせず使っているとキーボードが出てきたときに（Android…]]></description><link>https://ver-1-0.net/blog/2018/08/21/react-navigation-keyboard-move-tabbar-up</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/08/21/react-navigation-keyboard-move-tabbar-up</guid><pubDate>Tue, 21 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ReactNativeで開発をする際ルーティングの為にReactNavigationを使っている方が多いかと思うのですが、&lt;/p&gt;
&lt;p&gt;そのReactNavigationのタブバーを何も気にせず使っているとキーボードが出てきたときに（Android限定）タブバーも一緒に押し上げて残念な感じになってしまうというのがあったので、その解決方法を記しておきます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;KeyBoardのイベントを検知して、TabBarを非表示にする。&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;解決策としては、KeyBoardが表示されると同時にタブバーを非表示にしてやるだけです。&lt;/p&gt;
&lt;p&gt;ただ、TabBarを直接非表示にしたりするAPIは提供されていないので、自前でTabBarをラップした形のコンポーネントを実装してその中で表示・非表示を切り替えます。&lt;/p&gt;
&lt;p&gt;以下がWrapperComponentです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Keyboard &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-native&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; TabBarBottom &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-navigation&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TabBarComponent&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PureComponent&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

     &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;isVisible&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;keyboardWillShow &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;keyboardWillShow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;keyboardWillHide &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;keyboardWillHide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;componentWillMount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;keyboardEventLisetners &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    Keyboard&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;keyboardDidShow&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;keyboardWillShow&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 Keyboard&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;keyboardDidHide&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;keyboardWillHide&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;componentWillUnmount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;keyboardEventLisetners&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;listener&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; listener&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function-variable function&quot;&gt;keyboardWillShow&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;isVisible&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function-variable function&quot;&gt;keyboardWillHide&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;isVisible&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isVisible &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; TabBarComponent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これができたら、TabNavigatorの第二引数で自前のラッパーコンポーネントを指定して完了です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; TabBarComponent &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./TabBarComponent.js&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;TabNavigator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;initialRouteName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;...&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;tabBarComponent&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; TabBarComponent&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;iosではキーボードがタブバーを押し上げるという感じにはならないので、イベントの登録をAndroid限定にしてあげるとより硬い実装にはなるかと思いますが、そちらはお好みでという感じです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;React Nativeはまだまだ発展途上で想定外の動きをしたりOSごとの動作の違いがあったりしてなかなかつらみがありますが、プロジェクトとして動的でなかなか面白いですね。&lt;/p&gt;
&lt;p&gt;この記事の問題をネットで調べてみるとAndroidのmanifest.xmlを書き換えれば動くよみたいななのがあったのですが、タブバーのためにアプリ全体の設定を書き換えるのはいかがなものかということでこちらの対策をアップしました。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/08/20180821_react-navigation-keyboard-move-tabbar-up/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[TDDとかBDDとかあるけど、個人的に感じているテストコードを書く7つの理由]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2018/07/16/why-test-code</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/07/16/why-test-code</guid><pubDate>Mon, 16 Jul 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;テストコードといえば、テストコードが必要か必要でないかというのはちょいちょい議論になるものではありますが、個人的には正しい開発を行う上では必ず必要になってくるものだと思っています。&lt;/p&gt;
&lt;p&gt;唐突に自分の意見を書いてみましたが、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「じゃあなんで、テストコードを書くの？？？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;と聞かれるといくつかのメリットをあげることはできると思いますが、テストコードのない現場の忙しい開発者たちを相手にテストコード導入のメリットをあげて説得できるかというところにあまり自信が持てなかったのでテストコードを書くメリットを自分なりに整理してみました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;当たり前だけどプログラムがちゃんと動いているかを効率的にチェックできる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;これは、まあ当たり前というかこれが達成されていなかったらテストコードのある意味がないですよね。&lt;/p&gt;
&lt;p&gt;ただ現在のシステムで、作った後に手を加えないシステムというのはほぼないわけで、日々訪れる仕様変更や機能改善のためになんどもコードが書き換えられていきます。また、コードというのは保守期間やシステムの年齢に対して増大して行く傾向にあるので、最初は少人数でも品質を担保できていたコードがどんどん大きく複雑になり管理が難しくなってきます。&lt;/p&gt;
&lt;p&gt;そんななかで、GUIベースでの統合的なテストとはいわずとも&lt;strong&gt;モジュールレベルで仕様通り動作しているかどうかをきっちり担保できていると日々の開発を進める上で大変心強いです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;サーバーから意図しないレスポンスが返ってくるのでみてみたところ、既存のバグでそれの調査と修正で予定した多くの工数をとられて、当初の見積もりをオーバーするとかいうのって本当にイライラしますよね。既存のコードが正しく動いていること（完璧にというのはなかな難しいですが）を担保できていない中での開発というのは非常にストレスがたまりますよね。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;日々の開発を行なっている上で既存のバグが三つも四つも見つかるような現場ではテストコードの導入をオススメします。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;デプロイ作業が自動化できる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;これはシステムの品質というより作業工数の効率化観点ですが、&lt;strong&gt;テストコードである程度のカバレッジがないと自動デプロイって怖くてできないですよ。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;静的型付けの言語とかであればよいですが、rubyやphpなど実際に動かしてみるまで構文エラーとかをすくえない言語では、本番でundefinedエラーなどのしょうもないエラーが起きてしまうのは嫌ですよね。テストコードで8割程度のカバレッジをもっておけば、デプロイの前に自動でテストが回るようにしてテストを通過した場合だけデプロイするという形でしょうもないエラーの多くを防ぐことができます。&lt;/p&gt;
&lt;p&gt;テストがない状態でもデプロイの自動化はできますが、ちょっと怖くてできないですよね。。テストコードのないプロジェクトはこのように開発の運用にも影響を与えるので、きっちりテストを書く習慣をつけておきたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;バージョンアップが楽になる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;テストコードがあるとバージョンアップが楽になります。バージョンアップする前には前バージョンとの変更点を確認して、修正してという流れになると思いますが、漏れとか怖いのでひとつずつ確認していきますよね。&lt;/p&gt;
&lt;p&gt;そんな時にテストコードがあると完璧とはいかないまでも、人の打鍵では確認しづらい細かい部分までコードがバージョンアップの影響を受けていないか確認することができます。&lt;/p&gt;
&lt;p&gt;まだ生まれたばかりのライブラリとかを使っていると結構バージョンアップの頻度が高く追従するのが難しかったりしますよね。かといって、古くなってしまったシステムをメンテナンスするのも嫌ですし、、、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;テストコードを日頃から書いておくとバージョンアップする際には必ずテストコードのありがたみを感じることができるので、必ず報われることを信じながらテストコードを書いていきましょう。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;エンジニアとして一定の評価をされる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;フリーランスの面接でも割ともともとの現場のカバレッジを聞かれたりしたのですが、外からのみられ方としてテストコードがかける人なのか、&lt;strong&gt;テストコードを書く意義をわかっているかどうか&lt;/strong&gt;というのはみられているように思います。&lt;/p&gt;
&lt;p&gt;知り合いのフリーランスの方でも現場に入る前にそのプロジェクトのコードカバレッジがどれくらいか聞くそうです。テストコードのない現場だと、こっち直したらあっちが壊れてとかいうなかなか辛い状態での開発になるのでそういうのを警戒してあらかじめ開発環境が整っている環境かどうかというのは働く先での評価の基準になるようです。&lt;/p&gt;
&lt;p&gt;転職の面接の際にも&lt;strong&gt;前職ではCIを導入していて、マスタマージと共に自動デプロイが走っていましたとかいうと「ちゃんとした現場で開発してきているな」という評価にはなると思います。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;「テストコード０の現場からカバレッジを8割にしてCI環境を整備しました！」というほどでなくても、一エンジニアとしてテストコードをかける、書いた経験があるというのは非常に大事なことのように思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;コードがきれいになる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;テストコードを書いてみるとわかるのですが、コードにはテストの書きやすいコードと書きにくいコードが存在します。当然テストコードを書きやすいコードの方が好ましいわけですが、&lt;strong&gt;テストコードの書きにくいコードというのはだいたい一つのクラスやメソッド多くのことをやりすぎているコードです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一つのメソッドであまりに多くのことをやろうとすると、人間の理解力を超越してコードを読むのが難しくなりますし、他のクラスへの依存も高まったり、重複の多いコードになりがちです。&lt;/p&gt;
&lt;p&gt;これを防ぐために、テストの書きやすいコードを意識しながらコードを書くことができると単一責務を守った綺麗なコードができあがります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;テストの書きやすいコードというのが、自分でテストコードを書いていないと感覚がわかりづらいので、普段テストコードの書いていない人は今すぐにでもテストコードを書く習慣をつけられると良いと思います。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;リファクタしやすくなり、コードの質を保つ好循環が生まれる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;テストコードがあることによって既存のコードに手を入れてもテストコードがしっかり書いてあれば、自分では気づけない部分でテストがこけてくれて「あ、こっちも直さないといけないのか」となるので、リファクタ作業をするときも安心して作業をすすめることができます。&lt;/p&gt;
&lt;p&gt;システム開発を進めているとどうしても納期に追われたりしてコードが汚くなっていきがちなのですが、&lt;strong&gt;テストコードがあるとリファクタへの心理的ハードルが下がるので、機能改修のついでのファクタなどができるようになってきて自然とシステム全体でのコードの質が保たれます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ひとつずつテストコードを書いて行くの決して簡単な作業ではありませんが、ある程度カバレッジがあがってると上記のような好循環が作れるので、ぜひともテストコードの導入をオススメします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;自分の書いたコードを見直す時間が作れる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;これは最近感じたのですが、テストコードを書く時というのは、プロダクトのコードをみながらコードを書いて行くので、自分の書いたコードをレビューしているよう状態になります。&lt;/p&gt;
&lt;p&gt;自分で書いたコードって時間を置いてみると&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「なんで、こんな酷いコードかいているんだろう？？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;と思うことありますよね。普段自分で仕事をしていて自分のコードを見直すことって意外となくて3ヶ月後とか半年後に同じ箇所に戻ってきて過去の自分の書いたコードで自己嫌悪に陥ったりするのですが、テストコードを書くことによってこれが短いスパンでできるようになります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;短いスパンで自分の過ちに気付けるので、次からコードを書く時にそこを気にしながら書くことができます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;これは自分がまだ未熟だからかもしれないのですが、コードって一発できれいなコードをかけるということが少なくて、一つの機能改善の中でも一度書いたものに納得がいかず再度書き直すなんてこともよくあります。&lt;/p&gt;
&lt;p&gt;個人的には最初に書いたコードってどこか無駄があるので、それをまた書き直していくことでシンプルで無駄のないコードができあがると思っているので、書き直せば書き直すほど無駄のない筋肉質なシステムができあがるとも思っています。&lt;/p&gt;
&lt;p&gt;なので、ひとつの開発の中で、&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;一旦動く形でコードを書いてみる&lt;/li&gt;
 	&lt;li&gt;無駄な部分をリファクタする&lt;/li&gt;
 	&lt;li&gt;テストコードを書きながら再度コードの見直し&lt;/li&gt;
 	&lt;li&gt;納品物としてテストコードときれいに整頓されたシンプルなコードができる&lt;/li&gt;
&lt;/ol&gt;
みたいな順序を踏めると良いのではないでしょうか？（できる人は、1,2をまとめて一回でできてしまうのかもしれません。。というかテスト書きながらしっかり開発しているので全部一気にできるんですかね？？）
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;以上私の考えるテストコードを書くメリットのまとめでした。&lt;/p&gt;
&lt;ul class=&quot;list&quot;&gt;
 	&lt;li&gt;当たり前かもしれないが、コードの挙動を効率的に確認することができる&lt;/li&gt;
 	&lt;li&gt;デプロイ作業が自動化できる&lt;/li&gt;
 	&lt;li&gt;バージョンアップが楽になる&lt;/li&gt;
 	&lt;li&gt;エンジニアとして評価される&lt;/li&gt;
 	&lt;li&gt;コードが綺麗になる&lt;/li&gt;
 	&lt;li&gt;リファクタしやすくなり、コードの質を保つ好循環が生まれる&lt;/li&gt;
 	&lt;li&gt;自分のかいたコードを見直す時間がつくれる&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;
&lt;p&gt;まとめてみると、テストコードは現場的にデプロイの自動化で工数の削減ができたり、コードの質を担保できたりというチームよりなメリットもありますが、きれいなコードをかけるようになるとか自分の書いたコードを見直す時間が作れる、エンジニアとして評価されるなど個人的なメリットもあります。&lt;/p&gt;
&lt;p&gt;テストコードに関しては、TDDだったら〜とかBDDだったら〜とか色々あるのかもしれませんが現時点個人的に感じているテストコードのメリットをまとめてみました。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/07/20180716_why-test-code/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[OmniAuthで認証後のコールバックにパラメータを渡す方法]]></title><description><![CDATA[FacebookログインやGoogleログインを実装する際によくお世話になるOmniauthですが、Webサービスに採用していると、認証完了後にある特定の処理をしたいということがまあまああります。 そんな時は、認証前のURL…]]></description><link>https://ver-1-0.net/blog/2018/07/01/omniauth-callback-pass-params</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/07/01/omniauth-callback-pass-params</guid><pubDate>Sun, 01 Jul 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;FacebookログインやGoogleログインを実装する際によくお世話になるOmniauthですが、Webサービスに採用していると、認証完了後にある特定の処理をしたいということがまあまああります。&lt;/p&gt;
&lt;p&gt;そんな時は、認証前のURLに任意のパラメータを渡して、&lt;strong&gt;コールバックでそのパラメータを元に処理をわけたい&lt;/strong&gt;ということがありますよね。これができない場合は、sessionに値を保持してやったりするのですが、sessionを乱用すると、一見意味のわからないキーが乱立するので、極力Oauth認証後の処理であればこういった仕組みを利用していきたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;調べてみたところ,omniauthに任意の値を渡すことが可能のようで、認証先（例えばgoogle）に飛ばす際のURLにパラメータを付与すると認証後にそのパラメータを取得できるようです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;pug&quot;&gt;&lt;pre class=&quot;language-pug&quot;&gt;&lt;code class=&quot;language-pug&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token code&quot;&gt; link_to &lt;span class=&quot;token string&quot;&gt;&apos;Link&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;user_oauth2_omniauth_authorize_path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;flg&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;として飛ばすと、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;callback&lt;/span&gt;&lt;/span&gt;
　　params &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; request&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;omniauth.params&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
　　&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; params&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;flg&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;present&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;
　　　　&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; フラグのある時の処理
　　&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;
　　　　&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; フラグのない時の処理
　　&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;というように処理をわけることができます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;決済の処理など外部に一度リクエストを飛ばして、リダイレクトしてもらう場合にもレスポンスに任意の値が設定できるのでomniauthも似た感じですね。&lt;/p&gt;
&lt;p&gt;細かいですが、こういうことを知っておけると無駄な処理を書かなくてすむのでメモしておきます。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/07/20180701_omniauth-callback-pass-params/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Reactでスネークゲームを作ってみた-解説編 環境構築-]]></title><description><![CDATA[Reactでスネークゲーム作ってみた。 Reactでスネークゲームを作ってみた-解説編 ひとまず Reactの環境をつくっていきます。 reactの環境構築は手間を省いて、create react appで1コマンドで仕上げます。
(cli…]]></description><link>https://ver-1-0.net/blog/2018/06/29/react-snake-game-2</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/06/29/react-snake-game-2</guid><pubDate>Fri, 29 Jun 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;目次&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2018/06/27/react-snake-game/&quot;&gt;Reactでスネークゲーム作ってみた。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Reactでスネークゲームを作ってみた-解説編&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;環境構築&lt;/li&gt;
 	&lt;li&gt;フィールドを作る&lt;/li&gt;
 	&lt;li&gt;ヘビを動かす&lt;/li&gt;
 	&lt;li&gt;曲がれるようにする&lt;/li&gt;
 	&lt;li&gt;壁にぶつかった時の処理&lt;/li&gt;
 	&lt;li&gt;えさを表示する&lt;/li&gt;
 	&lt;li&gt;えさを食べる処理&lt;/li&gt;
 	&lt;li&gt;ステータスを管理する&lt;/li&gt;
 	&lt;li&gt;ゲームオーバーの処理を書く&lt;/li&gt;
 	&lt;li&gt;スピードを変えられるようにする。&lt;/li&gt;
 	&lt;li&gt;最後に&lt;/li&gt;
&lt;/ol&gt;
&amp;nbsp;
&lt;h2&gt;インストール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ひとまず Reactの環境をつくっていきます。&lt;/p&gt;
&lt;p&gt;reactの環境構築は手間を省いて、create react appで1コマンドで仕上げます。
(cliをグローバルにインストールする必要があるので2コマンドかも)&lt;/p&gt;
&lt;h4&gt;コマンドのインストール&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; create-react-app&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;アプリの雛形作成&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;create-react-app snake-game&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;オブジェクトの操作などで便利なのでついでに、lodashも入れておきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;yarn add lodash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで環境構築は終了です。&lt;/p&gt;
&lt;h2&gt;ディレクトリ構成&lt;/h2&gt;
最終的なディレクトリ構成は以下のようになります。
&lt;p&gt;ディレクトリ構成&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;|--public
|  |--assets
|--src
|  |--components
|  |--styles&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;cssはsassで書いています。最近ピュアcssに耐えられない体になってきているのでさらっと入れちゃっています。&lt;/p&gt;
&lt;p&gt;※cssの解説はあまり詳しく説明しないので、面倒な方はmasterのcssをダウンロードしてつかったり、コピペすると良いと思います。sassをそのまま使いたい方はnode-sassを入れましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;yarn&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; node-sass&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;github pagesについて&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回&lt;a href=&quot;https://version-1.github.io/react-snake-game/&quot;&gt;デモ&lt;/a&gt;を公開していますが、github pagesというパッケージを入れるとgithub上での公開がかなり簡単になります。ちょっとしたReactアプリのデモをWebで動かしたいとかだとかなり便利です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回は環境構築だけなのであまり面白くありませんがら次回から実際にコードの解説をしていきます。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/06/20180629_react-snake-game-2/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Reactでスネークゲーム作ってみた。]]></title><description><![CDATA[ある日youtubeで面白い動画を探してたら、こんな動画に出会いました。 https://m.youtube.com/watch?v=AaGK-fj-BAM 動画自体はp5.jsというフレームワークを使って15分以内でスネークゲームを作ってみるというものです。 本当に1…]]></description><link>https://ver-1-0.net/blog/2018/06/27/react-snake-game-3</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/06/27/react-snake-game-3</guid><pubDate>Wed, 27 Jun 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ある日youtubeで面白い動画を探してたら、こんな動画に出会いました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://m.youtube.com/watch?v=AaGK-fj-BAM&quot;&gt;https://m.youtube.com/watch?v=AaGK-fj-BAM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;動画自体はp5.jsというフレームワークを使って15分以内でスネークゲームを作ってみるというものです。&lt;/p&gt;
&lt;p&gt;本当に15分で作れるの？？とか思って見ていると案の定ラスト５分とかで、スネークが逆走した時にちっちゃくなっちゃったりして、バグ見つけてわちゃわちゃしています。&lt;/p&gt;
&lt;p&gt;その様が締め切り前にバグとか、考慮漏れが見つかってドタバタする僕含めて多くのエンジニアの境遇に似てるなぁと思いながら楽しく見ていました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;スネークゲーム作りました&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;とまあ、話を元に戻しますが、自分でスネークゲームを作ってみるのも面白いかもしれないと思い実際にスネークゲームを作ってみました。&lt;/p&gt;
&lt;p&gt;&lt;video poster=&quot;https://statics.ver-1-0.xyz/uploads/2018/06/20180627_react-snake-game-3/snake.png&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/06/20180627_react-snake-game-3/snake.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;実装に要したのは20時間くらいですかね？あるいはもうちょっとかかったかもしれませんが、ゲームとして動くには10時間くらいで、スマホでも使えるようにレスポンシブにしたり、デバッグしたりでプラス10時間くらいで作りました。&lt;/p&gt;
&lt;p&gt;自分で遊んでみても結構面白いので、我ながら良くできたなぁなんて思ってます。
(まぁ、元のゲームのアイデアが面白いからかとは思います、、、)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;スネークゲームのルール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;スネークゲームを知らない人もいるかと思うので、ざっくりルールを説明すると&lt;/p&gt;
&lt;p&gt;登場人物&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;へび(スネーク)&lt;/li&gt;
 	&lt;li&gt;えさ(フード)&lt;/li&gt;
&lt;/ul&gt;
ルール
&lt;ul&gt;
 	&lt;li&gt;へびはえさを食べると成長して長くなる。&lt;/li&gt;
 	&lt;li&gt;長くなった自分に衝突したらゲームオーバー&lt;/li&gt;
 	&lt;li&gt;ゲームオーバーにならず、どこまで長さを伸ばせるか。&lt;/li&gt;
&lt;/ul&gt;
ルールはシンプルでいかに自分にぶつからずに、自分を成長させていけるかというゲームです。簡単ですね。
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;ざっくり作り方を説明&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;詳細な解説は、気が向いたらやろうと思うのですが、大まかに作りを説明すると&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;フィールドは固定幅と高さのdiv要素を並べて表現。&lt;/li&gt;
 	&lt;li&gt;へび、えさ、フィールド(一つのdiv)にhtmlのclassを割り当て&lt;/li&gt;
 	&lt;li&gt;Reactで一定の間隔ごとにレンダリングを行いへびが動いているように見せる。&lt;/li&gt;
 	&lt;li&gt;へびの移動は、divの隣の要素をへびの色に変化させた後にへびの長さの分だけへびのdiv要素を残し他を元のフィールドclassに戻して表現する。&lt;/li&gt;
&lt;/ul&gt;
という感じですかね。この説明でわかる人と分からない人がいるとは思うのですが、今回はこれくらいの粗さの説明にしておきます。
&lt;p&gt;ソースコードは、ここに置いてありますので気になる方はコード見てもらったり、スターを押して頂けると嬉しいです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/react-snake-game&quot;&gt;&lt;a href=&quot;https://github.com/version-1/react-snake-game&quot;&gt;https://github.com/version-1/react-snake-game&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ | 新しい技術を勉強するには暇つぶしにでも何か作ってみると身につく&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;以前に読んだ&lt;a href=&quot;https://amzn.to/2KcbIYs&quot;&gt;SOFT SKILLS　ソフトウェア開発者の人生マニュアル&lt;/a&gt;という本では、基礎を一通り学んだらその技術を使って一通り遊んでみるという時間を作ると新しい技術を習得する効率がよくなるというようなことが書いてありました。&lt;/p&gt;
&lt;p&gt;それに習ってというか、単純に理解することとできることというのは違うものなので新しく学んでみたことは実践するのが一番記憶にものこるし、そのあと役に立ちやすいです。実際にやってみて&lt;strong&gt;「あれ、こういう場合どうするんだ？」&lt;/strong&gt;とあらたな疑問が湧く場合もあるので、実践の過程でさらに理解が深まります。&lt;/p&gt;
&lt;p&gt;Reactもチュートリアルがあってそれをやるだけでも基礎の理解はできますが、全く指示がないままなにか作れと言われるとなかなかできないですよね。ただ、レールが敷かれていないなかで自分で試行錯誤しながらプログラムを書いていくというのが一番力がつくのでぜひともチャレンジしたいところです。（力が足りなすぎて、迷子になる場合もありますが、、そういう時は期間をおいて再チャレンジしてみたり最初のハードルを下げてみたりしてみると良いです。）&lt;/p&gt;
&lt;p&gt;今回は本当に作りましたという報告だけで、コード0ですが、暇つぶしに作ったゲームが割と面白かったので自慢してみました。&lt;/p&gt;
&lt;p&gt;今はちょっと解説書こうかなという気になってますが、どうなるかはわかりません。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/06/20180627_react-snake-game-3/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Railsの便利メソッドをlodashでやると]]></title><description><![CDATA[日常的にRailsでサーバ側を書いていても、ふとした時にjs書かないといけない時ってありますよね。
そのほかにも、これまでサーバ側でRuby書いてきたけど、せっかくだからフロント側も勉強したいなみたいな形で
Jsを触り始めることもあるかと思います。 jsもES…]]></description><link>https://ver-1-0.net/blog/2018/06/11/lodash-instead-of-rails</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/06/11/lodash-instead-of-rails</guid><pubDate>Mon, 11 Jun 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;日常的にRailsでサーバ側を書いていても、ふとした時にjs書かないといけない時ってありますよね。
そのほかにも、これまでサーバ側でRuby書いてきたけど、せっかくだからフロント側も勉強したいなみたいな形で
Jsを触り始めることもあるかと思います。&lt;/p&gt;
&lt;p&gt;jsもES6以降で便利なメソッドも増えたみたいですが、仕事で使ってみるとついついlodashとかライブラリを使いたくなってしまいます。
そんなこんなで、Railsのメソッドをlodashでやるには？みたいなところをまとめてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2&gt;slice&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;railsのsliceはハッシュから必要なキーだけを取得して返却してくれます。これがActiveRecordのオブジェクトにも
使えたりして便利なので、Jsでも同じことがやりたい！！となると思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;rails&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;fruit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;apple&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;red&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;banana&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;yellow&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;cucumuber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;green&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
fruit&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;slice&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:apple&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:banana&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;#  {:apple=&gt;&quot;red&quot;, :banana=&gt;&quot;yellow&quot;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;lodash&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; fruit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;apple&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;red&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;banana&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;yellow&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;cucumuber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;green&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
_&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pick&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fruit&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;apple&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;banana&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// { apple: &apos;red&apos;, banana: &apos;yellow&apos; }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;except&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;exceptはsliceの逆で、ハッシュのキーから不要なものを取り除いてくれます。&lt;/p&gt;
&lt;h4&gt;rails&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;fruit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;apple&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;red&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;banana&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;yellow&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;cucumuber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;green&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
fruit&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;except&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:apple&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:banana&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# {:cucumuber=&gt;&quot;green&quot;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;lodash&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; fruit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;apple&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;red&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;banana&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;yellow&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;cucumuber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;green&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
_&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;omit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fruit&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;apple&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;banana&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// { cucumuber: &apos;green&apos; }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Pluck&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;pluckは配列のハッシュから、指定したキーの配列で返却してくれます。lodashでは、0.4以降pluckは廃止されmapで代用できるようです。&lt;/p&gt;
&lt;h4&gt;rails&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;array &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;John&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;19&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Mary&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Smith&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
array&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pluck&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# [&quot;John&quot;, &quot;Mary&quot;, &quot;Smith&quot;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;lodash&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;array &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;John&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;19&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Mary&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Smith&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

array&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pluck&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
_&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;array&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;name&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// [&quot;John&quot;, &quot;Mary&quot;, &quot;Smith&quot;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;配列の引き算（差集合）&lt;/h2&gt;
&lt;p&gt;これはRails(Active Support) というよりはRubyですが、&lt;/p&gt;
&lt;h4&gt;Ruby(Rails)&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# [2]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;loadash&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;_&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;diffrence&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// [2]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Compact&lt;/h2&gt;
&lt;p&gt;compactはnilであるハッシュのキーを取り除いたハッシュを返却します。
微妙にい意味合いは違いますが、lodashでもfalseyなkeyをオブジェクトから取り除いてくれます。&lt;/p&gt;
&lt;h4&gt;Rails(Ruby)&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;fruit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;apple&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;red&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;banana&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;cucumuber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;green&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
fruit&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;compact
&lt;span class=&quot;token comment&quot;&gt;# {:apple=&gt;&quot;red&quot;, :cucumuber=&gt;&quot;green&quot;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;lodash&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;fruit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;apple&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;red&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;banana&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;cucumuber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;green&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
_&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;omitBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fruit&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isNull&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// { apple: &apos;red&apos;, cucumuber: &apos;green&apos; }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ほかにもありそうですが一旦ここまでで&lt;/h2&gt;
&lt;p&gt;ちょっとほかにもありそうですが、今思いつくのはここまでですので、一旦ここで区切らせて頂きます。
今思いましたが、ほかにもtapなどなどjsで再現したい関数というのはいくつかあるので続編もできれば
書きたいと思っています。&lt;/p&gt;
&lt;p&gt;では、今回は一旦ここまでで&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/06/20180611_lodash-instead-of-rails/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Dockerで使い捨てできるMysqlコンテナを構築]]></title><description><![CDATA[自分のローカル環境で、複数のMySQL使わないといけない時ってありますよね？ 仕事ではちょっと古めのバージョンを使ってるけど、プライベートの開発では最新の使いたいなどなど そんな時はDockerを使って使い捨てのMy SQL環境を構築しましょう。 Docker…]]></description><link>https://ver-1-0.net/blog/2018/04/30/docker-build-tmp-mysql</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/04/30/docker-build-tmp-mysql</guid><pubDate>Mon, 30 Apr 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;自分のローカル環境で、複数のMySQL使わないといけない時ってありますよね？&lt;/p&gt;
&lt;p&gt;仕事ではちょっと古めのバージョンを使ってるけど、プライベートの開発では最新の使いたいなどなど&lt;/p&gt;
&lt;p&gt;そんな時はDockerを使って使い捨てのMy SQL環境を構築しましょう。&lt;/p&gt;
&lt;p&gt;Dockerを使えば、起動時に必要なデータベース、ユーザーを作成してくれるので一度環境さえ作ってしまえば、使い捨てのデータベースを作成したり、捨てたりを結構カジュアルにできます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Dockerの公式イメージを取得&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;Dockerの基本はこちらにまとめているので、Dockerの基本的な操作がわからない方はこちらを参照ください。
&lt;a href=&quot;https://ver-1-0.net/2017/11/19/rails-nginx-postgres-on-docker-1/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その①&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、Dockerのインストールがまだの人はこちらでインストールしましょう。&lt;/p&gt;
&lt;p&gt;今回は、My SQL環境の構築にMy SQLの公式イメージを使っていきます。&lt;/p&gt;
&lt;p&gt;公式イメージを使うとコンテナ作成時に環境変数を与えてあげるだけで、必要なデータベースとユーザーを作成することができます。&lt;/p&gt;
&lt;p&gt;先ずははDockerコマンドで公式イメージを取得してきましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; pull mysql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;このコマンドでmysqlの最新のバージョンを取得することができます。&lt;/p&gt;
&lt;p&gt;バージョンを指定して取得したい場合は、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; pull mysql:5.6&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;のようにします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Dockerコンテナの作成&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;イメージが取得できたら、コンテナを作成していきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; mydb &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; MYSQL_ROOT_PASSWORD &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3309&lt;/span&gt;:3306 &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; mysql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;docker runでコンテナを作成していきます。&lt;/p&gt;
&lt;p&gt;引数の説明をすると&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;--name&lt;/th&gt;
&lt;td&gt;コンテナの名前を指定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;-e&lt;/th&gt;
&lt;td&gt;コンテナ起動時の環境変数を指定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;-p&lt;/th&gt;
&lt;td&gt;ポートフォワーディングの指定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;-d&lt;/th&gt;
&lt;td&gt;デーモン起動&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&amp;nbsp;
&lt;p&gt;mysql 使用するイメージを指定。5.6を使う場合はmysql:5.6とする。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ポイントはいくつかありますが、繰り返し書いたように-e オプションでコンテナ起動時の環境変数を指定できるので、起動時のROOTユーザーのパスワードを設定しています。&lt;/p&gt;
&lt;p&gt;指定できる環境変数はいくつかあって、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;MYSQL_USER&lt;/th&gt;
&lt;td&gt;起動時に作成されるユーザー名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;MYSQL_PASSWORD&lt;/th&gt;
&lt;td&gt;起動時に作成されるユーザーのパスワード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;MYSQL_ROOT_PASSWORD&lt;/th&gt;
&lt;td&gt;起動時のrootユーザーのパスワード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;MYSQL_DATABASE&lt;/th&gt;
&lt;td&gt;起動時に作成されるデータベース名&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&amp;nbsp;
&lt;p&gt;のようになります。&lt;/p&gt;
&lt;p&gt;また、 dockerでは-pオプションでポートフォワーディングの指定ができ、上のように
3309:3306
とするとホスト上の3309番のポートをコンテナ上の3306番ポートに、流し込んでくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;起動したMySQLコンテナに接続する&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここが今回の記事の肝になってきますが、 dockerにあまり慣れていない人は立ち上げたDBコンテナに接続する時のIPアドレスは？？？どうやって接続するの？？？となりがちです。&lt;/p&gt;
&lt;p&gt;結論から先に書くと、IPアドレスは127.0.0.1です。&lt;/p&gt;
&lt;p&gt;これを聞くと、ローカルに既にあるmysqlのホストも127.0.0.1なんだけど。。。&lt;/p&gt;
&lt;p&gt;となると思いますが安心してください。 dockerに繋げるときは別のポートで繋ぎましょう。&lt;/p&gt;
&lt;p&gt;これを念頭においているので、上のコンテナ作成時は3309番がコンテナの3306番に割り当てられるように指定しています。&lt;/p&gt;
&lt;p&gt;この3309番というのはポートが空いてさえいればなんでも良いのですが上で3309:3306として指定しているので、今回MySQLに接続する際はこの3309番を使用します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;mysql &lt;span class=&quot;token parameter variable&quot;&gt;-u&lt;/span&gt; root &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1 &lt;span class=&quot;token parameter variable&quot;&gt;-P&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3309&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;でデータベースに接続できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;独自のユーザー、データベースが作成されたコンテナを作成&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;上では、rootユーザーでコンテナを使う形になっていますがそんなのは嫌なのでちゃんと独自のユーザーとDBを使いましょう。&lt;/p&gt;
&lt;p&gt;便宜的に独自のデータベース名をmydbとするとコンテナ作成のコマンドは以下になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;password &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_USER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3309&lt;/span&gt;:3306 &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
mysql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これで独自のユーザーを持ったコンテナを作成できます。接続する際のコマンドは&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;mysql &lt;span class=&quot;token parameter variable&quot;&gt;-u&lt;/span&gt; mydb &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1 &lt;span class=&quot;token parameter variable&quot;&gt;-P&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3309&lt;/span&gt; mydb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;データベース起動時に初期化処理を差し込む&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;mysqlの公式イメージでは、/docker-entrypoint-initdb.d
にスクリプトやSQLを配置するとコンテナ起動時に実行してくれます。&lt;/p&gt;
&lt;p&gt;コンテナ作成時にデータベース内のテーブルもいっしょに作成してほしい！ダンプを取り込んで欲しい！という場合はローカルにそれらのファイルを配置しコンテナ作成時にそのディレクトリを/docker-entrypoint-initdb.dにマウントしてあげます。&lt;/p&gt;
&lt;p&gt;ホストのディレクトリをコンテナのディレクトリにマウントするには、-vオプションを指定します。
(ホストのディレクトリは絶対パスでの指定が必要です。）&lt;/p&gt;
&lt;p&gt;例を書くと、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; init-scripts
&lt;span class=&quot;token function&quot;&gt;touch&lt;/span&gt; init-scripts/init.sql
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;として
init.sqlの中身を&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;略&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;として次のコマンドでコンテナを作成します&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;password &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_USER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;pwd&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;/init-scripts:/docker-entrypoint-initdb.d &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3309&lt;/span&gt;:3306 &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; mysql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これでコンテナ起動時に必要なデータベースを流し込みことができます。&lt;/p&gt;
&lt;p&gt;ここまでで記事タイトルの目的は達成していますが以下にはトラブルシューティングを書いておきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;初期化スクリプトがエラーになりコンテナが立ち上がらない時&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;初期化のスクリプトでエラーになった場合はコンテナが立ち上がらないので、-dオプションを取ってログを見ながらデバッグしましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;立ち上がったコンテナを削除したい&lt;/h2&gt;
&amp;nbsp;
```bash
docker rm [コンテナ名] で削除できます
```
&amp;nbsp;
&lt;p&gt;-fオプションをつけるとコンテナが起動している状態でも問答無用で削除できます。&lt;/p&gt;
&lt;p&gt;同じ名前のコンテナを２つ起動することはできないので既にあるコンテナが邪魔な場合は消してしまいましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;mysqlが文字化けする&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;mysqlのデータが文字化けする場合は、mysqlの設定が原因なので、起動時にmysqlのオプションで文字コードをutf8に指定してあげましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;password &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_USER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;pwd&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;/init-scripts:inithogehoge &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3309&lt;/span&gt;:3306 &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; mysql --character-set-server&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;utf8 --collation-server&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;utf8_unicode_ci&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ | 自分が使用しているスクリプトを晒す&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;こうやって使い捨てのDBが構築できるようになるとカジュアルにデータベース捨てられるので、データも綺麗な状態を保てるし、ローカルも汚さないで複数のデータベース入れられるしでとっても捗りますね。&lt;/p&gt;
&lt;p&gt;ちょっと難点として気軽にdb構築できる割にコマンドが長くて煩雑なので僕はスクリプトにして、再利用しています。&lt;/p&gt;
&lt;p&gt;今回はそのスクリプトを晒して終わりにしたいと思います。基本は上にまとめたコマンドと同じですが、コンテナの落とし上げを繰り返すと同じコンテナ名が被って起動できないので、既に同じコンテナがある場合は削除するか訪ねてくれるようにしています。&lt;/p&gt;
&lt;p&gt;もしつかえそうだったらコピペして使って頂ければ&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;INIT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/init/ddl.sql&quot;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;CONTAINER_NAME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mydb

&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${CONTAINER_NAME}&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;${CONTAINER_NAME}&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot; is already started...&quot;&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt;  &lt;span class=&quot;token string&quot;&gt;&quot;remove container? (y/n) -------&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;read&lt;/span&gt; ANS
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$ANS&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;yY&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${CONTAINER_NAME}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;
    &lt;span class=&quot;token builtin class-name&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${INIT}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;not found &lt;span class=&quot;token variable&quot;&gt;${INIT}&lt;/span&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${CONTAINER_NAME}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;${CONTAINER_NAME}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_USER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;${CONTAINER_NAME}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;${CONTAINER_NAME}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;${CONTAINER_NAME}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${INIT}&lt;/span&gt;:/docker-entrypoint-initdb.d &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3309&lt;/span&gt;:3306 &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; mysql:5.6 --character-set-server&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;utf8 --collation-server&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;utf8_unicode_ci
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/04/20180430_docker-build-tmp-mysql/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[ReactNativeで電話番号フォームを実装する]]></title><description><![CDATA[ReactNativeで入力フォームを使う時って、TextInputを使いますよね。ただこのTextInput…]]></description><link>https://ver-1-0.net/blog/2018/03/25/implement-telephone-input</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/03/25/implement-telephone-input</guid><pubDate>Sun, 25 Mar 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;電話番号形式で入力する際のフォームを実装&lt;/h2&gt;
&lt;img class=&quot;post-image half-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/03/20180325_implement-telephone-input/ReactNativeTelephoneInput.gif&quot; alt=&quot;ReactNativeTelephoneInput.gif&quot;&gt;
&lt;p&gt;ReactNativeで入力フォームを使う時って、TextInputを使いますよね。ただこのTextInputさんは、汎用的につくられているので&lt;strong&gt;電話番号の入力フォームとしては少し使いづらい印象があります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;そこで割と簡単に電話番号形式入力フォームがコンポーネントとしてあらかじめ定義されていると嬉しいなと思い、実際につくってみました。&lt;/p&gt;
&lt;p&gt;機能としては、まだまだで入力に対して&lt;strong&gt;電話番号をハイフン区切りにして表示してくれる&lt;/strong&gt;だけですが、なんとなくそれっぽくなるように作りました。&lt;/p&gt;
&lt;p&gt;ぜひ、コピペして使ってみてください。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2&gt;TelephoneInputを実装&lt;/h2&gt;
ポイントは、insertDelimiterメソッドですね。&lt;strong&gt;入力に対してつねに所定の位置にハイフンが挿入される&lt;/strong&gt;ように作っています。
&lt;p&gt;あとはそれぞれ電話番号の桁数やスタイル、キーボードの種類などをpropsに定義しています。&lt;/p&gt;
&lt;h4&gt;TelephoneInput.js&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Component &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Platform&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; StyleSheet&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; View&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; TextInput &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-native&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token constant&quot;&gt;TELEPOHNE_LENGTH&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 番号の桁数&lt;/span&gt;
&lt;span class=&quot;token constant&quot;&gt;DELIMITER_INDEX&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// ハイフンを入れる位置&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TelephoneInput&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;insertDelimiter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; text_without_delimiter &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-flags&quot;&gt;g&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; index &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; text_without_delimiter&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token constant&quot;&gt;DELIMITER_INDEX&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text_without_delimiter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; insertIndex &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; value &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; index&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;slice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; insertIndex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;slice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
          insertIndex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          insertIndex &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        index&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;TextInput&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;autoFocus&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;keyboardType&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;phone-pad&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;placeholder&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;000-0000-0000&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;maxLength&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;TELEPOHNE_LENGTH&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;style&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;onChangeText&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;updateAction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;insertDelimiter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実際に使って見る&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;上での説明は最小限度にとどめましたが、コンポーネントを定義するところで得られるメリットは上の実装を意識せずにつかえることです。&lt;/p&gt;
&lt;p&gt;実際に使ってみて、それを確かめてみましょう。&lt;/p&gt;
&lt;h4&gt;App.js&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Component &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; StyleSheet&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; View&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Button &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-native&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; TelephoneInput &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./../components/TelephoneInput&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

type Props &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;App&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;React&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Props&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;props&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;telephoneNumber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;View&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;flex&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;alignItems&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;center&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;justifyContent&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;center&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Text&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Input Your Telephone Number&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Text&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;TelephoneInput&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;telephoneNumber&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token literal-property property&quot;&gt;fontSize&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;35&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token literal-property property&quot;&gt;fontWeight&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;bold&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token literal-property property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token attr-name&quot;&gt;updateAction&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;telephoneNumber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; number &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &amp;lt;Button
          raised
          title=&quot;Submit&quot;
          onPress=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; number &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;telephoneNumber&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;token function&quot;&gt;alert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;下記の番号が入力されています。\n&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;number&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;token function&quot;&gt;alert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;番号を入力してください。&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        /&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;View&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;TelephoneInputコンポーネントを定義したことで、ハイフンを挿入するといったロジックがかかれなくなったので、
コンポーネントを利用する側からはコードがスッキリ見えるようになりました。他の画面で電話番号を入力するフォームを作る必要ができたときもこのコンポーネントをつかえますね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;TelephoneInput&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;telephoneNumber&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;fontSize&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;35&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;fontWeight&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;bold&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token attr-name&quot;&gt;updateAction&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;telephoneNumber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; number &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、updateActionで（名前があまりよくないかもしれない）ステートも更新できるようにしているので、コンポーネントの呼び出し側でも入力された値がわかるようになっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/03/20180325_implement-telephone-input/Screen-Shot-2018-03-24-at-23.00.48.png&quot; alt=&quot;Screen-Shot-2018-03-24-at-23.00.48.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;親コンポーネントでボタンを押すと電話番号の値を表示するように今回はコードを書いていますが、見事に親コンポーネントで値がとれています。&lt;/p&gt;
&lt;p&gt;これができるば入力された電話番号をサーバーに送信して保存ということもできてフォームとしても使えますね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
 	&lt;li&gt;defaultPropsでデフォルトの値を決める。&lt;/li&gt;
 	&lt;li&gt;TextInputの各propsに対応する。&lt;/li&gt;
 	&lt;li&gt;電話番号の桁数やデリミタを入れる位置を外側から設定できるようにする。&lt;/li&gt;
 	&lt;li&gt;バリデーションをかけられるようにする。&lt;/li&gt;
&lt;/ul&gt;
などなど課題はありますが、ひとまず動くようなコンポーネントが作成できましたので、記録しておきます。以上のような課題が解消できたら追記するかもしれません。
&lt;p&gt;では&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/03/20180325_implement-telephone-input/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[フリーランスは相対取引が自由に働ける道？]]></title><description><![CDATA[久しぶりの更新になりました。できるだけ週一回ほど活動報告のような形で更新したかったのですが、結果的に2,3週間ほど時間があいてしまいました。 今まで活動報告として週…]]></description><link>https://ver-1-0.net/blog/2018/03/22/trade-of-market-and-direct</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/03/22/trade-of-market-and-direct</guid><pubDate>Thu, 22 Mar 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;久しぶりの更新になりました。できるだけ週一回ほど活動報告のような形で更新したかったのですが、結果的に2,3週間ほど時間があいてしまいました。&lt;/p&gt;
&lt;p&gt;今まで活動報告として週1くらいで更新していましたが、活動報告を書いていても所感の部分の方が書いていて楽しいし、自分の思考の結果のアウトプットにもなるのでコラムとして投稿していくことにしました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;相対取引と市場取引について&lt;/h2&gt;
今回はこんなテーマでいきます。タイトル自体は難しそうですが、なんてことはないです。
&lt;p&gt;市場取引とは、字面通り市場で行われるよりオープンな取引で、相対取引（あいたいとりひき）とはいわゆる「コネ」とか「知り合いの紹介」とかのよりクローズドな関係での取引になります。&lt;/p&gt;
&lt;p&gt;この言葉は、ちきりんさんの&lt;a href=&quot;http://amzn.to/2FHiXW8&quot;&gt;マーケット感覚を身につけよう---「これから何が売れるのか?」わかる人になる5つの方法&lt;/a&gt;で語られていて、これにインスパイアされています。&lt;/p&gt;
&lt;p&gt;このマーケット感覚を身につけようでは、就活市場を例にとってこの二つの取引の違いを示しています。以前は学校の先輩が就職しているからそのコネで企業に就職するような「相対取引」で多くの人たちが就職していましたが、インターネットの登場に伴いリクナビ、マイナビなど大手就職情報サイトが出現し「コネ」のない大企業にもリーチできるようになり、就職活動のほとんどが市場取引により行われるようになったとされています。&lt;/p&gt;
&lt;p&gt;この就活市場の相対取引から市場取引への変化は、様々な分野で同様の現象がおきており、クラウドワークスは自分の得意分野を生かしたいフリーランスとアウトソーシングをしたい企業をマッチングさせ、メルカリは中古でも良いから特定の商品が欲しい人と使わなくなった商品を売りにだしたい人をマッチングさせ、従来であればオープンな場所で取引されることのなかった品物を市場で取引できるようにしました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://amzn.to/2FHiXW8&quot;&gt;マーケット感覚を身につけよう---「これから何が売れるのか?」わかる人になる5つの方法&lt;/a&gt;には、インターネットであらゆるものが市場取引になった結果、「何が売れるのか」「何が価値あるものか」という見極める能力が大事ですよというようなことが書かれていますが、今回私はこの相対取引と市場取引という考え方が大変面白いなとおもいました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;市場取引と相対取引の違い&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;市場取引と相対取引の違いはその&lt;strong&gt;オープン性だと考えています。&lt;/strong&gt;市場では、誰もがそれぞれのモノの価格を一覧で確認できるので一物一価が原則ですが、相対取引では個人間での取引になるのでそうはなりません。&lt;/p&gt;
&lt;p&gt;一物一価というのは、タクシーの初乗りの料金が東京駅で乗っても、渋谷駅でのっても変わらないというように、一つのモノに足して、一つの値段しかつかないということです。転職市場でも同年齢、同経験の人であれば市場での価値はだいたい一つにきまりますよね。&lt;/p&gt;
&lt;p&gt;生まれてからずーっと日本にいるとこの一物一価は割と当たり前に感じますが、&lt;strong&gt;東南アジアなんかを旅行してみると意外に一つのモノに複数の値段がつくことが多くあります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;さきほどは都内でのタクシーの初乗り運賃を例にとりましたが、インドネシアなんかだと乗せてもらうタクシーの運転手によって値段が違うなんてことはしょっちゅうあります。お土産を買おうとして露天で買い物したりする時はモノに値札が付いてないので、値段を聞いて交渉をしてということも多いです。&lt;/p&gt;
&lt;p&gt;このインドネシアでの運賃が運転手によって値段が違うというのは、取引の種別が市場取引ではなく、相対取引だからです。タクシーがメーターで管理されたり「このモノの値段がいくらの価値があるか」という情報が広く行きとどいているとだいたい価格は一つに収束していきますが、メーターのない運転手や、値札のついていないモノを売っている出店の定員にお金を払うときは、交渉する相手によって値段が違います。&lt;/p&gt;
&lt;p&gt;このように相対取引と市場取引の値段の決まり方をみていくと、市場取引では市場の参加者が考える価格の平均が価格となり、相対取引では取引相手と自分の間での価格が取引の価格になります。つまり市場取引は多数の価格の平均値、相対取引では二者間で合意が取れる価格がそれぞれの取引での価格となります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;エンジニアへの需要増加でフリーランス市場が高度に市場化！？&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;こうやって思考を進めているとふとフリーランスの市場はどうなんだろう？と考え始めます。昨今フリーランスのエージェントサービスも多く出現して、エンジニアも供給不足などと言われて以前にもましてフリーランスとして働き始めることが楽になっているように思います。&lt;/p&gt;
&lt;p&gt;フリーランスエージェントさん方は業界に根ざした広いネットワークを使って、案件を獲得したいエンジニアに案件を提供しますし、エンジニアの供給不足や働き方改革などの世間の煽りにのりエージェントは今後も増えていくでしょう。ただ、このままフリーランスとしての働き方が一般化してくると世の中にある案件と&lt;strong&gt;フリーランスとして働きたいエンジニアが市場に出揃ってきて、「これぐらいのスキルだったらいくら」という相場が固まってくる&lt;/strong&gt;のではなんて考えています。&lt;/p&gt;
&lt;p&gt;そうなるとフリーランスの案件紹介サービスもリクナビやマイナビのフリーランス版のような均一的な求人になり、フリーランスだけど常駐が必須のような&lt;strong&gt;正社員よりは契約の自由度はあるけど、フリーランスの中では不自由&lt;/strong&gt;というような求人も増えてくるでしょう。&lt;/p&gt;
&lt;p&gt;このような状況になると&lt;strong&gt;「自由な働き方をしたいからフリーランスになったけど、お客様先で働いているし、働く時間も9時-17時でなんか違う・・」&lt;/strong&gt;という人がそれなりにでてきそうです。&lt;/p&gt;
&lt;p&gt;フリーランス界隈では、エージェントを挟むとマージンが取られるからクライアントとの直接契約が良いという話がありますが、直接契約メリットはなにも金銭的なところだけではありません。直接契約だと働く場所や働く時間、週の稼働時間なども自由に決められます。（交渉次第では勤務時間を午後からとか常にリモートワークなどの条件も選択できるでしょう）&lt;/p&gt;
&lt;p&gt;エージェント側だって、リモートワークの案件や週2,3日の案件をまとめて紹介することもできるのでは？という反論もありそうですが、エージェントも複数のクライアントやフリーランスを相手にしている以上、リソースの問題である程度パッケージのような形でクライアントと交渉するほかないのではないでしょうか？&lt;/p&gt;
&lt;p&gt;このように、フリーランス市場もほとんどがオープンな形で労働力が取引されるようになると&lt;strong&gt;やはりフリーランスが今後も自由に働いていくには相対取引を大事にしていかないといけないよね。&lt;/strong&gt;という結論になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;どのように相対取引の場を作り出すのか？&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまで、フリーランスがより一般的になって市場でのオープンな取引が増えてくるとその分自由度が減るので、相対（あいたい）取引的なクライアントとの直接契約がより自由度の高い働き方ができるでは？ということを書いてきましたが&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;じゃあどうやって、相対取引の機会をつくるのか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;という話になりますよね。&lt;/p&gt;
&lt;p&gt;これが面白いところでネットは市場での取引を進めましたが、同時に相対取引の場も同時に提供したのではなんて思っています。&lt;/p&gt;
&lt;p&gt;TwitterやFacebook、ブログでは、今でも結構ゆるい形で人を募集をしていたり、ブログやTwitterでの発言・プロフィールをもとに仕事の依頼をしたり、SNS経由で転職したりなんていう形で興味のある個人や団体になんのつながりもなくてもコンタクトが取れるようになりました。&lt;/p&gt;
&lt;p&gt;ここまで話をしてある程度わかるとは思うのですが、平たくいうとブログ書いたり、つぶやいたり、SNSで発信して仕事の依頼を受けよう。ということです。ほかにも、自分の興味ある情報を呟いている人がエンジニア不足で困っていたら、「仕事やりましょうか？」なんて声をかえてみるのもいいんではないでしょうか？&lt;/p&gt;
&lt;p&gt;リアルも良いですが、個人としてはWeb上の方が多くの人にリーチできるのでそちらに力いれていきたいです。とはいえ、リアルはリアルでWebに流れない情報が落ちているので、自分のクライアントになりそうな人がいそうな場所にいくというのはぜんぜんありですね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまでのまとめです。&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;エージェントはエージェントで均一的な案件が集まる。&lt;/li&gt;
 	&lt;li&gt;マッチングプラットフォーム以外で相対取引（あいたいとりひき）のクライアントに接触できる仕組みをつくる。&lt;/li&gt;
 	&lt;li&gt;相対取引（あいたいとりひき）を狙うフィールドはWeb上が多くの人にリーチできるのでよさそうだけどリアルのつながりもぜんぜんあり&lt;/li&gt;
&lt;/ul&gt;
色々と書きましたが、ここらへんがポイントではないでしょうか？この記事で言いたいことは、フリーランスになるには、エージェントさんなどの動きが活発になってきて需要もあるから割と難しくないけど、そういう志向のエンジニアが市場に出揃ってきて相場もかたまりつつあるから、&lt;strong&gt;理想の働き方や年収を実現するには、圧倒的に高度なスキルか一工夫必要だよということです。&lt;/strong&gt;
&lt;p&gt;私がこうしてブログを書いているのもこれによるところが多いですね。ネットに投稿していくことが資産になるとおもっているので、偉そうに語りましたが自分の戒めにもまとめてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;最後まで読んで頂きありがとうございました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/03/20180322_trade-of-market-and-direct/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Rails5.1すでに存在するカラムをmigrationでnot nullにする]]></title><description><![CDATA[すでに存在するカラムをマイグレーションでnullにするには、change_column_nullを使います。 change_column_nullはDBの定義をnull:オプションで指定した定義に変更するまえに、値がnullのものを第4引数にupdateしたのちにDB…]]></description><link>https://ver-1-0.net/blog/2018/03/01/rails-migration-not-null</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/03/01/rails-migration-not-null</guid><pubDate>Thu, 01 Mar 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;change_column_nullを使う&lt;/h2&gt;
&lt;p&gt;すでに存在するカラムをマイグレーションでnullにするには、change_column_nullを使います。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ChangeLikeCountToPost&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; ActiveRecord&lt;span class=&quot;token double-colon punctuation&quot;&gt;::&lt;/span&gt;Migration&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;change&lt;/span&gt;&lt;/span&gt;
    change_column_null &lt;span class=&quot;token symbol&quot;&gt;:posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:like_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;change_column_nullはDBの定義をnull:オプションで指定した定義に変更するまえに、値がnullのものを第4引数にupdateしたのちにDB定義を変更してくれます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;change_column_null&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;table_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; null&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; default &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#:nodoc:&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;unless&lt;/span&gt; null &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; default&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;
    execute&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;UPDATE &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;quote_table_name&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;table_name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; SET &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;quote_column_name&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;column_name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;quote&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;default&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; WHERE &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;quote_column_name&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;column_name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; IS NULL&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  change_column table_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; null
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;change_columnでもDBの定義は変更できますが、このメソッドは問答無用でDBの定義を変更しにいくので、「値がNullのカラムにNotNull制約をつけることはできません」となって怒られます。&lt;/p&gt;
&lt;h2&gt; change_column_nullはDBのデフォルト値も変更してくれるわけではない&lt;/h2&gt;
&lt;p&gt;下のコードをみると、NotNull制約をつけるついでにDBのデフォルト値も設定してくれそうに見えますが、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;change_column_null &lt;span class=&quot;token symbol&quot;&gt;:posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:like_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;実際は、そこまでやってくれません。第四引数の&lt;strong&gt;0はnullの値を置き換える値を指定するだけでデフォルト値を指定しているわけではない&lt;/strong&gt;ことに注意しなければいけません。&lt;/p&gt;
&lt;p&gt;そのため、NotNull制約をつけるついでにデフォルト値も設定する場合は、以下のようにする必要があります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ChangeLikeCountToPost&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; ActiveRecord&lt;span class=&quot;token double-colon punctuation&quot;&gt;::&lt;/span&gt;Migration&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;change&lt;/span&gt;&lt;/span&gt;
    change_column_null &lt;span class=&quot;token symbol&quot;&gt;:posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:like_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
    change_column &lt;span class=&quot;token symbol&quot;&gt;:posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:like_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/03/20180301_rails-migration-not-null/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[私がフリーランスになった理由]]></title><description><![CDATA[2017年の11月にフリーランスのエンジニアとして独立して晴れてフリーランスの道を進み初めて、
現在これを書いている2020年…]]></description><link>https://ver-1-0.net/blog/2018/02/23/why-i-become-engineer</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/02/23/why-i-become-engineer</guid><pubDate>Fri, 23 Feb 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2017年の11月にフリーランスのエンジニアとして独立して晴れてフリーランスの道を進み初めて、
現在これを書いている2020年1月現在二年が経過しました。&lt;/p&gt;
&lt;p&gt;フリーのエンジニアとして働いている中で色々な方々にお会いすることがあるのですが、
その中で「なんでフリーランスになったの？」と聞かれることが何回かあったので記事として改めてまとめてみたいと思います。&lt;/p&gt;
&lt;h2 id=&quot;フリーランスへの憧れ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%B8%E3%81%AE%E6%86%A7%E3%82%8C&quot; aria-label=&quot;フリーランスへの憧れ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フリーランスへの憧れ&lt;/h2&gt;
&lt;p&gt;フリーランスになった理由として、色々な理由をこねることはできると思うのですが、僕に関していうとまぁフリーランスになった理由は、
単純なフリーランスとしての憧れです。そこに特に深い理由はなく、**「やってみたかったから」**です。&lt;/p&gt;
&lt;p&gt;幸運なことにWebエンジニアの需要はかなり高く、フリーランスで仕事なくなっても最悪転職活動して会社員に戻れば良いやという感じで
思えたので、「やりたいならやってみよう」ということでフリーランスとして働きはじめました。&lt;/p&gt;
&lt;p&gt;フリーランスというと、仕事ができて、高収入、自分の好きな時間に仕事ができてというようなキラキラしたイメージがあるかと思うのですが、
僕自身もこのライフスタイルに学生時代から憧れていて、目の前になんか届きそうなチャンスがあったのでフリーランスとして働き始めたと言う形になります。&lt;/p&gt;
&lt;p&gt;実際に働き初めてみると本当に人によりけりで、フリーランスとして働いているけど実質的にはほとんど会社勤めと変わらないような働き方をしている人もいるし、海外でリモートワークもしているし様々です。&lt;/p&gt;
&lt;p&gt;フリーランスとして、二年働きましたが、フリーランスだから高収入、フリーランスだから自分の仕事ができるということは特にないです。
フリーランスは文字通りフリーなので、会社に属しているしがらみから取り払われて選択の自由が与えられるだけで、自らリスクを侵して選択していかない人は、
結構不自由だなぁと感じることも多いです。&lt;/p&gt;
&lt;p&gt;**「フリーランスのキラキライメージにのせられるな！」**みたいな話もよくあると思うのですが、年齢が十分に若くある程度の経験と実力不足を努力で補える自身のある人はどんどんフリーランスやっていけば良いと思います。&lt;/p&gt;
&lt;p&gt;他の文系職種とかだと話は違うかと思うのですが、Webエンジニアに関していうと今の時代では、ミスってもまた会社員として勤め直すことは十分可能なので
人生の経験を詰める方、自分のやりたいワークスタイルを選択できれば良いのではと思います。&lt;/p&gt;
&lt;h2 id=&quot;会社員時代に感じていた不満&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BC%9A%E7%A4%BE%E5%93%A1%E6%99%82%E4%BB%A3%E3%81%AB%E6%84%9F%E3%81%98%E3%81%A6%E3%81%84%E3%81%9F%E4%B8%8D%E6%BA%80&quot; aria-label=&quot;会社員時代に感じていた不満 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;会社員時代に感じていた不満&lt;/h2&gt;
&lt;p&gt;フリーランスになるにあたり、フリーランスへの憧れがまず第一の理由としてあげられるのですが、
それに付随して会社員時代に感じた不満みたいんものもフリーランスとなるきっかけになったのでそれについても書いていきます。&lt;/p&gt;
&lt;h3 id=&quot;貴重な人生の時間を犠牲にしても年数百万程度しか稼げない&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%B2%B4%E9%87%8D%E3%81%AA%E4%BA%BA%E7%94%9F%E3%81%AE%E6%99%82%E9%96%93%E3%82%92%E7%8A%A0%E7%89%B2%E3%81%AB%E3%81%97%E3%81%A6%E3%82%82%E5%B9%B4%E6%95%B0%E7%99%BE%E4%B8%87%E7%A8%8B%E5%BA%A6%E3%81%97%E3%81%8B%E7%A8%BC%E3%81%92%E3%81%AA%E3%81%84&quot; aria-label=&quot;貴重な人生の時間を犠牲にしても年数百万程度しか稼げない permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;貴重な人生の時間を犠牲にしても年数百万程度しか稼げない&lt;/h3&gt;
&lt;p&gt;これはある事業会社でエンジニアとして働いていた時に感じたのですが、その会社は結構残業が多く月200時間を超えて働くのが割と頻繁にありました。
これだけ働くとやっぱり平日はほとんど会社のことで全ての時間をとられてしまいいくら勉強をしたり、趣味の時間にしたりしようとしてもその時間と体力が残っていませんでした。&lt;/p&gt;
&lt;p&gt;会社の仕事が自分の趣味とか興味と８割方あっていたりすればそれでも幸せに働いたりはできるのかもしれませんが、私の場合そうではなかったので、&lt;/p&gt;
&lt;p&gt;「これって週5日を会社に捧げているってことだよなぁ」
「それだけ人生の時間を捧げているのに当時で400万円程度これから頑張っても500万円って」&lt;/p&gt;
&lt;p&gt;なんてことを考え初めていました。価値というのは、取引する相手によって変わるのでなんとも言えないですが、
この状況をシンプルに捉えると&lt;strong&gt;自分の人生を400~500万円で売って生計を立てている&lt;/strong&gt;ということになります。
保険料を会社が負担してるから実質はもっと高値で売っているのかもしれませんが、それでも差額は年100万円程度でしょう。&lt;/p&gt;
&lt;p&gt;自分の人生はおそらく誰と取引したとしても自分と取引した時に価値が最大になるかと思うので、多くの場合少なく感じるとは思うのですが、
それにしても**「自分の人生の価値低すぎでは？」**と思うようになり、自分で価格を設定できて、取引の相手を選べるフリーランスは良いのではと考えるようになりました。&lt;/p&gt;
&lt;h3 id=&quot;同じような失敗を繰り返したくないので環境を変えたかった&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%90%8C%E3%81%98%E3%82%88%E3%81%86%E3%81%AA%E5%A4%B1%E6%95%97%E3%82%92%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E7%92%B0%E5%A2%83%E3%82%92%E5%A4%89%E3%81%88%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F&quot; aria-label=&quot;同じような失敗を繰り返したくないので環境を変えたかった permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;同じような失敗を繰り返したくないので環境を変えたかった&lt;/h3&gt;
&lt;p&gt;フリーランスなる前にすでに、自分は二社会社を経験しているのですが、**次また自分が良いと思う会社に転職してもまた二、三年たったら
別の会社を探しているだろう。**という思いがぬぐいきれなかったので環境を変えて、フリーランスという働き方を選択しました。&lt;/p&gt;
&lt;h3 id=&quot;働き方の自由度が低い&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%83%8D%E3%81%8D%E6%96%B9%E3%81%AE%E8%87%AA%E7%94%B1%E5%BA%A6%E3%81%8C%E4%BD%8E%E3%81%84&quot; aria-label=&quot;働き方の自由度が低い permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;働き方の自由度が低い&lt;/h3&gt;
&lt;p&gt;エンジニアとして、多くの現場を経験することは様々な環境での技術の応用力がつくので生産性の向上につながると思っているのですが、
会社員として週5日で働いていると他のプロジェクトを経験できないので自身のキャリアの成長としてはあまりよろしくないかなという感じがしていました。&lt;/p&gt;
&lt;p&gt;フリーランスになると複数の現場の掛け持ちや短期、中期で色々なプロジェクトを経験できるので短期間で引き出しを増やすことが可能です。&lt;/p&gt;
&lt;h2 id=&quot;まとめ--実際フリーランスになってどうだったか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81--%E5%AE%9F%E9%9A%9B%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%A9%E3%81%86%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%8B&quot; aria-label=&quot;まとめ  実際フリーランスになってどうだったか permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ | 実際フリーランスになってどうだったか？&lt;/h2&gt;
&lt;p&gt;結果論にはなりますが、2017年に独立する前に散々なやんだあげく、フリーランスと言うキャリアを選択できたのは本当によかったと思います。
会社の中にいると知らないだれかが稼いで聞いてくれるので、外の状況に関心がなかったっり、情報が入ってこなかったりしがちなのですが、
フリーランスとして働き初めて、経営者の人や同じフリーランスの人などと接する機会が増えて、働く時の考え方に幅が出てきたような気がしています。&lt;/p&gt;
&lt;p&gt;一方でフリーランスとして働いていく中でやっぱりフリーランスとしての立場の弱さなど限界を感じる部分も多くあります。
プロジェクトに参加して、自分の意見を通そうと思った時にやっぱり社内の人間ではないので決断ができず、アドバイスや意見を伝えることしかできないところに
歯がゆさを感じる部分も多いです。（社外の人間であるということで適度な距離感を気づけるという利点もあるのですが）&lt;/p&gt;
&lt;p&gt;フリーランスというのはまぁ実態のないものです。
フリーランスは名前の通り形のない仕事なので、自分が思うフリーランス像を作るのにどういう行動をすれば良いのか等々を計画しながら
やっていくものなので各々のフリーランスの形があるのではないのでしょうか。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;リモートワークがしたいなら、リモートワークができる仕事をどうすれば獲得できるのか？&lt;/li&gt;
&lt;li&gt;収入をあげたいなら、どういうことをすれば単価が上がるのか？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あたりを考えながら、自分のスタイルを作っていけるのが理想のフリーランスなのかなぁなんて思います。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/02/20180223_why-i-become-engineer/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[polymophicなテーブルを経由して、has_many thourghする。]]></title><description><![CDATA[Railsのアソシエーションで、中間テーブルを経由して一個飛ばしでインスタンスを取得できるhas_many~through便利ですよね。ところが、この中間テーブルがpolymophic…]]></description><link>https://ver-1-0.net/blog/2018/02/14/post-1918</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/02/14/post-1918</guid><pubDate>Wed, 14 Feb 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Railsのアソシエーションで、中間テーブルを経由して一個飛ばしでインスタンスを取得できるhas_many~through便利ですよね。ところが、この&lt;strong&gt;中間テーブルがpolymophicだった場合&lt;/strong&gt;に、どうやって対象を取得すれば良いのかということに悩みました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;解決策は、結論からいうと、下の例でいうと
モデルにはこういう形で定義して、そのままuser.post_commentsのような形でできます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;has_many &lt;span class=&quot;token symbol&quot;&gt;:post_comments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;through&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:comments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:source&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:commentable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:source_type&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Post&apos;&lt;/span&gt;&lt;/span&gt;
has_many &lt;span class=&quot;token symbol&quot;&gt;:blog_comments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;through&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:comments&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:source&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:commentable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:source_type&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Blog&apos;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;図やコードを交えて解説&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;これだけではなんのことかよくわからないかもしれないので、上の結論のコードの全容を明かすと以下のようになります。&lt;/p&gt;
&lt;p&gt;以下のモデルは、複数のユーザがブログを作り、各々ポストを投げていくという世界を想定したモデル群です。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/02/20180214_post-1918/polymophic-through-1024x767.png&quot; alt=&quot;polymophic-through-1024x767.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;User&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; ActiveRecord&lt;span class=&quot;token double-colon punctuation&quot;&gt;::&lt;/span&gt;Base
  has_many &lt;span class=&quot;token symbol&quot;&gt;:blogs&lt;/span&gt;
  has_many &lt;span class=&quot;token symbol&quot;&gt;:posts&lt;/span&gt;
  has_many &lt;span class=&quot;token symbol&quot;&gt;:comments&lt;/span&gt;
  has_many &lt;span class=&quot;token symbol&quot;&gt;:post_comments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;through&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:comments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:source&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:commentable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:source_type&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Post&apos;&lt;/span&gt;&lt;/span&gt;
  has_many &lt;span class=&quot;token symbol&quot;&gt;:blog_comments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;through&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:comments&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:source&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:commentable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:source_type&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Blog&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Blog&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; ActiveRecord&lt;span class=&quot;token double-colon punctuation&quot;&gt;::&lt;/span&gt;Base
  has_many &lt;span class=&quot;token symbol&quot;&gt;:comments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;as&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:commentable&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Post&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; ActiveRecord&lt;span class=&quot;token double-colon punctuation&quot;&gt;::&lt;/span&gt;Base
  has_many &lt;span class=&quot;token symbol&quot;&gt;:comments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;as&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:commentable&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Comment&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; ActiveRecord&lt;span class=&quot;token double-colon punctuation&quot;&gt;::&lt;/span&gt;Base
  belongs_to &lt;span class=&quot;token symbol&quot;&gt;:commentables&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;polymophic&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;コードを見てみると、確かにいつものようにhas_manyで&lt;strong&gt;「Userが行った投稿を取ってくる」ことや「Userが持っているブログを取得する」ということは簡単にできます。&lt;/strong&gt;ただ、&lt;strong&gt;「ユーザーがコメントした投稿」&lt;/strong&gt;や&lt;strong&gt;「ユーザーがコメントしたブログ」&lt;/strong&gt;についてはどうやって取得しようか少し迷うところがあると思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;特に、ここでは、中間テーブルの役割をはたすCommentがポリモーフィック関連なのでなおさらです。&lt;/p&gt;
&lt;p&gt;railsのポリモーフィック関連では、&lt;del&gt;able_idと&lt;/del&gt;able_typeというカラムで関連が定義されますが、上のコードを例にとるとhas_many :commentsだけでは、&lt;strong&gt;「ユーザーがコメントした投稿」と「ユーザーがコメントしたブログ」の両方ともが取得されてきてしまいます。&lt;/strong&gt;愚直にやるのであれば、commentable_typeを条件にSQLを発行してとやればできなくはないですが、それは苦しいです。。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そこで、この解決策では、:sourceオプションと:source_typeオプションを使って、ポリモーフィック関連の先のテーブルを指定してあげることで「ユーザーがコメントした投稿」と「ユーザーがコメントしたブログ」を簡単に取得できるようにしています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;polymophicなテーブルを経由して、has_many thourghする場合は、&lt;strong&gt;sourceオプションでポリモーフィック関連の名前を指定して、source_typeで中間テーブルの先のクラスを指定してシンプルにデータをとってきましょう。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/02/20180214_post-1918/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[AssetPipelineなしでRailsのモデルのデータをReactで取得する方法]]></title><description><![CDATA[サーバ側はRailsでフロント側はReactみたいな構成でシステム開発していることってまあまああると思うのですが、 RailsとReactは全く別の機構なのでその間でどういう形でデータのやりとりをしていますでしょうか？ SPAなどでは問答無用でAPI…]]></description><link>https://ver-1-0.net/blog/2018/01/31/how-to-get-rails-mode-on-react</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/01/31/how-to-get-rails-mode-on-react</guid><pubDate>Wed, 31 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;サーバ側はRailsでフロント側はReactみたいな構成でシステム開発していることってまあまああると思うのですが、&lt;/p&gt;
&lt;p&gt;RailsとReactは全く別の機構なのでその間でどういう形でデータのやりとりをしていますでしょうか？&lt;/p&gt;
&lt;p&gt;SPAなどでは問答無用でAPIで初期状態も含めてデータを取得してくるようなことをやってくるとは思うのですが、そこまでかっちりReactを使っている訳ではなく、初期状態はRailsでレンダリングして、残りのユーザからの入力などによるViewの変更はReactでみたいなことありますよね。&lt;/p&gt;
&lt;p&gt;ただ、AssetPipelineなどを使って入ればrails-reactというgemを使って自動（あまり意識せずに）データを受け渡しできるのですが、そうではない場合にどのようにデータをやりとりするか以下にまとめます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2&gt;JavaScriptでDOMをパース&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;上に書いた内容でRails-Reactでデータの受け渡しをする場合は、基本的な考え方としてモデルの内容を一旦json形式に変換して、DOMにレンダリングします。&lt;/p&gt;
&lt;p&gt;その処理自体を自分で書いても良いのですがさすがに辛いので、楽して上にも書いた&lt;a href=&quot;https://github.com/reactjs/react-rails&quot;&gt;&lt;strong&gt;rails-react&lt;/strong&gt;&lt;/a&gt;のReactComponentヘルパーを使います。このヘルパーの引数にKeyとモデルなどのデータを私てあげるとそれをjson形式に変換してレンダリングしてくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;(例)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-react-class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Settings&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token attr-name&quot;&gt;data-react-props&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&apos;&lt;/span&gt;{&quot;settings&quot;:[{&quot;id&quot;:72,&quot;user_id&quot;:1,
&quot;space_id&quot;:&quot;space-a&quot;,
&quot;api_key&quot;:&quot;hogehoge&quot;},&lt;span class=&quot;token punctuation&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;実際のモデルだともっと行数が多いのですが、例では簡略化しています。&lt;/p&gt;
&lt;p&gt;DOMへのモデルのレンダリングができたらあとはそれをページが描画されたタイミングなどでパースするだけです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getSettings&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;selector&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; node &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;div[data-react-class=&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;selector&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; json &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getAttribute&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;data-react-props&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; json
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こんな感じのメソッドを定義してあげて使い回せばjavascript側でも無事Railsのモデルのデータを取得ができます。&lt;/p&gt;
&lt;p&gt;RailsとJavaScriptを確実に分けて開発したい！asset pipelineは使わないという主義の人はこうやって見ると良いかもしれません。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/01/20180131_how-to-get-rails-mode-on-react/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Rails+Devise+LetterOpenerでシードを行う際に、メールがタブで開かれないようにする]]></title><description><![CDATA[letter opener便利ですよね。 ryanb/letter_opener letter openerは、開発しているアプリケーションからメールが飛んだときに、メールを送信する代わりに、送信するメールをタブで開いてくれます。 が、 今回Rails + Devise…]]></description><link>https://ver-1-0.net/blog/2018/01/17/rails-letter-opener-seed</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/01/17/rails-letter-opener-seed</guid><pubDate>Wed, 17 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;letter opener便利ですよね。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ryanb/letter_opener&quot;&gt;ryanb/letter_opener&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;letter openerは、開発しているアプリケーションからメールが飛んだときに、メールを送信する代わりに、送信するメールをタブで開いてくれます。&lt;/p&gt;
&lt;p&gt;が、&lt;/p&gt;
&lt;p&gt;今回Rails + Devise + Letter Openerを使った場合に、ユーザのアカウント作成時のメールのタブがポコポコでてくるようになってしまったのでその対策を共有します。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&amp;nbsp;
&lt;h2&gt;やろうとしたこと&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回はテストデータとして、rake db:seedでユーザを10人くらい自動で生成するようなスクリプトを組みました。&lt;/p&gt;
&lt;p&gt;開発中にDBを綺麗にしたいときに、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;rake:db:reset &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rake db:seed&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにカジュアルに実行できるようにしたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;db/seeds.rb&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;User&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;delete_all
&lt;span class=&quot;token number&quot;&gt;10.&lt;/span&gt;times &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
  User&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;create&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;user_&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;idx &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;user_&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;idx &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;@example.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(これはサンプルで実際はFactoryBotを使ったりしています)&lt;/p&gt;
&lt;p&gt;この方法だと、確かにユーザは10人作れるのですが実際にシードを走らせてみるとユーザ作成時にdeviseが確認のEmailを飛ばすので、それに呼応したletter openerがポコポコと丁寧に10人分
のメールをポコポコとタブで開いてくれます。&lt;/p&gt;
&lt;p&gt;さすがに、毎回シードを走らすたびに10個もタブが開くのはいただけないので少し調べてみました。&lt;/p&gt;
&lt;h2&gt;解決方法&lt;/h2&gt;
&lt;p&gt;解決方法は割と簡単で
以下のように設定を足して&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;ActionMailer::Base.perform_deliveries = false&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;シード内でメールが飛ばないようにするだけで解決できます。&lt;/p&gt;
&lt;p&gt;db/seeds.rb&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# LetterOpnerでメールが開かれないようにする&lt;/span&gt;
ActionMailer&lt;span class=&quot;token double-colon punctuation&quot;&gt;::&lt;/span&gt;Base&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;perform_deliveries &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;

User&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;delete_all
&lt;span class=&quot;token number&quot;&gt;10.&lt;/span&gt;times &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
  User&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;create&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;user_&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;idx &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;user_&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;idx &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;@example.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/01/20180117_rails-letter-opener-seed/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[rubyのEnumerableクラスの抽出メソッドまとめ、map、find、reject、select]]></title><description><![CDATA[RubyのEnumerableがごっちゃになっているのと、便利なメソッドが多いので、
まとめてみます。 例に使用しているrubyのversionは2.4.1です。   mapはブロックの結果をまとめた配列を返してくれます。
collectというメソッドもありますが、map…]]></description><link>https://ver-1-0.net/blog/2018/01/12/ruby-enumerable</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/01/12/ruby-enumerable</guid><pubDate>Fri, 12 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;RubyのEnumerableがごっちゃになっているのと、便利なメソッドが多いので、
まとめてみます。&lt;/p&gt;
&lt;p&gt;例に使用しているrubyのversionは2.4.1です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;map&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;mapはブロックの結果をまとめた配列を返してくれます。
collectというメソッドもありますが、mapはcollectのエイリアスなので挙動は同じです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;mapの方が短いのでmapを使いがちです。&lt;/p&gt;
&lt;p&gt;下の例では仮想通貨の頭文字の配列の中で、&apos;B&apos;という文字列が
含まれるかを判断して返しています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;003&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;   coins &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;BTC&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;ETH&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;XRP&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;NEM&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;BTC&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ETH&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;XRP&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;NEM&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;004&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;004&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;   coins&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;map&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;coin&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; coin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;B&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Hashの場合は、key と valueを分割できます。
keyを取り出したり、valueを取り出すにはこうします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;027&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;   coins_hash &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;btc&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Bitcoin&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;eth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Ethereum&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;xrp&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Ripple&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;nem&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;XEM&apos;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:btc&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Bitcoin&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:eth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Ethereum&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:xrp&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Ripple&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:nem&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;XEM&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;032&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;   coins_hash&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;map&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; value &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Bitcoin&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Ethereum&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Ripple&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;XEM&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;032&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;   coins_hash&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;map&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; key &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:btc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:eth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:xrp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:nem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;find ( detect )  | 最初に条件に一致したものを返却&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;findは配列やハッシュの個別のオブジェクトの中で最初に真になったものを返却してくれます。
detectというメソッドもありfindの別名になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;090&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;   coins&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;find&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;c&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;X&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;XRP&quot;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ハッシュの場合&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;084&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$gt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; coins_hash&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;find&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; key &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; key&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to_s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;x&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:xrp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Ripple&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;select | 条件に一致したものを配列で取得&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;selectはブロックが真を返したものを配列で返却してくれます。
findメソッドは最初に一致したものを返却してくれますが、selectは真のものすべてを
返却してくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;095&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;   coins&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;select&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;c&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;T&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;BTC&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ETH&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ハッシュの場合&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;117&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; coins_hash&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;select&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;coin&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; coin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to_s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;t&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:btc&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Bitcoin&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:eth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Ethereum&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;reject | 条件に一致しないものを配列で取得&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;rejectはselectの反対で偽のものを抽出して配列にしてくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;118&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; coins&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;reject&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;c&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;T&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;XRP&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;NEM&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ハッシュの場合&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;121&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; coins_hash&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;reject&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;coin&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; coin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to_s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;t&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token symbol&quot;&gt;:xrp&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Ripple&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:nem&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;XEM&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/01/20180112_ruby-enumerable/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[2018年やること・やらないことリスト -]]></title><description><![CDATA[活動報告2回目になります。 週…]]></description><link>https://ver-1-0.net/blog/2018/01/01/action-report-1225</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/01/01/action-report-1225</guid><pubDate>Mon, 01 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;活動報告2回目になります。&lt;/p&gt;
&lt;p&gt;週4日で働いてる現場も無事仕事納めをし、安心して年を越せそうです。
今月は無事契約を更新できたので引き続き同じ現場で働かせて頂きます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id=&quot;toc_id_5&quot;&gt;振り返りを行う目的(復習）&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;目的も一度だけでは忘れてしまいがちなので、復習します。
（復習はしつつも、適宜改善はしていきたいです。）&lt;/p&gt;
&lt;p&gt;目的は以下の通りです。2018年も引き続きこれでやっていきます。
（まだ2回目ですが）&lt;/p&gt;
&lt;p&gt;・自分の活動状況を公開してフリーランスの生活を可視化する。
（普通に生活しています。生きています。というのをお伝えする。）
・良いことがあったらドヤする。
・一年スパン、三ヶ月スパンでの目標の確認及び達成度合いの確認&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;新年の抱負&lt;/h2&gt;
&amp;nbsp;
&lt;h3&gt;やること&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;&lt;strong&gt;・フリーランスとして1年間生き延びる。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;これは一番の目標ですかね。念願のフリーランスにはなったものの、なるだけなら誰でもなれるのでしっかり収入を維持しつつまずは一年フリーランスとしてサバイブするということです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;・エンジニアとして特定の分野の技術を固める。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;エンジニアの勉強すべきことってやっぱり多くて、勉強の時間は十分に取らないといけないのですが、やっぱり習得できる範囲というのは限られています。あれもこれもとならず自分のフィールドを決めてそこのフィールドでのレベルアップを図っていきたいです。今はRailsからフロントにかけてのところでReactについてもっと知識をつけて行ければと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;・より多くより、「より少なくより良く」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;フリーランスは自由度が高く基本何をやってもいいんですけど、それで色々やってみたけどやっただけで終わってしまったというのでは身にならないので、ある程度注力する分野を決めてそこを掘っていきたいです。限られた資源を分散することなく効果的に集中していきたいです。&lt;/p&gt;
&lt;p&gt;これは読書にも言えることで、たくさんの本を読むというよりはこれは良いと思った本を繰り返し読むという本の読み方に変えていきたいです。最近では、Amazonでポチッとするとすぐに本を買えてしまうのであれこれ読んでしまいがちなのですが、本の内容を忘れてしまっていたりするので一冊の本を通して理解できるまで繰り返し読むということをしていきたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;・活動報告を1年間継続する。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;この一年ブログを書き続けてなんとか100記事達成できました。短期間で集中してというのも良いのですが継続することがその分野での深みや差別化になると思うので大きなインパクトはなくとも細く長く続けていきたいななんて思っています。&lt;/p&gt;
&lt;p&gt;あとは、来年書き続けた記事を振り返ったりしたら、あの時こんなこと考えていたのねなんてことがわかったりして面白そうだからです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;・英語のドキュメントを読破する。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;StackOverFlowくらいの英語なら読めるのですが、ドキュメントなどちょっと長めの文章になると体力が持たないです。。あとは一文一文の意味はわかるのですが文全体としての伝えたいことやサマリがパッと読みながら作れないので、英語のドキュメントを読むのが苦手で日本語のドキュメントに逃げがちです。&lt;/p&gt;
&lt;p&gt;2018年はこいつを倒せるように、どれだけ時間かかっても良いので英語のドキュメントと向き合っていきたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;・収益性アップ。目指せ月10万円。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;現状収入の口が少ないので、収入の口を二つ以上にしていきたいです。それの第一の矢としてこれと並行してサイトを作成したいのですが、そこで月10万円でもいいので収益を出していきたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;やらないこと&lt;/h3&gt;
&lt;strong&gt;・興味・関心のままに多くに手を出さない。&lt;/strong&gt;
&lt;p&gt;これは日常の雑多なことに気を取られずに&lt;strong&gt;やるべきこと・重要なことに集中しよう&lt;/strong&gt;という戒めですね。やりたいと思ったらすぐにはじめず一旦、時間を設けてそのアイデアを練る時間を作る。他のタスクと比較して重要だと思ったら、何かを捨ててそのプロジェクトを始めるというプロセスをしっかり回していきたいです。&lt;/p&gt;
&lt;p&gt;やろうとするとタスクは無限に増えていくので、どんどん雑多なことに時間を奪われてしまいがちです。これを意識して取捨選択して、リソースを効率よく使えるようになりたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;・部屋を散らかったままにしない。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;やりたい作業があるとついつい周りの環境を整えずにやり始めてしまう癖があるのですが、部屋が散らかっていると集中力が保てません。仕事部屋の整頓もしていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;・働きすぎない、定期的に何もしない日を作る。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;やるべきことをやらないといけないというのはありますが、年中無休でずっと働き続けるためにフリーランスになった訳ではないので、意識的に栄養補給の時間を設けます。意識的に仕事と関係ないことをするかあるいは何もしない時間を作る。これはどんなに忙しくてもやっていきたいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
全然関係ないですが、大晦日のAbemaTVの朝青龍の企画は、10年ほど前の大晦日のK-1のワクワク感を感じました（後半3人だけ）。
&lt;p&gt;インターネットでこれだけ面白いコンテンツが見れるようになってきてるので、本当すごいなと思いました。テレビのコンテンツ自体が飽和気味（客観的に飽和しているかは知りません、個人的に面白いテレビが減ってきたなという意味です。）Abemaさんにはこのような面白い企画をどんどんやって行って欲しいなと思っています。&lt;/p&gt;
&lt;p&gt;大晦日になんとなく見てみた番組で時代の変化が見れて嬉しかったです。今年は仮想通貨もありますし、こういった変化にもアンテナ張りながら、満足した一年が過ごせればなと思っています。&lt;/p&gt;
&lt;p&gt;今年もよろしくお願いいたします。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/01/20180101_action-report-1225/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Udemyでクーポンを利用して、気になるコースをお得に利用する方法]]></title><description><![CDATA[今回はUdemyで気になるコースをお得に利用する方法を紹介します。 その方法とは講師の発行するクーポンやクーポンコードを利用して通常の価格よりもお得に講座を受講できる方法です。   今回は、講師から発行されたクーポンの見つけ方のみの紹介ですが、 それは 講師のFacebook…]]></description><link>https://ver-1-0.net/blog/2018/01/01/udemy-coupon</link><guid isPermaLink="false">https://ver-1-0.net/blog/2018/01/01/udemy-coupon</guid><pubDate>Mon, 01 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回はUdemyで気になるコースをお得に利用する方法を紹介します。&lt;/p&gt;
&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+691UP&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;
&lt;img src=&quot;https://www21.a8.net/svt/bgt?aid=171109178694&amp;amp;wid=004&amp;amp;eno=01&amp;amp;mid=s00000016735001050000&amp;amp;mc=1&quot; alt=&quot;&quot; width=&quot;244&quot; height=&quot;150&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;img src=&quot;https://www18.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+691UP&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;
&lt;p&gt;その方法とは講師の発行するクーポンやクーポンコードを利用して通常の価格よりも&lt;strong&gt;お得に講座を受講できる&lt;/strong&gt;方法です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;クーポンの見つけ方&lt;/h2&gt;
クーポンは講師の方から発行されたり、Udemyから発行されたりするそうです。
（Udemyのリンクは踏むリンクによってコースの値段が違うことがたまにありますがそれもクーポンの一種かもしれません）
&lt;p&gt;今回は、講師から発行されたクーポンの見つけ方のみの紹介ですが、&lt;/p&gt;
&lt;p&gt;それは&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;講師のFacebookやTwitterのアカウントをさがしてクーポンの告知を行なっていないか確認する&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;という方法です。&lt;/p&gt;
&lt;p&gt;実際に、フルスタックエンジニアの講座を提供しているUdemy講師の井上博樹さんはご自身のFacebookのページで自身の講座をUdemyの最低価格で受講できるURLを公開しています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.facebook.com/hiroki.inoue.102&quot;&gt;&lt;a href=&quot;https://www.facebook.com/hiroki.inoue.102&quot;&gt;https://www.facebook.com/hiroki.inoue.102&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;iframe style=&quot;border: none; overflow: hidden;&quot; src=&quot;https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fhiroki.inoue.102%2Fvideos%2F1504644916282363%2F&amp;amp;show_text=1&amp;amp;width=560&quot; width=&quot;560&quot; height=&quot;489&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowfullscreen=&quot;allowfullscreen&quot;&gt;&lt;/iframe&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Udemyのクーポンって？&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;クーポンとはご存知の通り、割引された商品を購入するためのチケットですが、Udemyのクーポンとは、&lt;strong&gt;URLで提供される&lt;/strong&gt;場合と&lt;strong&gt;クーポンコードというパスワードのようなランダムな文字列&lt;/strong&gt;として発行されるようです。&lt;/p&gt;
&lt;p&gt;URLで提供される場合は、その提供されたURLをクリックして他の講座と同じようにコースを購入すれば良いです。&lt;/p&gt;
&lt;p&gt;逆にクーポンコードの場合は、&lt;/p&gt;
&lt;img class=&quot;post-image half-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2018/01/20180101_udemy-coupon/coupon-code.png&quot; alt=&quot;coupon-code.png&quot;&gt;
&lt;p&gt;このようにコースの購入の下に「クーポンをお持ちですか？」という表示があるのでそこをクリックして入力という手続きになるようです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;なんでクーポンを発行するの？？&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;このようにお得にコースを受講できるUdemyのクーポンですが、なぜ講師の方々はクーポンを発行するのでしょうか？&lt;/p&gt;
&lt;p&gt;理由としては、&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;コースにまだ受講者が少ない段階でのユーザ獲得のため&lt;/li&gt;
 	&lt;li&gt;クーポン経由の購入の場合講師の報酬が大きくなるため&lt;/li&gt;
&lt;/ol&gt;
です。
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;コースにまだ受講者が少ない段階でのユーザ獲得のため&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;コース開始当初はあたりまですが、&lt;strong&gt;受講者が少なくユーザの反応もわかりづらいため割引をしてでもコースを受講してもらい感想を聞きたい&lt;/strong&gt;というのがあるようです。&lt;/p&gt;
&lt;p&gt;そのため講師は最初にコースを作った段階でクーポンを発行することが多いので、自分の勉強したいテーマを多く開講している講師のFacebookやTwitterをフォローして置くと新しい講座が割引して受講できるチャンスも上がるかもしれません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;クーポン経由の購入の場合講師の報酬が大きくなるため&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;講師が開講したコースが購入されるとそのうち何%かが手数料でUdemyの報酬になる、残りが講師の報酬となりますが、クーポン経由での購入の場合にはこの割合が変わります。&lt;/p&gt;
&lt;p&gt;通常での購入が売り上げの33%が講師の報酬になるのに対して、&lt;strong&gt;クーポンでの購入の場合は、97%が講師の報酬&lt;/strong&gt;になるそうです。&lt;/p&gt;
&lt;p&gt;クーポンは割引になるので元の値段があまり高くないというのもあると思いますが、このような事情から講師も積極的にクーポンを発行しているようです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;気になるコースを見てみる&lt;/h2&gt;
これまであまり自分が受講した講座の講師の方や、気になる講座の講師を気にしていないのでしたらぜひチェックして見ることをオススメします。
&lt;p&gt;気になる講師のFacebookページなどを訪れてみると、意外とクーポンでお得に受講できるかもしれません。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+5YRHE&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;世界最大級のオンライン学習サイトUdemy&lt;/a&gt;
&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www10.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+5YRHE&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;コースを受けてみた感想はこちらにのっけているので、興味があればどうぞ
&lt;a href=&quot;https://ver-1-0.net/2017/11/12/e-learning-udemy/&quot;&gt;=&gt; Udemy でデザインのコースを受けてみた感想。Udemyで勉強するメリットまとめ&lt;/a&gt;
&lt;img src=&quot;https://www17.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+5YRHE&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2018/01/20180101_udemy-coupon/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[SMACSSでデモサイトのコード書いてみた]]></title><description><![CDATA[前回の記事では、SMACSSの電子書籍をまとめてみました。
CSSスタイルガイドのSMACSSを勉強してみたまとめ 今回は、書籍を読むだけでは理解が深まらないので実際にSMACSS…]]></description><link>https://ver-1-0.net/blog/2017/12/16/write-with-smacss</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/12/16/write-with-smacss</guid><pubDate>Sat, 16 Dec 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;前回の記事では、SMACSSの電子書籍をまとめてみました。
&lt;a href=&quot;https://ver-1-0.net/2017/12/10/learn-smacss/&quot;&gt;CSSスタイルガイドのSMACSSを勉強してみたまとめ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回は、書籍を読むだけでは理解が深まらないので実際にSMACSSを意識しながらコーディングしてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;ランディングページを作ってみる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回は、題材としてランディングページのコーディングをしてみました。&lt;/p&gt;
&lt;p&gt;ランディングページとは、LPと呼ばれたりもするので、広告や検索から訪れるユーザが最初にみるページのことです。&lt;/p&gt;
&lt;p&gt;人間関係でも第一印象が大事と言われるように、商品とユーザが初めて出会う場所ですのでサイトのユーザに与える印象の大事な部分を担っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回はSMACSSを意識しながら書いてみて、悩んだところや、よかったところ、SMACCSでは表現しにくいところを知るための題材ですので、それほどユーザに与える印象とかビジネスライクな部分はあまり意識していないです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;というか、私普段からバリバリcss書いていててcssでは誰にも負けません!!&lt;/p&gt;
&lt;p&gt;という感じではないので私のコードはあくまでも私のコードで、これを参考にすれば大丈夫!!みたいな絶対的なものでなく、コーディングしてみましたーというようなのものなのでご了承ください。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;その点踏まえて、仕上げたページはこちらになります。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/12/20171216_write-with-smacss/smaccs-1024x517.png&quot; alt=&quot;smaccs-1024x517.png&quot;&gt;
&lt;p&gt;おぉ・・・&lt;/p&gt;
&lt;p&gt;まぁありがちですね。
サイトは自分が開発してみたいなぁと思っている個人のタスク管理ツールをイメージして作りました。&lt;/p&gt;
&lt;p&gt;レイアウトはシングルカラムレイアウトのよく見るランディングページという感じですね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ログインボタンやサインアップのボタンを押すとフォームが表示されたりするようにはしていますが、完全なるデモページなので、それ以上は進めません。&lt;/p&gt;
&lt;p&gt;ご了承ください。&lt;/p&gt;
&lt;p&gt;デモページのリンクはこちらです。
GitHubPagesで後悔しているので実際のデモがご覧いただけます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://version-1.github.io/smacss-sample/example/default/&quot;&gt;&lt;a href=&quot;https://version-1.github.io/smacss-sample/example/default/&quot;&gt;https://version-1.github.io/smacss-sample/example/default/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ソースはgithubにあげておきました。
&lt;a href=&quot;https://github.com/version-1/smacss-sample&quot;&gt;&lt;a href=&quot;https://github.com/version-1/smacss-sample&quot;&gt;https://github.com/version-1/smacss-sample&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;SMACSSしてみて気づいたこと&lt;/h2&gt;
&amp;nbsp;
&lt;ul&gt;
 	&lt;li&gt;境界線の引き方が難しい&lt;/li&gt;
 	&lt;li&gt;moduleのソースが大きくなりがち&lt;/li&gt;
 	&lt;li&gt;jsをどれくらい使うかでコードが変わりそう&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;
&lt;h3 class=&quot;section&quot;&gt;境界線の引き方が難しい&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;これは単に慣れ次第でもう少し切り分けができるようになるかなとも思うのですが、他のcssの設計手法と同じように線引きが難しいと感じました。&lt;/p&gt;
&lt;p&gt;何がレイアウトで何がモジュールなのかというのはやはりコーディングをしていて悩みました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;カルーセルやアコーディオンなど明らかにわかりやすいのは良いのですが、ヘッダーやフッターはどこまでレイアウトのカテゴリで書くべきなのかというのは悩みました。&lt;/p&gt;
&lt;p&gt;SMACSSを提唱している原本でもそこまで明確に線引きをしている訳ではないので、あくまでもセマンティック性の維持と保守性という目的から考えたベストエフォートを取っていくしかないのではないでしょうか。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;結果的にはレイアウトは最低限の大枠に留めて、ヘッダーやフッターの中のスタイルのほとんどは、モジュールで定義しました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;モジュールのソースが大きなくなりがち&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;LPをコーディングした結果以下のような構成になりました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/12/20171216_write-with-smacss/dir-structure-665x1024.png&quot; alt=&quot;dir-structure-665x1024.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;みてわかるようにSMACSSのカテゴリでシンプルに分類しています。
モジュールが全体の80%くらいになりそうですね。。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;もう少し大きいシステムになると管理画面とユーザの画面でスタイルを分けたりする必要があるので、管理者、ユーザ、共通、のような形で分けて各セクションごとにベース、レイアウト、モジュール・・・のように分けてしまう方法もありかもしれません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回に関してはLPのみのコーディングでしたので、入れ子にせずフラットに分割しました。&lt;/p&gt;
&lt;p&gt;スクショみてもわかるようにレイアウトは大まかなところ、モジュールは細かいところというような形で分担してしまったので、モジュールのコードが占める割合が大きくなっています。&lt;/p&gt;
&lt;p&gt;大きくなること自体が悪いわけではないのですが、大きい分その中に冗長なコードが含まれているのではという懸念もあるので、ちょと不安になりました。&lt;/p&gt;
&lt;p&gt;コードを書いていると&lt;/p&gt;
&lt;p&gt;「これ、ステートじゃないよな」&lt;/p&gt;
&lt;p&gt;「レイアウトでもないしな」&lt;/p&gt;
&lt;p&gt;「じゃあモジュールか」&lt;/p&gt;
&lt;p&gt;という感じで多くのコードがモジュールに流れつきましたね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まぁここは割合の問題というよりは、あくまでもセマンティックで重複のないコードを目指す上での問題なのでそれらを鑑みて
「どうすれば一見で理解できて、整理されたコードになるのか」
というのを考えながらリファクタして答えを見つけていいかないといけません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;jsをどれくらい使うかでコードが変わりそう&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;今回一応JQueryも使っているのですが、本格的にJQueryでクラスを当てたり外したりということはせず、いくつかのアニメーションを極力cssで実現できるようにしました。&lt;/p&gt;
&lt;p&gt;modalに関しては、modal-cssを使ったので、jsをほとんど自分で書くことはなく、カルーセルでもslick.jsでslickの関数呼び出し、アコーディオンでのクラスの割り当てに簡単にjs使うくらいでした。&lt;/p&gt;
&lt;p&gt;JQueryをもっとバリバリ書いていくとよりステートコードが増えていきそうです。&lt;/p&gt;
&lt;p&gt;ランディングページだけなのであまりJS書かなくて済んでいますが、もう少しページが増えて大規模になってくるとJQueryも必要になってきそうなので、実際の現場ではもう少し、ステートのコードの割合は増えそうな気がしています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;工夫したこと&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;簡単に今回自分なりに工夫したことを書くと以下になります。&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;テーマの層が有効に使えるようにした。&lt;/li&gt;
 	&lt;li&gt;アコーディオンやボーダーのアニメーションなどが極力HTMLに依存しないようにした。&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;
&lt;h3 class=&quot;section&quot;&gt;テーマの層が有効に使えるようにした&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;SMACSSの原本によるとテーマの層はプロジェクトによって存在しない場合があるそうですが、テーマはサイトの見た目の変更をユーザに委ねる場合などで使われるようです。&lt;/p&gt;
&lt;p&gt;ようは、見た目の変更をユーザの好みに合わせてできるようにしますよということです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回上のディレクトリ構造の写真によると_variable.scssというファイルと、theme/_default.scssというファイルがあります。&lt;/p&gt;
&lt;p&gt;これが何をやっているかというと、
_variable.scssでサイトで使う色やフォント、フォントのサイズなどを変数を使って定義しています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;さらに今回は、_variable.scssでは主に、ユーザがいじれないような変数を定義して、theme下のファイルで代表的な色をユーザの好みに合わせて色を変更できるようにしました。&lt;/p&gt;
&lt;p&gt;スクショだと、theme下に4つのファイルがありますが、それぞれサイトの色を変更できるテーマファイルになっていて読み込むファイルを変更することで、サイト内で使われる色を変更できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;下記の例では、default.scssを読み込んでいます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;@import &apos;theme/default&apos;;
// @import &apos;theme/theme1&apos;;
// @import &apos;theme/theme2&apos;;
// @import &apos;theme/theme3&apos;;



/* bg-color{{{ */
$primary-bg-color: map-get($color-map,site-base-white-color);
$secondary-bg-color: map-get($color-map,site-quaternary-color);
・
・
&amp;lt; 略 &gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;それぞれの例は、下記URLで確認できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://version-1.github.io/smacss-sample/example/default/&quot;&gt;default&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://version-1.github.io/smacss-sample/example/theme1/&quot;&gt;theme1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://version-1.github.io/smacss-sample/example/theme2/&quot;&gt;theme2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://version-1.github.io/smacss-sample/example/theme3/&quot;&gt;theme3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;モジュールのアニメーションがHTMLに依存しないようにした&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;アコーディオンを今回自前で実装しました。がアコーディオンのアニメーションをこのページ二箇所で使えるように実装しました。&lt;/p&gt;
&lt;p&gt;一つはFAQのコーナーで、一つは画面幅が狭い時のメニューです。&lt;/p&gt;
&lt;p&gt;どちらも、隠れていたオブジェクトが表示される際にアコーディオンが開くのをイメージした形で実装されています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、hover（マウスオーバー）した際に発火する下線のアニメーションもhtmlにクラスを追加するだけで、アニメーションが実現できるようにしました。&lt;/p&gt;
&lt;p&gt;これらに関してどのアニメーションも要素タグを使っていないので、HTMLと疎結合な形でCSSを実装することができました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまで色々とまとめましたが、正直まだSMACSSはわからないです。。&lt;/p&gt;
&lt;p&gt;SMACSSは意識しつつもOOCSSも意識して構造と見た目は分離した方がいいのか
やこれは本当にモジュールとして定義していいのか&lt;/p&gt;
&lt;p&gt;などなど疑問はつきません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まぁどのスタイルガイドを採用するにせよ、セマンティックで変更に強い重複のない設計が求められるとは思うのですが、これは最初に実装してみた後に徐々に変更を加えてみると&lt;/p&gt;
&lt;p&gt;「このコード変更するときにやたらコード書くな」&lt;/p&gt;
&lt;p&gt;みたいな違和感を感じてコードのよくない部分に気づける気がしています。&lt;/p&gt;
&lt;p&gt;実装完了した時は完璧に実装できているように見えるけど、実際に拡張してみたりのちの変更に対応してみるといかに最初の設計の弱い部分が見えてくるのでしょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回紹介したコードも暫定的なものなので、これらを差し引いてみて頂けると嬉しいです。
今回は設計の話がメインでしたが、SMACSSで書いてみるに当たって新たに学んだコンポーネントのつくり方なども紹介して行ければと思います!!&lt;/p&gt;
&lt;p&gt;では&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/12/20171216_write-with-smacss/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CSSスタイルガイドのSMACSSを勉強してみたまとめ]]></title><description><![CDATA[SMACSSって知ってますか？ css初心者レベルからぬけだしたいのであれは知っておいていた方がいいcss設計に関する知識です。 私もこないだまでは名前しか知らない程度だったの他人のことを言える立場ではないのですが、これを勉強すればcss…]]></description><link>https://ver-1-0.net/blog/2017/12/10/learn-smacss</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/12/10/learn-smacss</guid><pubDate>Sun, 10 Dec 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SMACSSって知ってますか？&lt;/p&gt;
&lt;p&gt;css初心者レベルからぬけだしたいのであれは知っておいていた方がいいcss設計に関する知識です。&lt;/p&gt;
&lt;p&gt;私もこないだまでは名前しか知らない程度だったの他人のことを言える立場ではないのですが、これを勉強すればcssをさらに深くしれるなと思い勉強してみました。&lt;/p&gt;
&lt;h2 id=&quot;参考にしたサイト&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E3%82%B5%E3%82%A4%E3%83%88&quot; aria-label=&quot;参考にしたサイト permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;参考にしたサイト&lt;/h2&gt;
&lt;p&gt;今回は公式サイトのドキュメントをダウンロードして読み込みました。&lt;/p&gt;
&lt;p&gt;130ページ程度の電子書籍で(無料です)短いのでぜひ読んでみることをオススメします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://smacss.com/ja&quot;&gt;https://smacss.com/ja&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本の流れとしては、最初にそれぞれのレイヤーのルールを紹介した後に、テンプレートエンジンやSASSなどのプリプロセッサ、パフォーマンスなどSMACSSに関連したトピックについて記載されています。&lt;/p&gt;
&lt;p&gt;本自体は元々英語で書かれているもののようなのですが、訳が若干読みづらいかもしれません。
何はともあれ、しっかりと理解したい方は一度読んでみてみると良いと思います。&lt;/p&gt;
&lt;h2 id=&quot;SMACSSの概要&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#SMACSS%E3%81%AE%E6%A6%82%E8%A6%81&quot; aria-label=&quot;SMACSSの概要 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SMACSSの概要&lt;/h2&gt;
&lt;p&gt;SMACSSは、CSS設計の際に用いるアーキテクチャのルールやパターンの事です。
規約がものすごい厳密という訳でもなさそうですのでスタイルガイドと言ってしまって良いと思います。&lt;/p&gt;
&lt;p&gt;CSS設計に関するアーキテクチャとしては他にも OOCSS, BEM などがありSMACSSもその一つになります。&lt;/p&gt;
&lt;p&gt;このアーキテクチャの目指すところは&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;よりセマンティックで、拡張性が高く変更に強い CSSです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;この場合の変更に強いとは&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTMLへの依存性が低く、HTMLの変更がCSSに影響を与えない&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ようなことを言います。&lt;/p&gt;
&lt;p&gt;セマンティックであるとは、&lt;strong&gt;見た目や振る舞いではなく、目的や意図がわかるということ&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;それを実現する方法がSMACSSとして提唱されているのですが、基本的な思想として&lt;/p&gt;
&lt;p&gt;CSSの役割を&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ベース&lt;/li&gt;
&lt;li&gt;レイアウト&lt;/li&gt;
&lt;li&gt;モジュール&lt;/li&gt;
&lt;li&gt;ステート(状態)&lt;/li&gt;
&lt;li&gt;テーマ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;の5つのカテゴリに分けて管理します。&lt;/p&gt;
&lt;p&gt;名前でなんとなく想像はつくと思いますが、
簡単に説明すると&lt;/p&gt;
&lt;h4&gt;ベース&lt;/h4&gt;
&lt;p&gt;bodyタグやhtmlタグなどデフォルトでのスタイル定義。サイトの背景食や文字サイズ、フォントスタイルなども含みます。&lt;/p&gt;
&lt;h4&gt;レイアウト&lt;/h4&gt;
&lt;p&gt;名前の通りレイアウトを定義する層です。ただし、ボタンや吹き出し、カルーセルなどの部品はここでは定義しません。&lt;/p&gt;
&lt;h4&gt;モジュール&lt;/h4&gt;
&lt;p&gt;ボタン、カルーセル、アコーディオンなどアプリケーションの中の部品を定義します。&lt;/p&gt;
&lt;h4&gt;ステート&lt;/h4&gt;
&lt;p&gt;モジュールやレイアウトの状態を定義しています。表示・非表示やアコーディオンが畳んだ状態か開いた状態かなどの部分です。&lt;/p&gt;
&lt;h4&gt;テーマ&lt;/h4&gt;
&lt;p&gt;これは常に必須のレイヤーではないそうなのですが、デザインの表層の部分が定義されます。サイト全体の色やフォントをデフォルトのものと切り替えるというような用途に使われるようです。&lt;/p&gt;
&lt;p&gt;となります。&lt;/p&gt;
&lt;p&gt;これらのカテゴリは、 CSSを書く際にどこのカテゴリのコードを書くか意識する事で、複雑な絡み合ったコードを避けるためにあります。カテゴリをはっきりと分けることで、コードを共通化させシンプルでメンテナンスしやすいコードが実現できます。
本では、それぞれのルールに対して細かな解説があるのでまとめてみました。&lt;/p&gt;
&lt;h2 id=&quot;ベース&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%99%E3%83%BC%E3%82%B9&quot; aria-label=&quot;ベース permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ベース&lt;/h2&gt;
&lt;h4&gt;スタイル例:&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;body, form&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #039&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;a:hover&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #03F&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;対象:&lt;/h4&gt;
&lt;p&gt;bodyタグ、htmlタグ、aタグ、h1タグ..&lt;/p&gt;
&lt;h4&gt;命名規則:&lt;/h4&gt;
&lt;p&gt;要素セレクタでのスタイル&lt;/p&gt;
&lt;h4&gt;説明:&lt;/h4&gt;
&lt;p&gt;ベースのカテゴリではクラスセレクタやIDセレクタを使わず、要素セレクタでそれぞれの要素のデフォルトの状態を定義します。
ベーススタイルには見出しのサイズ、デフォルトリンクスタイル、デフォルトフォントスタイルそしてbodyの背景が含まれます。&lt;/p&gt;
&lt;p&gt;要は、bodyタグ、aタグ、h1タグ、h2タグなどのデフォルトのスタイルを定義する部分になります。他のカテゴリでは、html構造への依存を避けるため極力要素セレクタ（ h2指定で直接スタイル）でスタイルを定義したりしないのですが、ベースは例外です。&lt;/p&gt;
&lt;p&gt;それぞれの要素のデフォルトのスタイルを定義する必要があるので要素セレクタにスタイルを指定します。&lt;/p&gt;
&lt;p&gt;リセットCSSやnormalize CSSはこの層になりますが、本ではリセットCSSは積極的に使用しましょうと言う感じではありませんでした。
リセットCSSは一度デフォルトのスタイルを解除して、再度スタイルを定義し直すことになるので読み込むコードが増えますと言うところが懸念点としてあるようです。&lt;/p&gt;
&lt;h2 id=&quot;レイアウト&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88&quot; aria-label=&quot;レイアウト permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;レイアウト&lt;/h2&gt;
&lt;h4&gt;スタイル例:&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;#header, #article, #footer&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 960px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;#article&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; solid #CCC&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;border-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px 0 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;対象:&lt;/h4&gt;
&lt;p&gt;ヘッダー、フッター、サイドバーなどページを分割する要素&lt;/p&gt;
&lt;h4&gt;命名規則:&lt;/h4&gt;
&lt;p&gt;原則IDセレクタ一つでスタイル、クラスセレクタの場合はl-やlayout-のようなprefix（接頭辞）をつける。&lt;/p&gt;
&lt;h4&gt;説明:&lt;/h4&gt;
&lt;p&gt;名前の通りレイアウトを定めるカテゴリで、一ページをどのようなセクションに分割するかという部分について定義されます。&lt;/p&gt;
&lt;p&gt;ヘッダーやフッターなどの主要なレイアウトはIDタグで定義されることが多いが、それはページ内で本当に繰り返し使用されないことを確認した上でそうすべきで、繰り返される場合はクラスセレクタでスタイルが良いとされています。&lt;/p&gt;
&lt;p&gt;これについては、伝統的にそうされてきたかのような記述があるのですがイマイチIDセレクタで指定する必要性があまりわからないですね。。何か深い理由があるのでしょうか。主要なレイアウトとして目立たせる為にIDセレクタとしてスタイルすると言うのはまあわかる気もしますが。&lt;/p&gt;
&lt;p&gt;また、基本的にはレイアウトは一つのセレクタで定義されますが、ユーザの権限ごとにレイアウトを変えたいなどの場合もあるのでそう言う場合は下のような複数セレクタでスタイルすることあります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.l-admin #header&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;hoge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; foo &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;命名規則として他のカテゴリと区別する為に、クラスセレクタで指定する場合は先頭にl-やlayout-のようにレイアウトのスタイルであることをわかりやすくする規則があります。&lt;/p&gt;
&lt;h2 id=&quot;モジュール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&quot; aria-label=&quot;モジュール permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;モジュール&lt;/h2&gt;
&lt;h4&gt;スタイル例:&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.carousel  &gt; h2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 5px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.carousel  span&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 5px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;対象:&lt;/h4&gt;
&lt;p&gt;カルーセル、アコーディオンなどなど&lt;/p&gt;
&lt;h4&gt;命名規則:&lt;/h4&gt;
&lt;p&gt;IDや要素セレクタを避け、クラスセレクタのみを利用。モジュール内の要素は子・子孫セレクタで指定。&lt;/p&gt;
&lt;h4&gt;説明:&lt;/h4&gt;
&lt;p&gt;モジュールはカルセール、アコーディオンなどのスタイルを行うカテゴリです。&lt;/p&gt;
&lt;p&gt;命名規則にあるように要素セレクタは極力避ける必要があります。h1,h2など見出しタグはセマンティック性が一定程度あるので、（タグをみただけで見出しなんだなと言う意図がわかる）良いですが、divやspanなど一見して意図がわかりづらいものはクラスセレクタを使ってその意図を補足してやるのが良いです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;item-list&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Scissors&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Hammer&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Ruler&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;クラスセレクタを使うとスタイルの意図がわかりやすくセマンティック性が保たれるので、クラスセレクタの利用が推奨されています。&lt;/p&gt;
&lt;p&gt;また、サブクラスのモジュールを定義する際に場所による制約をスタイルするのは避ける必要があります。&lt;/p&gt;
&lt;p&gt;これはあらかじめデフォルトのボタンをスタイルした後に、サイドバーに少しスタイルの違うボタンを設置する場合に、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.pod&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.pod input[type=text]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 50%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;#sidebar .pod input[type=text]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにサイドバー内のボタンとして指定するのではなく、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.pod&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.pod input[type=text]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 50%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.pod-constrained input[type=text]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このようにスタイルして、htmlの要素には&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;class=&quot;btn btn-constrained&quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のように指定します。&lt;/p&gt;
&lt;p&gt;sidebarのような指定の仕方でも一見問題ないように思えますが、
この後にサイドバーやそれ以外にも配置可能ななモジュールを作る場合にベースのpodのスタイルと、
サイドバー内のスタイル両方のスタイルを上書きしないといけなくなってしまいます。&lt;/p&gt;
&lt;p&gt;レイアウトなどの親要素に依存するモジュールを作成する場合は注意が必要です。
場所に依存する（サイドバーの中ののような）スタイルすることを極力されるのが良さそうです。&lt;/p&gt;
&lt;h2 id=&quot;ステート&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88&quot; aria-label=&quot;ステート permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ステート&lt;/h2&gt;
&lt;h4&gt;スタイル例:&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.is-hidden&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;対象:&lt;/h4&gt;
&lt;p&gt;モジュール等の状態の指定。表示・非表示。メニューが開いているか閉じているか。&lt;/p&gt;
&lt;h4&gt;命名規則:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;1つのクラスセレクタのみ。&lt;/li&gt;
&lt;li&gt;特定のモジュールについてのみ適用される状態であればモジュール名を含める。&lt;/li&gt;
&lt;li&gt;利用に注意しながら!importantの利用可&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ステートはモジュールの状態を示し、表示・非表示などをスタイルする。&lt;/p&gt;
&lt;p&gt;サブモジュールと役割上の類似点があり、混乱を招きがちだが、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;1. 状態スタイルはレイアウトやモジュールに割り当てることができ
2. 状態スタイルはJavaScriptに依存するという意味を持つ&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;といった違いがあります。&lt;/p&gt;
&lt;p&gt;2つめがわかりやすくサブモジュールクラスは、htmlがレンダリングされた際に描画されているもので、ステートはユーザのアクションや経過時間などに応じてクラスが付加されたり削除されたりするものです。&lt;/p&gt;
&lt;h2 id=&quot;テーマ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%86%E3%83%BC%E3%83%9E&quot; aria-label=&quot;テーマ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;テーマ&lt;/h2&gt;
&lt;h4&gt;スタイル例:&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.theme-border&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;border-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; purple&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.theme-background&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ... &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;対象:&lt;/h4&gt;
&lt;p&gt;テーマでは色やアプリケーションやサイトが持つルック&amp;#x26;フィールを定義&lt;/p&gt;
&lt;h4&gt;命名規則:&lt;/h4&gt;
&lt;p&gt;テーマの規模によりtheme-などのprefixをつける。&lt;/p&gt;
&lt;p&gt;テーマではアプリケーションが持っている他のカテゴリで定義されたデフォルトのボーダーの色などを上書きする。&lt;/p&gt;
&lt;p&gt;想定される用途としてユーザー側にいくつかのテーマを決めさせてサイトの雰囲気をユーザ好みにカスタマイズできるようにする場合などがあります。&lt;/p&gt;
&lt;h2 id=&quot;まとめ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%BE%E3%81%A8%E3%82%81&quot; aria-label=&quot;まとめ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回は、簡単なカテゴリのルールだけまとめました。電子書籍の中には他の項目についての記載もありますが、まとめるのも大変ですし読み切るのも大変なので紹介はここまでとさせて頂きます。&lt;/p&gt;
&lt;p&gt;冒頭でも書きましたが、130ページ程度の本なので自身でも読んでみると良いかと思います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;状態の変更について&lt;/li&gt;
&lt;li&gt;適応性の深度&lt;/li&gt;
&lt;li&gt;セレクタパフォーマンス&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;らへんの部分は結構参考になると思います。&lt;/p&gt;
&lt;p&gt;本は読むだけでは意味がないのでお次は、実際にSMACSSを意識しながら簡単なページをコーディングしてみたいですね。ちゃんとできたらその様子もアップしたいです。&lt;/p&gt;
&lt;p&gt;では&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/12/20171210_learn-smacss/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[疲れ目・肩こりエンジニアの三種の神器。机上ラック、アイマスク、ブルーライトカットメガネ]]></title><description><![CDATA[エンジニアって本当にずっとPCと向き合ってますよね。エンジニアにとってはPCを使いこなす必要があり、翼くんのようにPCと友達になる必要があります。   友達なんだから長いこと一緒にいないとダメですよね。そうはいっても、本当に集中して何時間もPC…]]></description><link>https://ver-1-0.net/blog/2017/12/08/engineer-three-items</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/12/08/engineer-three-items</guid><pubDate>Fri, 08 Dec 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;chapter&quot;&gt;エンジニアを悩ます疲れ目・肩こり&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;エンジニアって本当にずっとPCと向き合ってますよね。エンジニアにとってはPCを使いこなす必要があり、翼くんのようにPCと友達になる必要があります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;友達なんだから長いこと一緒にいないとダメですよね。そうはいっても、本当に集中して何時間もPC画面に向かいっぱなしだと本当に目が疲れて肩もこりますよね。私もちょっと忙しくなって残業したり、家でもプログラミングしたりしている途端に画面が目にしみるようになってきます。&lt;/p&gt;
&lt;p&gt;エンジニアの方々でなくても、仕事では必ずPCを見るし、移動中はスマートフォンで記事を読んだり本を読んだり漫画を読んだり。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ジョブスがiPhoneを発表して以来、インターネットに接続する機会も増えましたが、液晶ディスプレイをみている時間も急激に伸びました。仕事にも私生活にも欠かせないPCやスマートフォン、あと何十年働くと考えていても目は大切にしたいですよね。&lt;/p&gt;
&lt;p&gt;今回はそんな&lt;strong&gt;デジタル社会で快適に暮らす&lt;/strong&gt;ための疲れ目対策必需品を紹介させて頂きます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;正しい姿勢で疲れ目緩和 | 机上ラック&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;最初に紹介するのが&lt;strong&gt;机上ラック&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これがあると正しい姿勢が身につきますし、ラックの下にちょっとした物を置けるので机が綺麗になります。私も最近これを購入して自宅の机に導入したのですが、ラックの下にちょっとした小物を置けたりして机が綺麗になって本当に導入してみてよかったです。&lt;/p&gt;
&lt;p&gt;机上ラックの一番のメリットは&lt;strong&gt;ディスプレイの位置が座って、背筋を伸ばした時にちょうど良い位置&lt;/strong&gt;にくることです。&lt;/p&gt;
&lt;p&gt;PCの位置が低いとつい屈むような姿勢になり、猫背になって姿勢が悪くなりがちです。そんな時に机上ラックがあると背筋を伸ばしたままPCにむかえます。&lt;/p&gt;
&lt;p&gt;PCに向かう姿勢として15度程度下をむくのが良いそうなのですが、ラックがあればPCの高さを保てるのでこの姿勢が取りやすいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私としては今の所下に貼った物で満足しています。タイトルに高さ調節可能と書いてありますが、基本的には高くすることができるのみで、低くしたりすることはできません。もっとちゃんと自分にあった高さにしたいというのであれば、&lt;strong&gt;モニターアーム&lt;/strong&gt;を購入された方が良いかもしれません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;cstmreba&quot;&gt;
&lt;div class=&quot;kaerebalink-box&quot;&gt;
&lt;div class=&quot;kaerebalink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B01M9I0XX6/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;img style=&quot;border: none;&quot; src=&quot;https://images-fe.ssl-images-amazon.com/images/I/515N6dQtK9L._SL160_.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;kaerebalink-info&quot;&gt;
&lt;div class=&quot;kaerebalink-name&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B01M9I0XX6/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Fitueyes 机上台 モニター台 キーボード収納 幅600mm 高さ調整可能な 透明な DT106006GC&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;kaerebalink-powered-date&quot;&gt;posted with &lt;a href=&quot;http://kaereba.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;カエレバ&lt;/a&gt;&lt;/div&gt;

&lt;div class=&quot;kaerebalink-detail&quot;&gt;Fitueyes&lt;/div&gt;
&lt;div class=&quot;kaerebalink-link1&quot;&gt;
&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/gp/search?keywords=Fitueyes%20%E6%9C%BA%E4%B8%8A%E5%8F%B0%20%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E5%8F%B0%20%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E5%8F%8E%E7%B4%8D%20%E5%B9%85600mm%20%E9%AB%98%E3%81%95%E8%AA%BF%E6%95%B4%E5%8F%AF%E8%83%BD%E3%81%AA%20%E9%80%8F%E6%98%8E%E3%81%AA%20DT106006GC&amp;amp;__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;tag=llg01-22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Amazon&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FFitueyes%2520%25E6%259C%25BA%25E4%25B8%258A%25E5%258F%25B0%2520%25E3%2583%25A2%25E3%2583%258B%25E3%2582%25BF%25E3%2583%25BC%25E5%258F%25B0%2520%25E3%2582%25AD%25E3%2583%25BC%25E3%2583%259C%25E3%2583%25BC%25E3%2583%2589%25E5%258F%258E%25E7%25B4%258D%2520%25E5%25B9%2585600mm%2520%25E9%25AB%2598%25E3%2581%2595%25E8%25AA%25BF%25E6%2595%25B4%25E5%258F%25AF%25E8%2583%25BD%25E3%2581%25AA%2520%25E9%2580%258F%25E6%2598%258E%25E3%2581%25AA%2520DT106006GC%2F-%2Ff.1-p.1-s.1-sf.0-st.A-v.2%3Fx%3D0%26scid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;楽天市場&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253Fkeyword%253DFitueyes%252520%2525E6%25259C%2525BA%2525E4%2525B8%25258A%2525E5%25258F%2525B0%252520%2525E3%252583%2525A2%2525E3%252583%25258B%2525E3%252582%2525BF%2525E3%252583%2525BC%2525E5%25258F%2525B0%252520%2525E3%252582%2525AD%2525E3%252583%2525BC%2525E3%252583%25259C%2525E3%252583%2525BC%2525E3%252583%252589%2525E5%25258F%25258E%2525E7%2525B4%25258D%252520%2525E5%2525B9%252585600mm%252520%2525E9%2525AB%252598%2525E3%252581%252595%2525E8%2525AA%2525BF%2525E6%252595%2525B4%2525E5%25258F%2525AF%2525E8%252583%2525BD%2525E3%252581%2525AA%252520%2525E9%252580%25258F%2525E6%252598%25258E%2525E3%252581%2525AA%252520DT106006GC%2526searchKeywordFlg%253D1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;7net&lt;/a&gt;&lt;img src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;


&lt;div class=&quot;cstmreba&quot;&gt;
&lt;div class=&quot;kaerebalink-box&quot;&gt;
&lt;div class=&quot;kaerebalink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B01L76YRO0/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;img style=&quot;border: none;&quot; src=&quot;https://images-fe.ssl-images-amazon.com/images/I/41G%2B4NPb91L._SL160_.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;kaerebalink-info&quot;&gt;
&lt;div class=&quot;kaerebalink-name&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B01L76YRO0/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BESTEK PC モニター アーム 液晶ディスプレイ アーム クランプ式 水平多関節 17-27インチ対応 BTSS01BK&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;kaerebalink-powered-date&quot;&gt;posted with &lt;a href=&quot;http://kaereba.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;カエレバ&lt;/a&gt;&lt;/div&gt;

&lt;div class=&quot;kaerebalink-detail&quot;&gt;BESTEK&lt;/div&gt;
&lt;div class=&quot;kaerebalink-link1&quot;&gt;
&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/gp/search?keywords=BESTEK%20PC%20%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%20%E3%82%A2%E3%83%BC%E3%83%A0&amp;amp;__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;tag=llg01-22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Amazon&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FBESTEK%2520PC%2520%25E3%2583%25A2%25E3%2583%258B%25E3%2582%25BF%25E3%2583%25BC%2520%25E3%2582%25A2%25E3%2583%25BC%25E3%2583%25A0%2F-%2Ff.1-p.1-s.1-sf.0-st.A-v.2%3Fx%3D0%26scid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;楽天市場&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253Fkeyword%253DBESTEK%252520PC%252520%2525E3%252583%2525A2%2525E3%252583%25258B%2525E3%252582%2525BF%2525E3%252583%2525BC%252520%2525E3%252582%2525A2%2525E3%252583%2525BC%2525E3%252583%2525A0%2526searchKeywordFlg%253D1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;7net&lt;/a&gt;&lt;img src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;


&lt;h2 class=&quot;chapter&quot;&gt;疲れ目対策定番 | ブルーライトカットメガネ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;お次は、&lt;strong&gt;ブルーライトカットメガネ&lt;/strong&gt;です。ブルーライトカットのメガネはエンジニア業というか社会人になってからずっと使っています。寝ているからブルーライトを浴びてるかというような生活をしているので、これは今や私の生活必需品となっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;PC作業を行なっていると当たり前ですが、目を酷使します。ただ、PCを使わないという選択をすることもできないので、少しでも目の負担を和らげられるように、PCを使うときは常にこのメガネを使用するようにしています。&lt;/p&gt;
&lt;p&gt;普通のメガネを使っている、視力は悪くないのでメガネはしていないという方はぜひ目を大切にしてブルーライトカットメガネを使って欲しいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ブルーライトカットメガネの有名どころですと&lt;strong&gt;JINsPC&lt;/strong&gt;が有名でしたが、今は新たにデザインされた&lt;strong&gt;JINsScreen&lt;/strong&gt;というモデルがあるそうです。&lt;/p&gt;
&lt;p&gt;今更ですが、本当に便利になりましたよね。JINsにはオンラインショップがあって&lt;strong&gt;今やメガネもオンラインで購入できてしまうようです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;「度付きのメガネでも変えるの？」という疑問もあると思いますが、度付きの購入方法にはいくつか方法があり&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;過去にJINSで購入したメガネの保証書を知らせる&lt;/li&gt;
 	&lt;li&gt;使っているメガネを郵送して同じ度数で作ってもらう&lt;/li&gt;
 	&lt;li&gt;眼科やJINSの店舗で度数情報を作る&lt;/li&gt;
&lt;/ul&gt;
となるようです。
詳細は下記バナーから進んでいただけるとご覧になれるかと思います。
&lt;p&gt;お値段も5000円からあるそうで、最近本当にメガネ安くなりましたね。ちょっと前は二万円とかかかっていたような。。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「ブルーライトカットってあの色付きメガネでしょ・・・」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ときになる点はあるのかもしれませんが、JinsScreenでは&lt;strong&gt;従来のものよりより自然に肌に馴染むような色に改善&lt;/strong&gt;されており、効果そのままで見た目が気にならない工夫もされているようです。&lt;/p&gt;
&lt;p&gt;興味のある方はバナーからサイトに進んで見てみてください。&lt;/p&gt;
&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXJTR+AINRU2+1X1K+7LPE9&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;
&lt;img src=&quot;https://www25.a8.net/svt/bgt?aid=171206559636&amp;amp;wid=004&amp;amp;eno=01&amp;amp;mid=s00000008948001277000&amp;amp;mc=1&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;250&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;img src=&quot;https://www13.a8.net/0.gif?a8mat=2TXJTR+AINRU2+1X1K+7LPE9&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;5分でリラックス | ホットアイマスク&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;最後にオススメするのはホットアイマスクです。&lt;/p&gt;
&lt;div class=&quot;cstmreba&quot;&gt;
&lt;div class=&quot;kaerebalink-box&quot;&gt;
&lt;div class=&quot;kaerebalink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B001OGJVAO/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;img style=&quot;border: none;&quot; src=&quot;https://images-fe.ssl-images-amazon.com/images/I/61P6OPUtnEL._SL160_.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;kaerebalink-info&quot;&gt;
&lt;div class=&quot;kaerebalink-name&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B001OGJVAO/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;あずきのチカラ目もと用&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;kaerebalink-powered-date&quot;&gt;posted with &lt;a href=&quot;http://kaereba.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;カエレバ&lt;/a&gt;&lt;/div&gt;

&lt;div class=&quot;kaerebalink-detail&quot;&gt;桐灰化学&lt;/div&gt;
&lt;div class=&quot;kaerebalink-link1&quot;&gt;
&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/gp/search?keywords=%E3%81%82%E3%81%9A%E3%81%8D&amp;amp;__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;tag=llg01-22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Amazon&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2581%2582%25E3%2581%259A%25E3%2581%258D%2F-%2Ff.1-p.1-s.1-sf.0-st.A-v.2%3Fx%3D0%26scid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;楽天市場&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253Fkeyword%253D%2525E3%252581%252582%2525E3%252581%25259A%2525E3%252581%25258D%2526searchKeywordFlg%253D1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;7net&lt;/a&gt;&lt;img src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;


長時間PCをしていると本当に画面が目に沁みてきます。そんな時にはよくこのあずきのチカラの助けを借りています。
&lt;p&gt;&lt;strong&gt;使い方は簡単で、アイマスクごと電子レンジで40秒ほど温めて目の上に乗せて5分程度ぼーっとするだけです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;電子レンジでチンするとあずきが予想以上にあったまって、疲れた目元を心地よくあっためてくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こちらは&lt;strong&gt;繰り返し250回ほど&lt;/strong&gt;使えるそうなので、結構長持ちです。作業合間合間の時間に使って目がポカポカになると次の作業への気持ちも前向きになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ | 定期的な休憩も忘れずに&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまで、エンジニアの疲れ目・肩こり対策の三種の神器を紹介させていただきました。&lt;/p&gt;
&lt;p&gt;少しでも目の疲れや肩こりが軽減される物を紹介しましたが、なんだかんだ一番休息が大事です。あまり無理せず定期的に休憩をとり、働きすぎず長期的に活躍できるというのが一番大事なことかと思います。&lt;/p&gt;
&lt;p&gt;目標や期限のために必死に頑張ることは良いことだとは思うのですが、休息も生産性をあげるための一つのツールして使えると良いですね。適度の休憩をとりつつももっと快適に仕事したいという時に今回紹介した商品などが役に立てると嬉しいです。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/12/20171208_engineer-three-items/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[dockerコンテナのDBにホストから接続する方法]]></title><description><![CDATA[掲題のようにdockerで作成したDBコンテナのDBにホスト側のクライアントツールで接続したいという欲求が高まったので記事にしました。 vagrantなどだと完全に別OSのサーバになるので、IPアドレスを調べてそのまま接続ということができるのですが、Dockerの場合は同OS…]]></description><link>https://ver-1-0.net/blog/2017/11/29/connect-db-container</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/29/connect-db-container</guid><pubDate>Wed, 29 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;chapter&quot;&gt;PostgresのコンテナのDBの中身をみたい&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;掲題のようにdockerで作成したDBコンテナのDBにホスト側のクライアントツールで接続したいという欲求が高まったので記事にしました。&lt;/p&gt;
&lt;p&gt;vagrantなどだと完全に別OSのサーバになるので、IPアドレスを調べてそのまま接続ということができるのですが、Dockerの場合は同OS上にコンテナを作成するのでIPは変わらずにいけます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;psql &lt;span class=&quot;token parameter variable&quot;&gt;-U&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;任意のuser&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1 database&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;ホストOSでもデータベースをインストールしている場合&lt;/h2&gt;
&lt;p&gt;ホストOSでもpoostgresなどのDBサーバが起動している場合は、クライアントツールが先にホストOSのデータベースに接続してしまうので思ったことができません。&lt;/p&gt;
&lt;p&gt;その場合はサーバを停止してあげるかホスト側の5432以外のポートをコンテナの5432のポートに転送するように設定します。&lt;/p&gt;
&lt;p&gt;サーバを停止せずにコンテナに接続するポートを変更する場合は、
コマンドなら&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;外部から接続したいポート&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:80 postgres&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;docker-comopseなら&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;  db&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token symbol&quot;&gt;images&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; postgres
    &lt;span class=&quot;token symbol&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[外部から接続したいポート]:5432&quot;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;とします。&lt;/p&gt;
&lt;p&gt;あとは接続の際に先ほど指定した外部から接続する際に使うポートを指定してあげれば無事に接続できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;psql &lt;span class=&quot;token parameter variable&quot;&gt;-U&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;任意のuser&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1 &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;指定したポート&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; database&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;GUIクライアントツールでも同様にポート番号やユーザ名に注意して接続可能です。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;その他Dockerに関する記事たち&lt;/h2&gt;
&lt;p&gt;dockerに関する記事を書いているので、よろしければどうぞ。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/19/rails-nginx-postgres-on-docker-1/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その①&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;dockerの入門として、基本的な仕組みを説明し、コンテナを起動させたり、コンテナ’に接続してみたりしています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/23/rails-nginx-postgres-on-docker-2/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その②&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;rubyのイメージを使って、railsアプリケーションを構築する方法を説明しています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/29/docker-rails-nginx-postgres/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その③&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;dockerでのRails + Nginx + Postgres 環境について解説しています。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171129_connect-db-container/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Udemyの料金は高くない。勉強したいコースを購入するならセールで買うのが狙い目！！]]></title><description><![CDATA[Udemyの一コースの単価って割と高いですよね。UdemyはCtoC…]]></description><link>https://ver-1-0.net/blog/2017/11/29/udemy-sale</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/29/udemy-sale</guid><pubDate>Wed, 29 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Udemyのコースは高い？&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;Udemyの一コースの単価って割と高いですよね。UdemyはCtoCの一個人の&lt;strong&gt;講師と生徒（ユーザ）&lt;/strong&gt;をマッチングするサービスになるので、個人が自分の詳しい分野について動画を作成してアップロードすることで講師になることもできます。&lt;/p&gt;
&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+6DRLT&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;
&lt;img border=&quot;0&quot; width=&quot;300&quot; height=&quot;250&quot; alt=&quot;&quot; src=&quot;https://www22.a8.net/svt/bgt?aid=171109178694&amp;amp;wid=004&amp;amp;eno=01&amp;amp;mid=s00000016735001072000&amp;amp;mc=1&quot;&gt;&lt;/a&gt;
&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www16.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+6DRLT&quot; alt=&quot;&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;自分がプログラミングができたらプログラミングのコース、デザインができたらデザインのコースというように自分の知識を生かして商品を販売できるプラットフォームになっています。&lt;/p&gt;
&lt;p&gt;そのような仕組みになっているので、講師側で自分の商品の価格を決めることができるようで、&lt;strong&gt;2,400円~24,000円&lt;/strong&gt;の幅で価格(注1)を設定できるそうです。&lt;/p&gt;
&lt;p&gt;注1) 2017年11月28日時点の価格になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;オンラインで気軽に勉強を始めてみようというときにそのコースが1万円とか2万円とかだとどんなに勉強したくてもちょっと高くて一瞬迷ってしまいますよね。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&amp;amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2Fcompleteweb2_jp%2F%23instructor-1&quot; target=&quot;_blank&quot; rel=&quot;”nofollow” noopener&quot;&gt;【世界で30万人が受講】フルスタック・Webエンジニア講座（2017最新版）&lt;/a&gt;
&lt;img src=&quot;https://www12.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0″ width=&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&amp;amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2Fweb-design-master%2Flearn%2Fv4%2Foverview&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;未経験からプロのWebデザイナーになる！ 400レッスン以上の完全マスターコース&lt;/a&gt;
&lt;img src=&quot;https://www10.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;
これらのようにコース数の多いレッスンは比較的高く販売されることが多いそうです。
他のオンライン学習サイトなどに登録するよりは割安なのでしょうがないとするのも良いかと思いますが、できるだけ安く買いたい！！というかたも多いはずなので、そういった方はUdemy全体で開催されるセール中にまとめ買いするのがオススメです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Udemyのコースは定期的なセールで買うのが狙い目&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;現在でもブラックフライデーの割引セール中ですが、Udemyでは定期的にセールが行われており過去11月と4月にもセールが実施された実績があるようです。&lt;/p&gt;
&lt;p&gt;中でも11月中旬から下旬にかかって行われるブラックフライデーのセールでは、商品が最大&lt;strong style=&quot;font-size: 1.5rem;&quot;&gt;95%割引&lt;/strong&gt;されます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ブラックフライデー&lt;/strong&gt;とは、アメリカの文化の一つで小売業界で実施される11月第四金曜日のことです。アメリカのフィラデルフィア初の文化で&lt;strong&gt;シリコンバレー発のUdemy&lt;/strong&gt;もこれにならって毎年セールを行なっているようです。&lt;/p&gt;
&lt;p&gt;セールに買い物客が殺到する様を警官がブラックと呼んだことや小売業が黒字になることにちなんだ名前だそうですが、&lt;strong&gt;95%の割引はさすがに殺到しますよね笑。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私も定価24,000円のwebデザインのコースを1,200円で購入して勉強しています。
ほんとコスパが良いです。&lt;/p&gt;
&lt;p&gt;受けてみた感想は前回の記事にも書いたので興味があればお読みください。
&lt;a href=&quot;https://ver-1-0.net/2017/11/12/e-learning-udemy/&quot;&gt;=&gt;勉強したい人集合!!オンライン学習サービスUdemy でデザインのコースを受けてみた&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ | コースを買うのはいつが良いのか&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今年のセールは終了してしまったようですが、&lt;strong&gt;過去4月に&lt;/strong&gt;セールが実施されたりしている例もあるので気長にそこまで待って一気に買いだめするとかもありですね。ただ、今私がUdemyのサイトをみている限りでも定価から&lt;strong&gt;75%OFF&lt;/strong&gt;くらいで商品が販売されています。&lt;/p&gt;
&lt;p&gt;私個人でも探したのですが、この価格がいつまで続くのかはちょっとわかりません。気になっている方は早めに決断されるのが良いかと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以上、Udemyでコースを買うときはセールの時に買おうという記事でした。何はともあれ、Udemyは何か新しいことをはじめたい！！というときに非常に役立つツールですので、一度利用の検討をしてみるのをおすすめします。&lt;/p&gt;
&lt;p&gt;では!!&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;btn btn-large&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&amp;amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Udemyでコースを探す&lt;/a&gt;
&lt;img src=&quot;https://www14.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171129_udemy-sale/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[DockerでRails + Nginx + Postgresの環境を構築する。その③]]></title><description><![CDATA[前回二つの記事でDockerとは何？？ということや、Dockerでrailsのアプリケーションを構築する方法などを紹介してきました。今回はそのラストの記事になります。 前回までは、イメージを引っ張ってきて、コンテナ作って、起動してRails…]]></description><link>https://ver-1-0.net/blog/2017/11/29/docker-rails-nginx-postgres</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/29/docker-rails-nginx-postgres</guid><pubDate>Wed, 29 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;chapter&quot;&gt;Docker Composeを利用する&lt;/h2&gt;
&lt;ol&gt;
 	&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/19/rails-nginx-postgres-on-docker-1/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その①&lt;/a&gt;&lt;/li&gt;
 	&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/23/rails-nginx-postgres-on-docker-2/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その②&lt;/a&gt;&lt;/li&gt;
 	&lt;li&gt;DockerでRails + Nginx + Postgresの環境を構築する。その③&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;前回二つの記事でDockerとは何？？ということや、Dockerでrailsのアプリケーションを構築する方法などを紹介してきました。今回はそのラストの記事になります。&lt;/p&gt;
&lt;p&gt;前回までは、イメージを引っ張ってきて、コンテナ作って、起動してRailsアプリケーションを作ってという一コンテナの話に終始していましたが今回は違います。&lt;/p&gt;
&lt;p&gt;今回はdocler-composeを使って、各コンテナを管理するということを行なっていきます。そのゴールとしてRailsの構成としてよくある&lt;strong&gt;Rails+Nginx+Postgres&lt;/strong&gt;という構成を実現するということをやっていきます。&lt;/p&gt;
&lt;p&gt;Dockerには&lt;strong&gt;「一コンテナ一プロセス」&lt;/strong&gt;という思想があり一つのコンテナにアプリケーションもデータベースもぜーんぶ含め流のではなく、アプリケーション用のコンテナ、Webサーバ用のコンテナ、DB用のコンテナに分けてコンテナを作りそれぞれを連携させるというのが正しいあり方になっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そうなると当然Railsのアプリケーションを立ち上げた時に&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「どのコンテナを起動すればいいの？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;などの管理が大変になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;その問題を解決するのがdocker-composeでyaml形式のdocker-compose.ymlファイルにそれぞれのコンテナの関係性を記述していきます。&lt;/p&gt;
&lt;p&gt;そのため、一度docker-composeを記述してしまえば、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker-compose&lt;/span&gt; up&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のコマンドだけで必要なコンテナが起動することができます。&lt;/p&gt;
&lt;p&gt;docker-compose.ymlの紹介はここまでにして、実際にdocker-composeでrails+nginx+postgress環境を作っていきましょう。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;rails new でアプリケーション環境を構築&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まずは前回作成したrails のイメージを使ってrailsアプリケーションをローカルのディレクトリに生成します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;コマンドを実行する前に適当なGemfileをカレントにコピっといてください。Gemfileがないと当然怒られます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; rnp-sample &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; rnp-sample
&lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-pr&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;手頃なGemfile&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; ./.
&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-it&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token environment constant&quot;&gt;$PWD&lt;/span&gt;&quot;&lt;/span&gt;:/usr/src/sample version1/sample bundle &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-it&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token environment constant&quot;&gt;$PWD&lt;/span&gt;&quot;&lt;/span&gt;:/usr/src/sample version1/sample rails new &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; postgresql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで構築を始める準備完了です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;次に、コンテナを起動する際のDockerfileを用意します。&lt;/p&gt;
&lt;p&gt;Docker Fileはこんな形になります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;docker&quot;&gt;&lt;pre class=&quot;language-docker&quot;&gt;&lt;code class=&quot;language-docker&quot;&gt;&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; ruby:2.4.2&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# 必要なモジュールをインストール&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# ここでpostgresのクライアントを入れておく&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;RUN&lt;/span&gt; apt-get update -qq &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
    apt-get install -y build-essential libpq-dev nodejs postgresql-client&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ENV&lt;/span&gt; APP_DIR /rnp&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Rails App&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;RUN&lt;/span&gt; mkdir /rnp&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;WORKDIR&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$APP_DIR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ADD&lt;/span&gt; Gemfile &lt;span class=&quot;token variable&quot;&gt;$APP_DIR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ADD&lt;/span&gt; Gemfile.lock &lt;span class=&quot;token variable&quot;&gt;$APP_DIR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;RUN&lt;/span&gt; bundle install&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ADD&lt;/span&gt; . &lt;span class=&quot;token variable&quot;&gt;$APP_DIR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;RUN&lt;/span&gt; mkdir -p tmp/sockets # nginxとの通信用&lt;/span&gt;


&lt;span class=&quot;token comment&quot;&gt;# Expose volumes to frontend&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;VOLUME&lt;/span&gt; /rnp/public&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;VOLUME&lt;/span&gt; /rnp/tmp&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Start Server&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CMD&lt;/span&gt; bundle exec puma&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このファイルで行なっていることは前回の内容とかぶるところが多いので説明は省きます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ここまででアプリケーション部分の準備は完了です。
お次は、postgresです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;postgresの環境を構築&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;railsアプリのファイル群をルート直下（rnp-sample/)に置いて他のコンテナはcontainers/配下に配置するような形で配置していきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; containers/postgres
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; containers/postgres
&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;create database rnp;&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; initdb.sql
&lt;span class=&quot;token function&quot;&gt;touch&lt;/span&gt; Dockerfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;このような形でpostgres関係のファイルを配置していきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;initdb.sqlというファイルが気になるかと思うのですが、postgresイメージを使用してコンテナを作成する場合に、sqlファイルやshファイルを/docker-entrypoint-initdb.d/配下に配置しておくと、コンテナ起動時にそれらを実行してくれます。&lt;/p&gt;
&lt;p&gt;ここでは、とりあえずアプリケーションで使用するDatabaseだけ作成していますが、ユーザを作成するSQLを入れたりするのも良いかと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Dokcerファイルは次のようになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;docker&quot;&gt;&lt;pre class=&quot;language-docker&quot;&gt;&lt;code class=&quot;language-docker&quot;&gt;&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; postgres:10.1&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;COPY&lt;/span&gt; initdb.sql /docker-entrypoint-initdb.d/.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;シンプルに先ほど作成したsqlを/docker-entrypoint-initdb.d下にコピーしただけです。Dockerfileでここまでやっておけばあとはビルドしたときに勝手にSQLが発行されます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;nginxの環境を構築&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;次は、nginxの環境を構築していきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; containers/nginx
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; containers/nginx
&lt;span class=&quot;token function&quot;&gt;touch&lt;/span&gt; Dockerfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Dockerfileは&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;docker&quot;&gt;&lt;pre class=&quot;language-docker&quot;&gt;&lt;code class=&quot;language-docker&quot;&gt;&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; nginx:1.12.2&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;RUN&lt;/span&gt; rm -f /etc/nginx/conf.d/*&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ADD&lt;/span&gt; nginx.conf /etc/nginx/conf.d/[任意のアプリ名].conf&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CMD&lt;/span&gt; /usr/sbin/nginx -g &lt;span class=&quot;token string&quot;&gt;&apos;daemon off;&apos;&lt;/span&gt; -c /etc/nginx/nginx.conf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;このようになりADDするnginx.confは下記のようになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;nginx&quot;&gt;&lt;pre class=&quot;language-nginx&quot;&gt;&lt;code class=&quot;language-nginx&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# https://github.com/puma/puma/blob/master/docs/nginx.md&lt;/span&gt;
&lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;upstream&lt;/span&gt; [任意のアプリ名]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;server&lt;/span&gt; unix:///[任意のアプリ名]/tmp/sockets/puma.sock&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;server&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;listen&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;server_name&lt;/span&gt; localhost&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;keepalive_timeout&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;# static files&lt;/span&gt;
  &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;root&lt;/span&gt; /[任意のアプリ名]/public&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;location&lt;/span&gt; /&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;proxy_set_header&lt;/span&gt; X-Forwarded-For &lt;span class=&quot;token variable&quot;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;proxy_set_header&lt;/span&gt; Host &lt;span class=&quot;token variable&quot;&gt;$http_host&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;# static files&lt;/span&gt;
    &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; (-f &lt;span class=&quot;token variable&quot;&gt;$request_filename&lt;/span&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; (-f &lt;span class=&quot;token variable&quot;&gt;$request_filename.html&lt;/span&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;rewrite&lt;/span&gt; (.*) &lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt;/index.html break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; (-f &lt;span class=&quot;token variable&quot;&gt;$request_filename.html&lt;/span&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;rewrite&lt;/span&gt; (.*) &lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt;.html break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; (!-f &lt;span class=&quot;token variable&quot;&gt;$request_filename&lt;/span&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;proxy_pass&lt;/span&gt; http://[任意のアプリ名]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;location&lt;/span&gt; ~* \.(ico|css|gif|jpe?g|png|js)(\?[0-9]+)?$&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;expires&lt;/span&gt; max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token directive&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、これに関連してpumaの設定の変更も必要なので&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;config/puma.rb&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;threads_count &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fetch&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;RAILS_MAX_THREADS&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to_i
threads threads_count&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; threads_count
port        &lt;span class=&quot;token constant&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fetch&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;PORT&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3000&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
environment &lt;span class=&quot;token constant&quot;&gt;ENV&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fetch&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;RAILS_ENV&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;development&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
plugin &lt;span class=&quot;token symbol&quot;&gt;:tmp_restart&lt;/span&gt;

app_root &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;expand_path&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;../..&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; __FILE__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
bind &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;unix://&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;app_root&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/tmp/sockets/puma.sock&quot;&lt;/span&gt;&lt;/span&gt;

stdout_redirect &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;app_root&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/log/puma.stdout.log&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;app_root&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/log/puma.stderr.log&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;お次は実際にdocker-composeを書いていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;docker-composeでRails+Nginx+Postgresを管理する。&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;先にも書いたようにdocker-composeはyml形式で各コンテナ間の関係を記載していて、先に今回のdocker-composeを見せておくと以下のようになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;2&apos;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; .
    &lt;span class=&quot;token key atrule&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; .&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;/rnp
    &lt;span class=&quot;token key atrule&quot;&gt;depends_on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; db
  &lt;span class=&quot;token key atrule&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; containers/postgres
    &lt;span class=&quot;token key atrule&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; POSTGRES_PASSWORD=password
    &lt;span class=&quot;token key atrule&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; ./db/pgdata&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;/var/lib/postgresql/data
  &lt;span class=&quot;token key atrule&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; containers/nginx
    &lt;span class=&quot;token key atrule&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;80:80&quot;&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;volumes_from&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; app
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;それぞれservicesの下で各コンテナに関して定義をしており,buildという命令がどのディレクトリでビルドを行うのか指名します。
※docker-composeに関してはこちらを&lt;a href=&quot;http://docs.docker.jp/compose/toc.html&quot;&gt;compose リファレンス&lt;/a&gt;参考にすると良いと思います。&lt;/p&gt;
&lt;p&gt;今回の場合は,app = rails, db = postgres , web = nginxとなります。左辺に関しては自由に名前をつけるごとができ、わかりやすいような名前をつけることが好ましいです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;他の命令を説明するとvolumesでホストOSのディレクトリをコンテナ内のディレクトリにマウントしています。上のDockerfileではapp,dbでマウントを行なっていますが、appではホストOSのファイルの変更がコンテナに同期されるため、dbではコンテナを削除してもデータが消えないようにするために行なっています。&lt;/p&gt;
&lt;p&gt;構築の段階ではあまり気になりませんが、railsのアプリのコードがコンテナと同期されていないといちいちコンテナ内に入ってソースを変更しなくてはなりません。&lt;strong&gt;appのマウントは開発中の手間を省くため&lt;/strong&gt;に行なっています。&lt;/p&gt;
&lt;p&gt;一方dbでのマウントは&lt;strong&gt;データの永続化&lt;/strong&gt;を実現するために行なっています。これをしないとコンテナを終了した場合や自分のPCを再起動した場合docker上のデータは完全に失われてしまいます。コンテナを起動するたびに新たにデータを入れ直すというスクリプトを組むことも可能ですが、都度時間を取られてしまうので、望ましくないです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;データベースの永続化&lt;/strong&gt;は検索してみると色々な記事が出てくるので腑に落ちない場合はそれらを参考にすると良いと思います。&lt;/p&gt;
&lt;p&gt;ここまででだいたい&lt;strong&gt;Rails+Nginx+Postgres&lt;/strong&gt;の環境構築はあとビルドするだけとなってはいますが、最後にデータベースの設定だけ変更して完了となります。&lt;/p&gt;
&lt;p&gt;下記はあくまでも例ですが、お使いの環境に合わせてconfig/database.ymlを変更しましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token important&quot;&gt;&amp;amp;default&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;adapter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; postgresql
  &lt;span class=&quot;token key atrule&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; unicode
  &lt;span class=&quot;token key atrule&quot;&gt;pool&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &amp;lt;%= ENV.fetch(&quot;RAILS_MAX_THREADS&quot;) &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; %&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; db
  &lt;span class=&quot;token key atrule&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; rnp
  &lt;span class=&quot;token key atrule&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; postgres
  &lt;span class=&quot;token key atrule&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; password
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;databaseのパスワードはdocker-composeで記した環境変数の値になります。また、ここでホスト名をdbとしている所にも注意です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ここまでで一通り準備ができたのでビルドしていきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker-compose&lt;/span&gt; up&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;エラーが出力されず、問題なさそうでなければ &lt;a href=&quot;http://localhost&quot;&gt;http://localhost&lt;/a&gt; に接続してrailsのトップ画面が出力されることを確認します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ここまでで構築は完了です。追加で開発を行いたい場合は、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker-compose&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--rm&lt;/span&gt; app rails g scaffold&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;や&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker-compose&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--rm&lt;/span&gt; app rake db:migrate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とすれば
などどして開発して行けばホストOSにrailsがインストールされていなくても開発を行うことができます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;docker-comoposeは一度触っただけではなかなか理解しづらい部分がありました。今回この記事をかくにあたり自分で試行錯誤をしたらだいぶ理解が深まったように思います。データの永続化など実際開発を行うときに大事になる部分はあまり説明できなかったので、もしかしたら別記事でフォローするようなことがあるかもしれません。&lt;/p&gt;
&lt;p&gt;とりあえず今回はここまでとします。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171129_docker-rails-nginx-postgres/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[UdemyでiOSアプリからログインしたら、コースが連携されていなかった話。]]></title><description><![CDATA[UdemyではApple Storeからお持ちのスマートフォンアプリにログインして、購入したコースを受講することができます。 PC…]]></description><link>https://ver-1-0.net/blog/2017/11/28/udemy-ios-combination</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/28/udemy-ios-combination</guid><pubDate>Tue, 28 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;chapter&quot;&gt;UdemyのiOSアプリに購入したはずのコースがない!!&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;UdemyではApple Storeからお持ちのスマートフォンアプリにログインして、購入したコースを受講することができます。&lt;/p&gt;
&lt;p&gt;PCですとレッスン動画をダウンロードして視聴することはできないのですが、&lt;strong&gt;スマートフォンのアプリからなら端末に動画をダウンロードして好きな時間にレッスン動画を視聴することができます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Udemyを登録した当初ダウンロードして移動中の電車の中などでレッスンを楽しもうと思い、早速アプリをインストールしてログインしてみました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ところが！！&lt;/strong&gt;なんと購入したはずの&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+609HU&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Webデザイン&lt;/a&gt;&lt;img src=&quot;https://www13.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+609HU&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;のコースとイーサリアムブロックチェーンのコースが&lt;strong&gt;見当たりません。。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;慌てて、トラブルシューティングのお問い合わせページを参照すると考えられる原因がいくつか紹介されていました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;ログインしてもコースが表示されない場合の原因&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;考えられる原因は下記になります。&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;コースがアーカイブ済み。&lt;/li&gt;
 	&lt;li&gt;モバイル購入商品の紛失&lt;/li&gt;
 	&lt;li&gt;複数のメールアカウント&lt;/li&gt;
 	&lt;li&gt;メールアドレスのスペルミス&lt;/li&gt;
&lt;/ol&gt;
それぞれの原因について具体的に説明していきます。
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;コースがアーカイブ済み&lt;/h3&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171128_udemy-ios-combination/Screen-Shot-2017-11-28-at-15.25.58-1024x268.png&quot; alt=&quot;Screen-Shot-2017-11-28-at-15.25.58-1024x268.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうやらUdemyではコースをアーカイブすることができるようです。&lt;/p&gt;
&lt;p&gt;誤って設定してしまった心当たりのある方は、Udemyにログインしたのち&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[マイコース]→[アーカイブ]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;からアーカイブを解除できるそうですので、解除してみてください。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;モバイル購入商品の紛失&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;Udemyのトラブルシューティングをみてもこのように書いてあるようですので、下記のメールアドレスに連絡をとってコースをアカウントに登録してもらいましょう。
スマホのアプリから購入を行うとアカウントに&lt;strong&gt;購入履歴が反映されない場合がある&lt;/strong&gt;ようです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;blockquote&gt;モバイルでコースを購入した場合、コースがアカウントに登録されていない可能性があります。購入の領収書をsupport@udemy.comにEメールで送信してください。&lt;/blockquote&gt;
&amp;nbsp;
&lt;h3 class=&quot;section&quot;&gt;複数のメールアカウントを作成してしまっている&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;複数のメールアカウントを持っている場合、あなたが思っているメールアドレスとは別のメールアドレスでアカウントを作成しているのかもしれません。&lt;/p&gt;
&lt;p&gt;思い当たるメールアドレスでログインできるか試してみましょう。&lt;/p&gt;
&lt;p&gt;UdemyはFacebookやGoogleアカウントでログインできるので最初にアカウントを作成するときにそれらのアカウントで登録したか思い出してみるの良いと思います。&lt;/p&gt;
&lt;p&gt;また、複数のメールアカウントを作ってしまってもメールアカウントを統合する手続きもできるそうです。2個以上アカウントを作ってしまった場合サポートに連絡することで購入履歴や各コースの進捗状況を統合先のアカウントに引き継ぐことができるそうです。&lt;/p&gt;
&lt;p&gt;詳しくはこちらを参照ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://support.udemy.com/hc/ja/articles/236097968-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E7%B5%B1%E5%90%88&quot;&gt;アカウントを統合&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;メールアドレスのスペルミス&lt;/h3&gt;
&lt;strong&gt;私の場合こちらのパターンでした。&lt;/strong&gt;そそっかしくて自分がいやになります泣。どうやらUdemyではメールアドレスが正しくない場合でもアカウントの作成ができてしまうようです。
&lt;p&gt;私のデスクトップで作ったアカウントのメールアドレスが間違えて入力されており、正しくアドレスの入力されたiOSアプリのアカウント上手く連携できなかったようです。（違うメールアドレスが入力されているんだから当然ですよね汗）&lt;/p&gt;
&lt;p&gt;今は、スペルミスしたアドレスでログインして使っています。サポートとやりとりしてアカウント統合したりやりようはありそうですが、特に困らないのでそのまま使っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;ログイン後コースが表示されなくても慌てずに&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;スマホのアプリにコースが反映されてない！となっても慌てずに落ち着いて上記のようなことをチェックしてみてください。もしかしたら私のようにメールアドレスのスペルミスなどかもしれません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;一方で、Udemyサポートのページにもあるように&lt;strong&gt;モバイルで購入した履歴が反映されない&lt;/strong&gt;というようなこともあるようなので、どうしてもわからない。腑に落ちない。という場合は直接問い合わせてみていただけると良いと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私も「また同じコースを買わないといけないのか」と少し慌てましたが今はおかげさまで、PCでもスマートフォンでもレッスン動画を視聴できております。&lt;strong&gt;このPCとスマホの両方を使いこなすと移動中や自宅など本当に時間と場所を選ばずに勉強ができる&lt;/strong&gt;ので本当に良いサービスだと思います。
みなさんもコースがない！！ってないとなっても落ち着いて対処しましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Udemyのコースを受けてみた感想についても書いているので、よかったら覗いてみてください。
&lt;a href=&quot;https://ver-1-0.net/2017/11/12/e-learning-udemy/&quot;&gt;=&gt;勉強したい人集合!!オンライン学習サービスUdemy でデザインのコースを受けてみた&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どんなコースがあるか探したい方はこちらからどうぞ。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;square_btn&quot; href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&amp;amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Udemyでコースを探す&lt;/a&gt;
&lt;img src=&quot;https://www14.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171128_udemy-ios-combination/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[DockerでRails + Nginx + Postgresの環境を構築する。その②]]></title><description><![CDATA[前回の記事ではDockerをMacにインストールして、
少しDockerコンテナを起動させたり、
コンテナに繋いでDockerの操作に慣れました。 今回はそのDockerでrails環境を構築して行きます。 環境構築の流れは以下になります。 まずはruby2.4.…]]></description><link>https://ver-1-0.net/blog/2017/11/23/rails-nginx-postgres-on-docker-2</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/23/rails-nginx-postgres-on-docker-2</guid><pubDate>Thu, 23 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;chapter&quot;&gt;Dockerでrails5.1.4環境を構築する&lt;/h2&gt;
&lt;p&gt;前回の記事ではDockerをMacにインストールして、
少しDockerコンテナを起動させたり、
コンテナに繋いでDockerの操作に慣れました。&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/19/rails-nginx-postgres-on-docker-1/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その①&lt;/a&gt;&lt;/li&gt;
 	&lt;li&gt;DockerでRails + Nginx + Postgresの環境を構築する。その②&lt;/li&gt;
 	&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/29/docker-rails-nginx-postgres/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その③&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;今回はそのDockerでrails環境を構築して行きます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;環境構築の流れ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;環境構築の流れは以下になります。&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;ruby2.4.2のイメージを取得&lt;/li&gt;
 	&lt;li&gt;rubyのコンテナでbundle init&lt;/li&gt;
 	&lt;li&gt;Dockerfileを元にrailsをインストール&lt;/li&gt;
 	&lt;li&gt;コンテナを起動した際に、Railsが立ち上がるように設定&lt;/li&gt;
&lt;/ol&gt;
手順はこちらの記事を参考にしました。
&lt;a href=&quot;https://qiita.com/togana/items/30b22fc39fe6f7a188ec&quot;&gt;RailsアプリをDockerで開発するための手順&lt;/a&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;早速構築&lt;/h2&gt;
&lt;h3 class=&quot;section&quot;&gt;ruby2.4.2のイメージを取得&lt;/h3&gt;
&lt;p&gt;まずはruby2.4.2がインストールされた、
イメージを取得してきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; pull ruby:2.4.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;※前回の記事ですでにruby:2.4.2の取得が済んでいる人は、
ここはスキップしても大丈夫です。&lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;rubyのコンテナでbundle init&lt;/h3&gt;
&lt;p&gt;取得したコンテナ内でbundle initして、
Gemfileを作成します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token environment constant&quot;&gt;$PWD&lt;/span&gt;&quot;&lt;/span&gt;:/usr/src/sample &lt;span class=&quot;token parameter variable&quot;&gt;-w&lt;/span&gt; /usr/src/sample ruby:2.4.2 bundle init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;できたGemfileを編集して、
railsの行を追加してあげます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$cat&lt;/span&gt; Gemfile
&lt;span class=&quot;token comment&quot;&gt;# frozen_string_literal: true&lt;/span&gt;

&lt;span class=&quot;token builtin class-name&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://rubygems.org&quot;&lt;/span&gt;

git_source&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;:github&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;repo_name&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://github.com/#{repo_name}&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

 gem &lt;span class=&quot;token string&quot;&gt;&quot;rails&quot;&lt;/span&gt;, &lt;span class=&quot;token string&quot;&gt;&apos;5.1.4&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 class=&quot;section&quot;&gt;Dockerfileを基にrailsアプリ用イメージの作成&lt;/h3&gt;
&lt;p&gt;次にDockerfileを用いてrailsアプリ用のイメージをビルドして行きます。
今回は下記のようなDockerfileを作成します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;docker&quot;&gt;&lt;pre class=&quot;language-docker&quot;&gt;&lt;code class=&quot;language-docker&quot;&gt;&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; ruby:2.4.2&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ENV&lt;/span&gt; APP_ROOT /usr/src/sample&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;WORKDIR&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$APP_ROOT&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;RUN&lt;/span&gt; apt-get update &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
    apt-get install -y nodejs &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
                       sqlite3 &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
                       --no-install-recommends &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
    rm -rf /var/lib/apt/lists/*&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;COPY&lt;/span&gt; Gemfile &lt;span class=&quot;token variable&quot;&gt;$APP_ROOT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;COPY&lt;/span&gt; Gemfile.lock &lt;span class=&quot;token variable&quot;&gt;$APP_ROOT&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;RUN&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
  echo &lt;span class=&quot;token string&quot;&gt;&apos;gem: --no-document&apos;&lt;/span&gt; &gt;&gt; ~/.gemrc &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
  cp ~/.gemrc /etc/gemrc &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
  chmod uog+r /etc/gemrc &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
  bundle config --global build.nokogiri --use-system-libraries &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
  bundle config --global jobs 4 &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
  bundle install &amp;amp;&amp;amp; &lt;span class=&quot;token operator&quot;&gt;\&lt;/span&gt;
  rm -rf ~/.gem&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dokcerfileとははapacheの設定ファイルのような形式で記述されたファイルになります。
ここに、
自由にイメージのビルドに必要なタスクを記述していくことで、
基のイメージから新しいイメージを作成することができます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回はrailsに必要なモジュールがインストールされた
イメージを作成するためのDockerfileになっています。&lt;/p&gt;
&lt;p&gt;Gemfile.lockがないので作成。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt; :&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; Gemfile.lock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ビルドのコマンドは次のように、
ビルドの基になるイメージと基底ディレクトリを指定します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; build &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; version1/sample &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;docker images(イメージの一覧取得)を叩くと確かに新しいイメージが作成されています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$docker&lt;/span&gt; images &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; version1
version1/sample         latest              f31106e13371        &lt;span class=&quot;token number&quot;&gt;40&lt;/span&gt; seconds ago      762MB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;先ほどの手順までで、
railsに必要なモジュールがインストールできたので、
作成されたイメージでrails newして行きます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-it&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token environment constant&quot;&gt;$PWD&lt;/span&gt;&quot;&lt;/span&gt;:/usr/src/sample version1/sample rails new &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このコマンドは、
カレントディレクトリをversion1/sampleイメージの/usr/src/sampleに
マウントしてrails newしています。&lt;/p&gt;
&lt;p&gt;これで、rails new できました。
ローカルでファイルをみてみるとrailsのファイル群がインストールされています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$ls&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-ltr&lt;/span&gt;
total &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt;
-rw-r--r--   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;546&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:01 Dockerfile
-rw-r--r--   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;130&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 config.ru
-rw-r--r--   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;227&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 Rakefile
-rw-r--r--   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;374&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 README.md
drwxr-xr-x   &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;102&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 vendor
drwxr-xr-x   &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;136&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 tmp
drwxr-xr-x  &lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;374&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;
drwxr-xr-x   &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;306&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 public
-rw-r--r--   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; admin  staff    &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 package.json
drwxr-xr-x   &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;102&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 log
drwxr-xr-x   &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;136&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 lib
drwxr-xr-x   &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;102&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 db
drwxr-xr-x  &lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;476&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 config
drwxr-xr-x  &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;340&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 app
-rw-r--r--   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; admin  staff  &lt;span class=&quot;token number&quot;&gt;1974&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 Gemfile
drwxr-xr-x   &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt; admin  staff   &lt;span class=&quot;token number&quot;&gt;306&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 bin
-rw-r--r--   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; admin  staff  &lt;span class=&quot;token number&quot;&gt;4772&lt;/span&gt; Nov &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;13&lt;/span&gt;:06 Gemfile.lock
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;h3 class=&quot;section&quot;&gt;コンテナを起動した際に、Railsが立ち上がるように設定&lt;/h3&gt;
&lt;p&gt;ここまででrailsが動く環境は作れましたが、
コンテナ起動と同時にRailsも立ち上がるようにしたいので、
Dockerfileに下記記述を追記します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;docker&quot;&gt;&lt;pre class=&quot;language-docker&quot;&gt;&lt;code class=&quot;language-docker&quot;&gt;&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;COPY&lt;/span&gt; . &lt;span class=&quot;token variable&quot;&gt;$APP_ROOT&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;EXPOSE&lt;/span&gt;  3000&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CMD&lt;/span&gt; [&lt;span class=&quot;token string&quot;&gt;&quot;rails&quot;&lt;/span&gt;, &lt;span class=&quot;token string&quot;&gt;&quot;server&quot;&lt;/span&gt;, &lt;span class=&quot;token string&quot;&gt;&quot;-b&quot;&lt;/span&gt;, &lt;span class=&quot;token string&quot;&gt;&quot;0.0.0.0&quot;&lt;/span&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;記述を追記したら再度ビルドします。
追記した部分では、
ローカルのソースをコンテナ内の $APP_ROOTにコピーして、
3000番ポートを開けて、railsを起動しています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; build &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; version1/sample &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで構築は
完了なので、コンテナを起動させてみましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3000&lt;/span&gt;:3000 &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${&lt;span class=&quot;token environment constant&quot;&gt;PWD&lt;/span&gt;}&lt;/span&gt;:/usr/src/sample&quot;&lt;/span&gt; version1/sample&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;※起動させる場合は、
-vコマンドでローカルのディレクトリをマウントして置くのがみそです。
これしないとローカルのソースとコンテナ内のソースが同期できないので&lt;/p&gt;
&lt;p&gt;無事起動しました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$docker&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt;
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
c7a0a8cfabe5        version1/sample     &lt;span class=&quot;token string&quot;&gt;&quot;rails server -b 0...&quot;&lt;/span&gt;   &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; seconds ago       Up &lt;span class=&quot;token number&quot;&gt;7&lt;/span&gt; seconds        &lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;.0.0:3000-&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3000&lt;/span&gt;/tcp   admiring_hugle
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ブラウザから繋いでもみれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171123_rails-nginx-postgres-on-docker-2/Screen-Shot-2017-11-23-at-13.24.29.png&quot; alt=&quot;Screen-Shot-2017-11-23-at-13.24.29.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;少し開発してみる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;せっかくコンテナが
できたのでUserのCRUDくらいまで
作りましょう。&lt;/p&gt;
&lt;p&gt;scaffoldする場合は、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-it&lt;/span&gt; c7a0a8cfabe5 &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;としてコンテナに接続してコマンドを叩いてもいいですが、
面倒なので、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; c7a0a8cfabe5 rails scaffold User name email age&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とすればワンコマンドでscaffoldできます。&lt;/p&gt;
&lt;p&gt;マイグレーションも&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; c7a0a8cfabe5 rake db:migrate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;でいけます。&lt;/p&gt;
&lt;p&gt;config/routes.rbも少し変更して、
ユーザ管理画面がトップに来るようにします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;Rails&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;application&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;routes&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;draw &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  resources &lt;span class=&quot;token symbol&quot;&gt;:users&lt;/span&gt;
  root &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;users#index&apos;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;config/配下を修正したので、
コンテナを再起動させます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; restart c7a0a8cfabe5&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、
&lt;a href=&quot;http://localhost%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8C%E3%81%B0%E3%80%82&quot;&gt;http://localhostに接続すれば。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ユーザ管理画面が表示されます。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171123_rails-nginx-postgres-on-docker-2/Screen-Shot-2017-11-23-at-14.07.19.png&quot; alt=&quot;Screen-Shot-2017-11-23-at-14.07.19.png&quot;&gt;
&lt;p&gt;構築は以上です。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまで、railsの環境構築をしましたが、
Dockerには一プロセス一コンテナという原則みたいなものがあるので、
アプリとDBではコンテナを分ける必要があります。
（今回はsqliteを使ったので、DBと一緒のコンテナにしてます。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;コンテナ管理ツールとして
docker-composeというものがあるので、
次はそれを使いながら、
rails + nginx + postgres環境を構築したいと思います。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171123_rails-nginx-postgres-on-docker-2/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[海外旅行でUber使うと目的地も支払いも先に決められて便利という話]]></title><description><![CDATA[家にいるとついついPC触ってネットの世界に浸ってしまうので、
気分を転換も兼ねて1…]]></description><link>https://ver-1-0.net/blog/2017/11/21/uber-taiwan</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/21/uber-taiwan</guid><pubDate>Tue, 21 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;chapter&quot;&gt;台湾（台北）に行ってきました&lt;/h2&gt;
&lt;p&gt;家にいるとついついPC触ってネットの世界に浸ってしまうので、
気分を転換も兼ねて10月の終わり頃に台湾にふらっと
行ってきました。&lt;/p&gt;
&lt;p&gt;台湾のここに行きたい！！
というよりは、
日本にいると日本が普通という感覚になったり、
&lt;strong&gt;海外のちょっと違う雰囲気に触れて刺激を得たい&lt;/strong&gt;
という目的があったので、
&lt;strong&gt;気軽で安くいける台湾&lt;/strong&gt;を選択しました。&lt;/p&gt;
&lt;p&gt;今回が初台湾だったので、
二泊三日で一通りの有名所を回ろうという
感じで旅行してきました。&lt;/p&gt;
&lt;p&gt;以下現地で撮った写真です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;九份&lt;/h3&gt;
日本人が大好き九份。
スマホじゃ綺麗に取るのは難しいですね。。
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171121_uber-taiwan/s_IMG_3133.jpg&quot; alt=&quot;s_IMG_3133.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;中正記念堂。&lt;/strong&gt;&lt;/h3&gt;
工事中で、外装が見えなかった。。。
けど、
広場が広大で衛兵の交代式も見れて満足でした。
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171121_uber-taiwan/s_IMG_3167.jpg&quot; alt=&quot;s_IMG_3167.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;行天宮&lt;/strong&gt;&lt;/h3&gt;
みんな大好き三国志の&lt;strong&gt;「関羽」が&lt;/strong&gt;奉らわれている廟。
五倫八徳を真摯に守り抜いた関羽は商業の神として奉らわれています。
&lt;p&gt;お仕事が上手く行くようにお参りして、
おみくじを引いてきました。
が、肝心のおみくじが読めず。。
&lt;strong&gt;「上吉」&lt;/strong&gt;とか書かれていたのは読めたので上々ということでしょう!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171121_uber-taiwan/s_IMG_3180.jpg&quot; alt=&quot;s_IMG_3180.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;他にも、
故宮博物院やら夜市なども行ってきました。
下は小籠包&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171121_uber-taiwan/s_IMG_3192.jpg&quot; alt=&quot;s_IMG_3192.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;魯肉飯。
個人的にこれか夜市で食べた鶏排（ジーパイ)が
一番おいしかったです。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171121_uber-taiwan/s_IMG_3195.jpg&quot; alt=&quot;s_IMG_3195.jpg&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;楽しかったです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
と、これで終わってはただ台湾満喫しただけなので、
今回の台湾旅行で得た教訓をシェアしたいと思います。
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;海外旅行でのUber利用が便利！！&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回の台湾旅行で私が伝えたいことは
この一言です。&lt;/p&gt;
&lt;h3&gt;「海外でUber使うと便利！！」&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;Uberとは、
&lt;strong&gt;アメリカ発祥のタクシー配車サービス&lt;/strong&gt;で、
専用にアプリから自分の目的地を選択して、配車ができるサービスになっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そんなUberを海外で利用する場合に便利な点をあげると&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;先に価格がわかる&lt;/li&gt;
 	&lt;li&gt;地図で目的地を指定できる&lt;/li&gt;
 	&lt;li&gt;クレジットカードで決済できる&lt;/li&gt;
 	&lt;li&gt;英語が通じる&lt;/li&gt;
&lt;/ul&gt;
ということです。
&lt;p&gt;この三日間で、
台北市内ホテル〜九份（1時間ちょっと）、
ホテル〜故宮博物院（20~30分くらい）、
ホテル〜中生記念堂（10 ~ 20分）&lt;/p&gt;
&lt;p&gt;などたくさん移動しましたが、
ほとんどの移動でUberを利用しました。&lt;/p&gt;
&lt;p&gt;実際に利用してみて感じた良い点と、
使い方を書いて行きます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Uberの使い方&lt;/h2&gt;
&amp;nbsp;
&lt;ol&gt;
 	&lt;li style=&quot;margin-top: 15px;&quot;&gt;Uberのアプリを&lt;strong&gt;日本にいるうちに&lt;/strong&gt;
&lt;strong&gt; インストール&lt;/strong&gt;しておき(電話認証などがあるため）、
現地でGoogle Mapで目的地を検索。&lt;/li&gt;
 	&lt;li style=&quot;margin-top: 15px;&quot;&gt;道案内で公共交通機関のタブ（電車のマーク）をタップして、
&lt;strong&gt;一番下までスクロールすると、Uberの案内が表示&lt;/strong&gt;される。&lt;/li&gt;
 	&lt;li style=&quot;margin-top: 15px;&quot;&gt;案内をタップして&lt;strong&gt;車種と料金を選択、&lt;/strong&gt;
&lt;strong&gt; ピックアップしてもらう場所を地図上から選択&lt;/strong&gt;すると
あと何分で迎えにきますという案内が表示される&lt;/li&gt;
 	&lt;li style=&quot;margin-top: 15px;&quot;&gt;指定した場所でピックアップしてもらう。
（&lt;strong&gt;車のナンバーが画面に表示される&lt;/strong&gt;ので、それで迎えの車を
特定できます。）&lt;/li&gt;
 	&lt;li style=&quot;margin-top: 15px;&quot;&gt;支払いはカードで済んでいるので、目的地についたら降ろしてもらう。
(現金決済もできるようですが、カード決済が便利です。)&lt;/li&gt;
&lt;/ol&gt;
&amp;nbsp;
&lt;h2 class=&quot;chapter&quot;&gt;Uber便利な理由その1 先に価格がわかる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;別のアジアの国などでもそうなのですが、
地球の歩き方など、
旅行ガイドなどでもメーター付きのタクシーに乗ることを
進められます。&lt;/p&gt;
&lt;p&gt;日本で生活していると
あまり実感していないのですが、
日本以外のアジア圏ですと
メーターがなく、乗る前に値段交渉を行ったりする
タクシーがあります。&lt;/p&gt;
&lt;p&gt;経験的に、
こう行ったタクシーというのは相手が
日本人だということがわかっているので、
少し高めの料金を要求されたりします。&lt;/p&gt;
&lt;p&gt;はたまた、
メーター付きのタクシーに乗っても回り道されたり、
迷子になったり、渋滞にはまったりということで、
料金が思ったより高くなってしまうことが多々あります。&lt;/p&gt;
&lt;p&gt;これらの問題を解決するのがUberで、
先に価格を合意して決済を行うので、
移動中に価格のことを心配したり、運転手がちゃんと目的地に
向かっているかなどのことを心配して変な体力を使う必要が無くなります。
台北では価格もタクシーと同程度のようなので、
そちらも気にせずUberを使えると思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Uber便利な理由その2 先に目的地を決められる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;現地でタクシーに乗ると、
ドライバーに言葉が伝わらなかったり、現地での目的地の読み方がわからない、
などなど正しく目的地を伝えるために苦労することが
結構あります。&lt;/p&gt;
&lt;p&gt;そんな時でもUberが便利で、
あらかじめGoogle Mapで目的地を伝えられるので、
これらの苦労をしなくてすみます。&lt;/p&gt;
&lt;p&gt;時間が限られている旅行では、
なるべく時間を節約して、効率的に観光スポットを回りたいですよね。
これなら迷子や目的地が間違っていたなどで時間を無駄にする
リスクを排除できます。&lt;/p&gt;
&lt;p&gt;だいたい運転手さんはあらかじめ指定した目的地への
経路を自分のスマホで確認しながら
運転してくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Uber便利な理由その3 カードで決済できる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;現地で現金が無くなるのって結構不安ですよね。
なので、
なるべく現金は使わないでおきたい。
という時もカードで決済できるのでそれらの心配をしなくて
すみます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Uber便利な理由その4 英語が伝わる&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;これはその国の言語がさっぱりな状態の時になるのですが、
英語を母国語としない国のドライバーさんには英語が
通じないことが多いですが、
さすがにアメリカ発祥のサービスだからかUberのドライバーさん方は
英語が通じることが多いです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ - Uberってメリットしかないの？ -&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;最後まとめになりますが、
とても便利なUberですが&lt;strong&gt;メリットしかない訳ではない&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;アメリカでは&lt;strong&gt;Uberドライバーの暴行事件&lt;/strong&gt;なども
発生しているようで、
知らない人の車に乗るという点で警戒する部分は
あるようです。&lt;/p&gt;
&lt;p&gt;対策としては、
&lt;strong&gt;複数人でUberを利用する&lt;/strong&gt;や&lt;strong&gt;車内で寝てしまったり&lt;/strong&gt;
&lt;strong&gt; 無警戒な行動を慎む&lt;/strong&gt;というところでしょうか。&lt;/p&gt;
&lt;p&gt;個人的な意見としては、
現地の個人タクシーなどを利用するよりは、
そういった被害にあうリスクや犯罪の被害にあった場合の
追跡・責任が明確なUberを利用した方が良いのではというもの
もあります。&lt;/p&gt;
&lt;p&gt;こういうデメリットをどこまで許容できるか
というのもありますが、
上手くUberを使いこなせれば、
&lt;strong&gt;移動中にちゃんと目的地につくかハラハラしながらタクシーに乗ったり&lt;/strong&gt;、
&lt;strong&gt;迷子やドライバーとのトラブルなどで限られた旅行の時間を&lt;/strong&gt;
&lt;strong&gt; 無駄にしたり&lt;/strong&gt;することなく、
&lt;strong&gt;効率的に時間を使った楽しい旅行&lt;/strong&gt;を実現できるはずです。&lt;/p&gt;
&lt;p&gt;また、
個人的に新しいサービスを使うというのも
新しい刺激になってワクワクするので、
おすすめです。&lt;/p&gt;
&lt;p&gt;以上、
Uberの便利さと簡単な台湾旅行記をお伝えしました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171121_uber-taiwan/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CSSでマウスオーバーした時にうにょーんって下線が伸びるようにする]]></title><description><![CDATA[cssでマウスオーバした時に下線
をうにょーんってさせるアニメーションです。 それぞれ、Spring,Summer,Autumn,Winterの文字の
上にマウスを当てるとアンダーラインが引かれるようになっています。 demoにはcodepen…]]></description><link>https://ver-1-0.net/blog/2017/11/20/css-mouseover-underline</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/20/css-mouseover-underline</guid><pubDate>Mon, 20 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;cssでマウスオーバした時に下線
をうにょーんってさせるアニメーションです。&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;500&quot; data-theme-id=&quot;0&quot; data-slug-hash=&quot;gXoVEX&quot; data-default-tab=&quot;css,result&quot; data-user=&quot;version1&quot; data-embed-version=&quot;2&quot; data-pen-title=&quot;gXoVEX&quot;&gt;See the Pen &lt;a href=&quot;https://codepen.io/version1/pen/gXoVEX/&quot;&gt;gXoVEX&lt;/a&gt; by version1 (&lt;a href=&quot;https://codepen.io/version1&quot;&gt;@version1&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/p&gt;
&lt;script async src=&quot;https://production-assets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;p&gt;それぞれ、Spring,Summer,Autumn,Winterの文字の
上にマウスを当てるとアンダーラインが引かれるようになっています。&lt;/p&gt;
&lt;p&gt;demoにはcodepenを利用しています。
興味ある方はこちらもどうぞ
&lt;a href=&quot;https://ver-1-0.net/2017/09/02/codepen/&quot;&gt;CodePen – webサービスのデザインを考えるときにおすすめの海外サイト&lt;/a&gt;
 &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;cssについて、
簡単に説明すると肝になっているのは、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.list-item::after&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;token property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
   &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;block&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
   &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
   &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 6px auto 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
   &lt;span class=&quot;token property&quot;&gt;border-bottom&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px solid  white&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
   &lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; width 0.3s ease-in-out&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.list-item:hover::after&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここの部分です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;after擬似要素で見えない下線を指定する&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;まずは、
:after擬似要素で、それぞれSpringなど季節の
文字の後にwidth:0で下のボーダーだけが存在する要素を
入れ込みます。&lt;/p&gt;
&lt;p&gt;その後に、
.list-item:hover::afterで
マウスオーバーされた時のスタイルを指定して
いきます。
ここではwidth:100pxが指定させているので、
下線が表示されるようになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;transformでうにょーんを表現する&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;注意点として、
transitionで最初borderのwidthが0である部分から、
マウスオーバーされてwidthが100%になるまでの、
時間を指定する必要があります。&lt;/p&gt;
&lt;p&gt;この例では、
0.3秒かけて変化させるという指定を
行なっているので、
実際のサンプルのような動きになります。
(指定しないといきなり下線が表示される感じになります。)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;aタグをinline-blockで指定する&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;また、
aタグでdisplay:inline-blockを
指定していますが、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;white&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; inline-block&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;30px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これを指定しないと、
文字幅でなく、画面の横幅全体に下線が
広がってしまうので注意してください。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171120_css-mouseover-underline/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[DockerでRails + Nginx + Postgresの環境を構築する。その①]]></title><description><![CDATA[タイトルのように、
何回かに分けてRails + Nginx + Postgresの環境を
Dockerで構築していきます。 ※書いていたらそれなりの長さになったので、
Dockerをインストールして、
ちょっと触ってみるところまでで一旦切りました。 Dockerは、
PC…]]></description><link>https://ver-1-0.net/blog/2017/11/19/rails-nginx-postgres-on-docker-1</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/19/rails-nginx-postgres-on-docker-1</guid><pubDate>Sun, 19 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;タイトルのように、
何回かに分けてRails + Nginx + Postgresの環境を
Dockerで構築していきます。&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;DockerでRails + Nginx + Postgresの環境を構築する。その①&lt;/li&gt;
 	&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/23/rails-nginx-postgres-on-docker-2/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その②&lt;/a&gt;&lt;/li&gt;
 	&lt;li&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/29/docker-rails-nginx-postgres/&quot;&gt;DockerでRails + Nginx + Postgresの環境を構築する。その③&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
構築を行う前に簡単にDockerの説明から。
&lt;p&gt;※書いていたらそれなりの長さになったので、
Dockerをインストールして、
ちょっと触ってみるところまでで一旦切りました。&lt;/p&gt;
&lt;p&gt;Dockerは、
PC上にコンテナという仮想のサーバを作成して、
その上にRailsやPostgres,Nginxなどの環境を構築するものです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Dockerの基本的な仕組み -Virtual Machineとの違い-&lt;/h2&gt;
下に図を貼りつけましたが、
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171119_rails-nginx-postgres-on-docker-1/CompareVMtoDoc-1.jpg&quot; alt=&quot;CompareVMtoDoc-1.jpg&quot;&gt;
&lt;p&gt;&lt;strong&gt;「DockerはVirtual Boxなどの仮想マシンとどう違うの？」&lt;/strong&gt;
というように比較して語られることが多いです。&lt;/p&gt;
&lt;p&gt;図では、&lt;/p&gt;
&lt;p&gt;左側がDocker
右側がVirtual BoxなどのVirtualMachineの
場合の構成になっています。&lt;/p&gt;
&lt;p&gt;VMは図を見てわかるように
&lt;strong&gt;Hypervisor（ハイパバイザー）という仮想化技術&lt;/strong&gt;を挟んで、
サーバを仮想的に構築します。
このHypervisor（ハイパバイザー）を使用する場合、
メモリなどのリソースをVMごとに割り当て、
ゲストOS上でアプリケーションを稼働させることになるため、
&lt;strong&gt;ゲストOSの分容量であったり、メモリなどのリソースを&lt;/strong&gt;
&lt;strong&gt; 大きく取られてしまうことになります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;対して、
&lt;strong&gt;Docker&lt;/strong&gt;のようなコンテナ型のものは、
リソースやカーネルをホストOSと共有するので、
VM型のように余分なリソースを食われることが
少なく、イメージサイズも小さい軽量なものとなります。
（ Windows,Macなどの場合は、ホストOS上にハイパバイザー型の仮想マシンを立ち上げそのゲストOS上にDockerEngineを動かす形になるので、
Linux版にDockerをインストールをするのが、これらのメリットを
多く受けられるようです。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;このような軽量であることのメリット以外にも、
開発環境で作成したアプリケーションをイメージ化して本番にデプロイができるので、
本番環境と開発環境の差異を極限まで小さくできるという
メリットもあります。&lt;/p&gt;
&lt;p&gt;本番環境にDockerさえ入っていれば、
本番環境にDockerのイメージを配置してそのまま、
動かすことができてしまいます。
コードでデプロイするのではなく、
コンテナごと配布する形になるそうです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Dockerの仕組みやメリットについての説明は
これくらいにして、
次は実際の構築をやっていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Dockerのインストール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回は、
MacでのDockerのインストールの仕方だけ説明します。&lt;/p&gt;
&lt;p&gt;インストールはこちらからできます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://store.docker.com/editions/community/docker-ce-desktop-mac&quot;&gt;&lt;a href=&quot;https://store.docker.com/editions/community/docker-ce-desktop-mac&quot;&gt;https://store.docker.com/editions/community/docker-ce-desktop-mac&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インストールの方法は簡単で、
リンク先からDocker.dmgをダウンロードして起動するだけです。&lt;/p&gt;
&lt;p&gt;特段コマンドを打ったりする必要はありません。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Dockerを触ってみる。基本コマンドの説明&lt;/h2&gt;
&lt;p&gt;まずは簡単に触ってみてDockerのイメージを
掴んでいきます。
コンソールから以下コマンドを叩いてみましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; pull hello-world&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;実行結果は以下のようになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$docker&lt;/span&gt; run hello-world
Unable to &lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt; image &lt;span class=&quot;token string&quot;&gt;&apos;hello-world:latest&apos;&lt;/span&gt; locally
latest: Pulling from library/hello-world
9a0669468bf7: Already exists
Digest: sha256:cf2f6d004a59f7c18ec89df311cf0f6a1c714ec924eebcbfdd759a669b90e711
Status: Downloaded newer image &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; hello-world:latest

Hello from Docker&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;. The Docker client contacted the Docker daemon.
 &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;. The Docker daemon pulled the &lt;span class=&quot;token string&quot;&gt;&quot;hello-world&quot;&lt;/span&gt; image from the Docker Hub.
 &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;. The Docker daemon created a new container from that image &lt;span class=&quot;token function&quot;&gt;which&lt;/span&gt; runs the

    executable that produces the output you are currently reading.
 &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;. The Docker daemon streamed that output to the Docker client, &lt;span class=&quot;token function&quot;&gt;which&lt;/span&gt; sent it
    to your terminal.

To try something &lt;span class=&quot;token function&quot;&gt;more&lt;/span&gt; ambitious, you can run an Ubuntu container with:
 $ &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;-it&lt;/span&gt; ubuntu &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;

Share images, automate workflows, and &lt;span class=&quot;token function&quot;&gt;more&lt;/span&gt; with a &lt;span class=&quot;token function&quot;&gt;free&lt;/span&gt; Docker ID:
 https://cloud.docker.com/

For &lt;span class=&quot;token function&quot;&gt;more&lt;/span&gt; examples and ideas, visit:
 https://docs.docker.com/engine/userguide/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker run&lt;/strong&gt; は、&lt;strong&gt;コンテナの起動&lt;/strong&gt;を行なうコマンドです。&lt;/p&gt;
&lt;p&gt;実行結果を補足するために
以下に図を用意しました。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171119_rails-nginx-postgres-on-docker-1/Docker-1.png&quot; alt=&quot;Docker-1.png&quot;&gt;
&lt;p&gt;Dockerはクライアントーサーバ型のアーキテクチャになっており、
インストールした直後から起動している
&lt;strong&gt;Docker Daemon&lt;/strong&gt;という
常駐型のプロセスがコマンドを待ち受けています。&lt;/p&gt;
&lt;p&gt;そこに、
先ほどのようにrunコマンドを実行すると、
ClientからDockerデーモンにhello-worldというコンテナを
起動するように命令が飛びます。&lt;/p&gt;
&lt;p&gt;デーモンは、命令の通りローカルに保存されているイメージ（コンテナを作成するための雛形のようなもの）を調べて、
命令どおりのhello-worldというイメージがすでに存在するか
確認します。&lt;/p&gt;
&lt;p&gt;今回の場合。
実行結果にも&quot;Unable to find image &apos;hello-world:latest&apos; locally&quot;と出力されているように
ローカルでイメージが見つからないので、
Registryからイメージを取得してコンテナを作成しています。&lt;/p&gt;
&lt;p&gt;図でいうところの&lt;strong&gt;青色の矢印&lt;/strong&gt;がこの流れ
になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ローカルにどのイメージが存在するか下記コマンドで
確認できます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; images&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;先ほどのrunコマンドを実行した後であれば、
hello-worldイメージが取得されていることを確認できる
と思います。&lt;/p&gt;
&lt;p&gt;この状態でrunコマンドを実行すると
図の&lt;strong&gt;赤い矢印&lt;/strong&gt;がさすようにすでに存在するイメージを
再利用してコンテナを作成します。&lt;/p&gt;
&lt;p&gt;お次は、
railsのコンテナを作成していくので、
まずはrubyのイメージを取得しましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; pull ruby:2.4.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;取得できたら、
コンテナの中をみて見ましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;-it&lt;/span&gt; ruby:2.4.2 bin/bash
root@e77b7d2cc4a0:/&lt;span class=&quot;token comment&quot;&gt;#&lt;/span&gt;
root@e77b7d2cc4a0:/&lt;span class=&quot;token comment&quot;&gt;#&lt;/span&gt;
root@e77b7d2cc4a0:/&lt;span class=&quot;token comment&quot;&gt;# ruby -v&lt;/span&gt;
ruby &lt;span class=&quot;token number&quot;&gt;2.4&lt;/span&gt;.2p198 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt;-09-14 revision &lt;span class=&quot;token number&quot;&gt;59899&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;x86_64-linux&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
root@e77b7d2cc4a0:/&lt;span class=&quot;token comment&quot;&gt;#&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;runコマンドに -i と -t オプションを与えてあげて、&lt;/strong&gt;
&lt;strong&gt; シェルを起動させる&lt;/strong&gt;と、
コンテナの中をみることができます。
railsサーバの構築とは直接関係ないですが、
何か詰まった時に確認できる方法なので、
知っておくと良いと思います。&lt;/p&gt;
&lt;p&gt;また、
bashを起動した状態で別ウィンドウから&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;と叩くと起動しているコンテナが確認できます。&lt;/p&gt;
&lt;p&gt;dockerを扱うにあたり、
images, run , pull , ps あたりは基本のコマンドなので
覚えておくと良いと思います。&lt;/p&gt;
&lt;p&gt;ここまでは、
コンテナを取得・起動して基本のコマンドについて
画像付きで説明しましたが、
このあとは実際にrailsサーバを立てていきます。&lt;/p&gt;
&lt;p&gt;と思ったのですが、
長くなったのでこの記事は一旦ここまでと
します。&lt;/p&gt;
&lt;p&gt;また別の機会に
続きを書いていきます。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171119_rails-nginx-postgres-on-docker-1/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CoolなマークダウンエディタInkdrop！！ マークダウンも使えて、モバイルとの連携もできる。]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2017/11/17/cool-markdown-editor-inkdrop</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/17/cool-markdown-editor-inkdrop</guid><pubDate>Fri, 17 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2 class=&quot;chapter&quot;&gt;Coolなメモアプリ Inkdrop を見つけたきっかけ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;知り合いのエンジニアさんからこのような記事を
教えてもらったのがきっかけで、
このアプリに出会いました。&lt;/p&gt;
&lt;a href=&quot;https://blog.craftz.dog/how-i-built-a-markdown-editor-earning-1300-mo-profit-inkdrop-c6691eca7091&quot;&gt;
Markdownエディタを作って月15万円稼ぐまでにやったこと — Inkdrop&lt;/a&gt;
&lt;p&gt;まず記事のタイトルがなかなか興味をそそるので
じっくりと記事を読んでいきました。&lt;/p&gt;
&lt;p&gt;記事を読んでみると、
アプリをグロースするに当たってなるほど！ということが書かれていたり、
かなり戦略的に考えて運営されているのが伺えました。&lt;/p&gt;
&lt;p&gt;記事がよかったので、アプリもつい触ってみたくなり、
アプリを実際にダウンロードして触ってみました。&lt;/p&gt;
&lt;p&gt;最初の印象は単純に
&lt;strong&gt;「え、かっこいい」&lt;/strong&gt;
でした。&lt;/p&gt;
&lt;p&gt;すごい表面的な評価ではありますが、
&lt;strong&gt;ファーストインプレッションて大事ですよね。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有料のアプリですが、
値段もお手頃 月5ドルだそうです。&lt;/p&gt;
&lt;p&gt;とりあえず&lt;strong&gt;60日間は無料で使える&lt;/strong&gt;そうなので、早速無料で登録して使い始めました。
まだ、無料使用期間中ではありますが、
私のお気に入りの&lt;strong&gt;Inkdrop&lt;/strong&gt;の良さをまとめてみました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Coolなポイント その1 洗練されたUI&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;画像にもあるように、
&lt;strong&gt;UIがシンプルで、洗練されていて使っていてワクワクします！！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;他のアプリとは&lt;strong&gt;少し違ったフォルムで独特な&lt;/strong&gt;
&lt;strong&gt; 配色のアイコン&lt;/strong&gt;もまた良いです。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171117_cool-markdown-editor-inkdrop/Screen-Shot-2017-11-16-at-22.50.51-1024x688.png&quot; alt=&quot;Screen-Shot-2017-11-16-at-22.50.51-1024x688.png&quot;&gt;
&lt;p&gt;UIの好みも人それぞれですが、
こっちのダークなUIも渋くていいですよね。&lt;/p&gt;
&lt;p&gt;各ペインがフラットに繋がってる感じとか、フォントとかが
絶妙で、眺めているだけでも楽しくなってきます。&lt;/p&gt;
&lt;p&gt;普段使いのツールなので、
&lt;strong&gt;ユーザーをワクワクさせるアプリ&lt;/strong&gt;というのは強いですね。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Coolなポイント その2 開発体制&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;開発者の&lt;strong&gt;Takuya&lt;/strong&gt;さんですが、
Mediumのポストをみる限り、
&lt;strong&gt;企画・開発・運用・マーケティングまでを全部一人&lt;/strong&gt;でこなしてしまっています。
しかも着実にプロダクトも成長し、
海外のユーザもいるという。&lt;/p&gt;
&lt;p&gt;凄いの一言です。。
その一言につきます。&lt;/p&gt;
&lt;p&gt;プロダクトに対して評価が下されるべきで、
何人で作ったかというのは本質的な部分では
ないのかもしれないですが、
やっぱり&lt;strong&gt;一人でこれだけのクオリティのものを&lt;/strong&gt;
&lt;strong&gt; 作れるというのは本当に凄い&lt;/strong&gt;と思うし、尊敬します。&lt;/p&gt;
&lt;p&gt;記事中で表明されているように、&lt;/p&gt;
&lt;blockquote&gt;僕はいわゆる「成功」を求めているのではなく、ただ今をより楽しく生きようとしているだけです。&lt;/blockquote&gt;
というように自分のライフスタイルにや
エンジニアとしてのスタイルへの強いこだわりも
伺えます。
&lt;p&gt;勝手ながらついつい応援したくなってしまい、
今後の課金は間違いないかと思います。&lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Coolなポイント その3 端末間連携&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ポイントその3は&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;端末間で連携ができるし、オフラインでも使えるというところです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;マークダウンエディタは他にも色々と存在するのですが、
これは他のプロダクトとは一線を画しており、
&lt;strong&gt;モバイル版があるというのもイケているポイント&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;モバイル版もあると
出先で気になったことなどはその都度メモをして置けますし、
マークダウンを使えばブログの下書きを書いてしまうこともできます。&lt;/p&gt;
&lt;p&gt;これらの&lt;strong&gt;メモは自動でデスクトップアプリにも同期&lt;/strong&gt;されるので、
重宝しています。&lt;/p&gt;
&lt;p&gt;ちょうどこういうアプリ欲しかった。
Evernoteなどクラウド上にデータを保存するアプリはいくつかありますが、
マークダウンは使えないですよね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;UIがかっこよくて、
携帯と同期もできて、開発者の方も素晴らしくてという言うことなしの
&lt;strong&gt;inkdrop&lt;/strong&gt;を紹介してきました。&lt;/p&gt;
&lt;p&gt;こちらは有料のエディタにはなるようですが、
月5ドル払う価値は十分あると断言できます。&lt;/p&gt;
&lt;p&gt;私もこれまで綺麗なUIが特に気に入っていてMacでも
iPhoneでも楽しく使わせていただいてます。&lt;/p&gt;
&lt;p&gt;今回は
&lt;strong&gt;inkdrop&lt;/strong&gt;の良いところをとりあえず、
3つほど上げさせて頂きましたが、
今後も機能が追加されていくそうですので、
どんな便利な機能が追加されていくのか
楽しみです!!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.craftz.dog/the-next-roadmap-of-inkdrop-vol-2-ec04a81cc3a7&quot;&gt;Inkdropの実装予定の機能 (vol.2)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;個人的には、
・ファイルごとに同期させるか選べる機能。
・アプリが起動している状態なら、ショートカットキーで
最前面にウィンドウを表示してactivateしてくれる機能&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;があると嬉しいなぁ〜という感じです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ぜひ使ってみてください。
オススメです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171117_cool-markdown-editor-inkdrop/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[サイトやfaviconを作成するときに使える配色自動生成ツール coolors.co]]></title><description><![CDATA[こんばんは！ 突然ですが、web…]]></description><link>https://ver-1-0.net/blog/2017/11/15/cooler-co-convinent-color-tool</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/15/cooler-co-convinent-color-tool</guid><pubDate>Wed, 15 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こんばんは！&lt;/p&gt;
&lt;p&gt;突然ですが、webサイトなどデザインを行うときに
&lt;strong&gt;配色についてなかなかアイディアが出て来ず手が止まってしまう
&lt;/strong&gt;はたまた、
&lt;strong&gt;どのような配色にすれば良いかわからない&lt;/strong&gt;
というような悩みありませんでしょうか。&lt;/p&gt;
&lt;p&gt;私は、
ついこないだブログ開設当初から放置していた
faviconを作成しているときにこの問題にぶち当たりました。&lt;/p&gt;
&lt;p&gt;※faviconとは、下の画像のようなタイトルの横にある画像の
ことです。
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171115_cooler-co-convinent-color-tool/Screen-Shot-2017-11-14-at-23.52.18.png&quot; alt=&quot;Screen-Shot-2017-11-14-at-23.52.18.png&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「サイトの配色にあったfaviconが欲しいけど、
自己流でやったら絶対ガチャガチャの色遣いになる・・・」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そういう悩みを解決してくれるサイトが
あり、これを使ったらそれなりのfaviconができたので、
以下でサイトを紹介していきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;配色自動生成サイト Coolers.co&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;&lt;a href=&quot;https://coolors.co/&quot;&gt;coolers.co&lt;/a&gt;というサイトを使うと
良い感じの色を自動で生成してくれるので、
その配色をそのまま使って
自身の作品の配色を決めることができてしまいます！！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ガチャガチャな色づかいを防ぐ&lt;/strong&gt;には、
配色の理論だったりを知らないといけないので、
これはかなり助かります。&lt;/p&gt;
&lt;p&gt;さらに、
メールアドレスで登録を行ってしまえば、
&lt;strong&gt;一度決めた配色を保存して取っておくことができます。&lt;/strong&gt;
使いかたはチュートリアルも
ついてあったりと
&lt;strong&gt;簡単でシンプルなツールになっています。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;シンプルで簡単とは言いましたが、
サイトが英語で抵抗感がある方もいらっしゃるかと思うので、
後で解説していきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Coolers.coの使い方&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まず、
トップページはこのような形になります。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171115_cooler-co-convinent-color-tool/Screen-Shot-2017-11-15-at-0.04.49-e1510673350509.png&quot; alt=&quot;Screen-Shot-2017-11-15-at-0.04.49-e1510673350509.png&quot;&gt;
&lt;p&gt;配色を保存して置きたいなどの要望があれば、
アカウントを作成して置きましょう。
今回は使い方の説明になるので、
登録方法は割愛します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まず最初に色を自動生成するページには、
メニューのGenerateというリンクをクリックします。&lt;/p&gt;
&lt;p&gt;色の自動生成を行う画面は以下のようになっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171115_cooler-co-convinent-color-tool/coolors-explanation-1024x926.png&quot; alt=&quot;coolors-explanation-1024x926.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;画像にはつらつらと説明を書きましたが、
&lt;strong&gt;メニュー真ん中あたりの「？」のアイコンをクリックをして&lt;/strong&gt;
&lt;strong&gt; チュートリアルを行う&lt;/strong&gt;のが、
使い方を知る上では一番良いと思います。&lt;/p&gt;
&lt;p&gt;画像には書きませんでしたが、
&lt;strong&gt;一番基本的な部分は&lt;/strong&gt;
&lt;strong&gt; スペースボタンで、新たな配色を生成するということです。&lt;/strong&gt;
表示された配色が気に入らなければ、
スペースボタンを押してガンガン切り替えましょう。&lt;/p&gt;
&lt;p&gt;また、
もし自分で使いたい色が決まっているのであれば、
それらを入力して、&lt;strong&gt;ロック&lt;/strong&gt;をかけてしまいましょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ロック&lt;/strong&gt;をかけてしまえば、
次にスペースボタンを押した時でもそこの色は
シャッフルされず、それに合わせた色が表示されます。&lt;/p&gt;
&lt;p&gt;そして、
何度かシャッフルを繰り返したり、
微調整を行ったらあとは、
それを画像に吐き出したり、保存しておくとことができます。&lt;/p&gt;
&lt;p&gt;画像のエクスポートは、
メニュー右上からできます。&lt;/p&gt;
&lt;p&gt;また、
それより右にあるアイコンを押せば、
配色を保存したり、
保存した配色を確認することができます。&lt;/p&gt;
&lt;p&gt;以上、
一応解説はしましたが、
チュートリアルを行うと一通りの使い方は、
動きを見ながらなれることができるので、
それが一番良いと思います。&lt;/p&gt;
&lt;p&gt;説明はここまでで、
ぜひみなさん、配色に困った場合はcoolers.coを
お使いになると良いと思います。&lt;/p&gt;
&lt;p&gt;では！&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171115_cooler-co-convinent-color-tool/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Macにイーサリアムをインスールして、送金してみる（テストネットワーク）]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2017/11/14/mac-ethereum-install</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/14/mac-ethereum-install</guid><pubDate>Tue, 14 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;イーサリアムでのアプリケーション開発を
入りの部分だけ勉強したのでまとめます。&lt;/p&gt;
&lt;p&gt;また、
タイトルに送金とあるので、
&lt;strong&gt;「え、お金使うの？？」&lt;/strong&gt;と不安になってしまう部分がある
かと思いますが、
安心してください、この記事では、
テストネットワークと言う自分しか存在しないチェーン上
での作業になるので、
実際にお金を動かしたりすることはありません。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;それでは、
まずはイーサリアムって何という人へ&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Ethereum - イーサリアム - とは&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ビットコインと同じような中央の管理組織を持たない仮想通貨で、
&lt;strong&gt;時価総額は3兆3913億円（2017年11月13日時点）&lt;/strong&gt;にものぼり
ビットコインの次に時価総額の大きな通貨となっています。&lt;/p&gt;
&lt;p&gt;ビットコインとは違いイーサリアムブロックチェーン上にコントラクトを
保存できると言うことです。
コントラクトは&lt;strong&gt;Solidity&lt;/strong&gt;と言うjavascriptライクな言語で記述することができ、
&lt;strong&gt;アプリケーションをブロックチェーン上に登録することが可能です。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;そのコントラクトの実行には、
手数料が発生し、それらがイーサリアムのマイナーの
収入になります。&lt;/p&gt;
&lt;p&gt;イーサリアムブロックチェーン上には、
すでに複数の分散型のアプリケーションが構築されており、
それらはこちらのサイトに公開されてあります。
&lt;a href=&quot;https://www.stateofthedapps.com/&quot;&gt;State of the ÐApps — 821 Projects Built on Ethereum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ちなみに、
&lt;strong&gt;中央の管理組織を持たないことを生かしたソーシャルメディアである&lt;/strong&gt;
&lt;a href=&quot;https://akasha.world/&quot;&gt;Akasha&lt;/a&gt;
や
&lt;strong&gt;音楽業界の著作権管理と印税の支払いを自動化するプラットフォームである&lt;/strong&gt;
&lt;a href=&quot;https://ujomusic.com/&quot;&gt;Ujomusic&lt;/a&gt;
などのプロジェクトが紹介されています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ブロックチェーンの仕組みがいまいちと言う方は、
こちらの記事が参考になると思います。
&lt;a href=&quot;https://ver-1-0.net/2017/10/18/how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja/&quot;&gt;https://ver-1-0.net/2017/10/18/how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Etheriumクライアントをインストール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;それでは早速Ethereumに接続する
クライアントツールが必要なので
インストールをしていきます。&lt;/p&gt;
&lt;p&gt;クライアントツールもいくつか種類はあるのですが、
今回は一番よく使われているであろう、
&lt;strong&gt;go-ethereum&lt;/strong&gt;を利用します。&lt;/p&gt;
&lt;p&gt;通称gethです。
&lt;strong&gt;読み方はそのままゲスで大丈夫です。&lt;/strong&gt;
躊躇せず読んじゃってください。&lt;/p&gt;
&lt;p&gt;Macにインストールする場合のコマンドは
こちらになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew tap ethereum/ethereum
brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; ethereum
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;エラーがなくインストールできていれば完了です。
インストールできるているかは下記のように
確認しましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$geth&lt;/span&gt; version
Geth
Version: &lt;span class=&quot;token number&quot;&gt;1.7&lt;/span&gt;.2-stable
Git Commit: 1db4ecdc0b9e828ff65777fb466fc7c1d04e0de9
Architecture: amd64
Protocol Versions: &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;63&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;62&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
Network Id: &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
Go Version: go1.9.2
Operating System: darwin
&lt;span class=&quot;token assign-left variable&quot;&gt;GOPATH&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;GOROOT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/usr/local/Cellar/go/1.9.2/libexec
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Gethを起動してテストネットワークに接続する&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回接続するのはローカルプライベートテストネットなので、
冒頭で説明したように、
お金の心配だったり他の方に迷惑をかける恐れは
ないので、そのまま安心してお進みください。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;データディレクトリを作成&lt;/h3&gt;
送受信したブロックのデータやアカウント情報を格納するための、
ディレクトリを作成します。
```bash
mkdir my-first-eth
```
&amp;nbsp;
&lt;h3&gt;Genesisファイルを作成&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;Genesisファイルは、
ブロックチェーンの一番最初のブロックチェーンの
情報をかいた設定ファイルのようなものです。
ローカルプライベートテストネットを利用する場合は、
ゼロからブロックチェーンを構築するため、
このファイルが必要となります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;myGenesis.json&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;nonce&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x0000000000000042&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;mixhash&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x0000000000000000000000000000000000000000000000000000000000000000&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;difficulty&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x400&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;alloc&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;coinbase&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x3333333333333333333333333333333333333333&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;timestamp&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;parentHash&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x0000000000000000000000000000000000000000000000000000000000000000&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;extraData&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;gasLimit&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x8000000&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;config&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Gethの初期化&lt;/h3&gt;
作成したGenesisファイルで初期化をします。
```bash
geth --datadir /your/env/path/my-first-eth init /your/env/path/myGenesis.json
```
&amp;nbsp;
&lt;h3&gt;Gethの起動&lt;/h3&gt;
起動のコマンドはこちらになります。
```bash
geth --networkid 10 --nodiscover --maxpeers 0 --datadir /your/env/path/my-first-eth console 2&gt;&gt; geth.log
```
&amp;nbsp;
&lt;p&gt;それぞれのオプションを説明すると&lt;/p&gt;
&lt;p&gt;&lt;b&gt;--networkid&lt;/b&gt;
ネットワーク識別子。0 ~ 3 は予約済みですので、
指定する際は他の値を指定します。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;--nodiscover&lt;/b&gt;
起動したノードを他のノードから検出できないようにします。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;--maxpeers&lt;/b&gt;
起動したノードに接続できるノードの数です。0を指定すると、
他のノードとは接続しなくなります。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;console&lt;/b&gt;
対話型のJavaScriptコンソールを呼び出します。&lt;/p&gt;
&lt;p&gt;問題なければ対話型のコンソールが表示され、
プロンプトが現れます。&lt;/p&gt;
&lt;p&gt;ここまででgethの起動は完了です。&lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;アカウントの作成&lt;/h2&gt;
&lt;p&gt;イーサリアムを送金する必要があるので、
アカウントを作成する必要があり、
作成するユーザーのことはEOA ( Externally Owned Account)と
呼ばれます。&lt;/p&gt;
&lt;p&gt;コマンドは以下になります。
引数の文字列はパスワードになるので、
忘れないようにしましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;personal&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;newAccount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;送金を行うには、
送り手と受け手が必要ですので、
もう一つアカウントを作成します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;personal&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;newAccount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;drowssap&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;アカウントを作成した際に表示された文字列は、
作成したアカウントのアドレスになります。
送金を行う際はこのアドレスを利用して、送金を行うことになります。&lt;/p&gt;
&lt;p&gt;作成したアカウントを確認します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; personal&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;newAccount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;0x73c935b7ade47b3a3efa29769e4db1cc91aa2e88&quot;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; personal&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;newAccount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;drowssap&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;0x0c792c39d206ae2d2a0df7b7db7d365c3067a137&quot;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;0x73c935b7ade47b3a3efa29769e4db1cc91aa2e88&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x0c792c39d206ae2d2a0df7b7db7d365c3067a137&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;残高の確認・マイニング&lt;/h2&gt;
下記のコマンドで残高を確認できますが、
まだマイニングを行なっていないため残高は0となっています。
```go
&lt; eth.getBalance(eth.accounts[0])
0
```
&amp;nbsp;
&lt;p&gt;ブロックチェーンのブロック数も0になっています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;blockNumber
&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;この状態では、
まだローカルのブロックチェーン上に一つのブロックも生成されて
いない状態なので、
マイニングでブロックを生成していきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; miner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
null
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;しばらくするとブロックが生成されてきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;  miner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;そして残高を確認してみると&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBalance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;195000000000000000000&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; web3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fromWei&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBalance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ether&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;195&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;195ETHが最初に作成したアカウントに
入金されています。
これでマイニング成功です。
※もちろん、これはテスト環境でのみ使える通貨で金銭的な価値はありません。&lt;/p&gt;
&lt;p&gt;ここまで準備ができたので最後は送金を行います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;送金&lt;/h2&gt;
&lt;p&gt;はじめにアカウントの残高を確認します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBalance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;195000000000000000000&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBalance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;残高を確認すると、
account1には195ETH、
account2には0ETHであることがわかります。&lt;/p&gt;
&lt;p&gt;また、送金を行うには
&lt;strong&gt;アカウントのロック解除が必要&lt;/strong&gt;ですので、
コマンドでロックを解除します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;personal&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;unlockAccount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accoutns&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token char&quot;&gt;&apos;password&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;それでは、
account1からaccount2に100ETHを送ってみます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sendTransaction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;from&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; to&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; web3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toWei&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ether&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;0xd404f7d67c0df7c8388db84efe9f1523f6134b18b5b615121ee236281e5db9d8&quot;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getTransaction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;0xd404f7d67c0df7c8388db84efe9f1523f6134b18b5b615121ee236281e5db9d8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
ReferenceError&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &apos;getTransaction&apos; is not defined
    at &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;anonymous&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;

&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getTransaction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;0xd404f7d67c0df7c8388db84efe9f1523f6134b18b5b615121ee236281e5db9d8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  blockHash&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x0000000000000000000000000000000000000000000000000000000000000000&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  blockNumber&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; null&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  from&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x73c935b7ade47b3a3efa29769e4db1cc91aa2e88&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  gas&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;90000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  gasPrice&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;18000000000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  hash&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0xd404f7d67c0df7c8388db84efe9f1523f6134b18b5b615121ee236281e5db9d8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  input&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  nonce&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  r&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0xc69cac899af8c2e914f3dda00379bd9c6df4478e465d96e5521042b0f6ce1120&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  s&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x677930addcbeb8299e0ff52a1e7fe79cd4db2b10714b3706faf08b8aa2e84b9e&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  to&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x0c792c39d206ae2d2a0df7b7db7d365c3067a137&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  transactionIndex&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  v&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0x1b&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  value&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100000000000000000000&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これで送金は完了しました。&lt;/p&gt;
&lt;p&gt;が、
残高を確認してみると
残高が移動していないように見えます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBalance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;195000000000000000000&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;0x0c792c39d206ae2d2a0df7b7db7d365c3067a137&quot;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBalance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これは、
送金をしたあとに&lt;strong&gt;マイニングで取引が&lt;/strong&gt;&lt;strong&gt;承認されていないためです。&lt;/strong&gt;
再度マイニングを行い、
残高を確認してみると100ETHがaccount2の残高に
反映されていることが確認できます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;go&quot;&gt;&lt;pre class=&quot;language-go&quot;&gt;&lt;code class=&quot;language-go&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; miner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
null
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; miner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBalance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;100000000000000000000&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; web3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fromWei&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBalance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;accounts&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token char&quot;&gt;&apos;ether&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これでイーサリアムの送金はできました！&lt;/p&gt;
&lt;p&gt;以上です！！&lt;/p&gt;
&lt;div class=&quot;cstmreba&quot;&gt;
&lt;div class=&quot;booklink-box&quot;&gt;
&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798151343/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;img style=&quot;border: none;&quot; src=&quot;https://images-fe.ssl-images-amazon.com/images/I/51ZDMhsrXWL._SL320_.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;booklink-info&quot;&gt;
&lt;div class=&quot;booklink-name&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798151343/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer&apos;s Books)&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;

&lt;div class=&quot;booklink-detail&quot;&gt;渡辺 篤,松本 雄太,西村 祥一,清水 俊也 翔泳社 2017-08-03&lt;/div&gt;
&lt;div class=&quot;booklink-link2&quot;&gt;
&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798151343/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B07416W2PY/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15008160%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-79-815134-2%252520%25257C%2525204-798-15134-2%252520%25257C%2525204-7981-5134-2%252520%25257C%2525204-79815-134-2%252520%25257C%2525204-798151-34-2%252520%25257C%2525204-7981513-4-2&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;7netで購入&lt;/a&gt;&lt;img src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;


&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171114_mac-ethereum-install/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Udemy でデザインのコースを受けてみた感想。Udemyで勉強するメリットまとめ]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2017/11/12/e-learning-udemy</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/12/e-learning-udemy</guid><pubDate>Sun, 12 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;日々のエンジニアリング中で、自分でアプリケーションを作っていて、デザインが思った通りいかず「くそっ!!」ってなってしまうのが最近の悩みなのですが、&lt;/p&gt;
&lt;p&gt;今になって「学生の時にもっと勉強しておけばよかった」など変えられないことにくよくよしたりしています。&lt;/p&gt;
&lt;p&gt;そんなことを言っていても過去は変えられないので興味のある分野の勉強をするべくUdemyに登録して、デザインのコースを購入してみました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;シリコンバレー発のオンライン学習サービスUdemy&lt;/strong&gt;
&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+68MF5&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www29.a8.net/svt/bgt?aid=171109178694&amp;amp;wid=004&amp;amp;eno=01&amp;amp;mid=s00000016735001048000&amp;amp;mc=1&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;250&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;実際に使ってみて学習効率の面だったり、場所を選ばずに勉強できる点でかなりよかったので紹介させていただきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;オンライン学習サービスUdemyとは&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171112_e-learning-udemy/Udemy-Top.png&quot; alt=&quot;Udemy-Top.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Udemyとは、&lt;strong&gt;シリコンバレー発のオンライン学習プラットフォームサービス&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;なんらかの技能やスキルを持った個人個人がコースを開講して、彼らの作成したコンテンツを元に学習できると言うサービスです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;世界中で17,000万人ののユーザーがいて、&lt;/strong&gt;&lt;strong&gt;講師の数も20000人以上、コース数も55,000以上のコースがある&lt;/strong&gt;&lt;strong&gt;世界規模のサービス&lt;/strong&gt;となっているようです。&lt;/p&gt;
&lt;p&gt;英語が苦手な方もいらっしゃると思いますが、日本語でのコンテンツも十分にあり、人気カテゴリであれば言語の問題を気にすることなく
学習できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;開講されているコースとしては、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ビジネスやITに関するコースが多く目につき、&lt;/strong&gt;&lt;strong&gt;プログラミング、webデザイン、マーケティングなどの&lt;/strong&gt;&lt;strong&gt;幅広い分野&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;でのコンテンツが充実しています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;今流行りの機械学習など最新技術のコンテンツ&lt;/strong&gt;も多くあるようです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私も実際にいくつかコースをみて見ましたが、個人的に興味のあるイーサリアムでのアプリ開発の講座など割と&lt;strong&gt;他では見られない分野の講座も&lt;/strong&gt;&lt;strong&gt;あったりと広いカバー率にも感心しました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;UdemyでWebデザインのコースを取ってみた感想&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;私は「未経験からプロのWebデザイナーになる！ 400レッスン以上の完全マスターコース」というコースを受講しました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;動画はタイトルの通り、未経験からプロのwebデザイナーとあるようにPhotoshopの使い方から、webの設計、HTML/CSSのコーディングなどデザイナーに必要な要素を一つ一つ丁寧に解説しているという感じでした。&lt;/p&gt;
&lt;p&gt;動画では、大事な部分を繰り返し伝えていたり、実習のための画像やpsdファイルなどの教材が用意されていたりして実際に自分でも作りながら勉強できて勉強のやりがいがありました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;動画を見ながら&lt;/p&gt;
&lt;p&gt;「へぇこういう使い方があるのか」&lt;/p&gt;
&lt;p&gt;というのがいくつもあり、新鮮な気づきを持ちながら学習を進めていけました。&lt;/p&gt;
&lt;p&gt;他にもいくつか印象に残っていた部分があるので以下にポイントを絞って書いていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;驚きのコスパ400レッスン以上コースが1200円&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;セール中でしたので1200円でこのコースを購入できました。&lt;/p&gt;
&lt;p&gt;正直このコンテンツ量で1200円は&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;かなりお得&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;です。
（定価は24,000円らしいです。。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうやらUdemyでは&lt;strong&gt;定期的にセール&lt;/strong&gt;をやっているらしく、定価が2万円以上の割と高価なコースもありますが、こちらのコースのように&lt;strong&gt;時期によって、&lt;/strong&gt;&lt;strong&gt;数千円で購入できてしまったり&lt;/strong&gt;もできるようです。&lt;/p&gt;
&lt;p&gt;セールについてはこちらにもう少し詳しく説明を載せています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/11/29/udemy-sale/&quot;&gt;=&gt; Udemyの料金は高くない。勉強したいコースを購入するならセールで買うのが狙い目！！&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;プロの操作や実際の作業の様子が見れる&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;独学の時って、実際&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;プロの人がどういう手順で操作しているか&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;とかって気になりますよね。&lt;/p&gt;
&lt;p&gt;実際に職場でやっていたりすると気にならないのですが、一人で勉強している場合知らず、知らずのうちに非効率な使い方をしていないか気になってしまいます。&lt;/p&gt;
&lt;p&gt;Udemyなら動画で実際のウィンドウの配置だったり、細かい作業の順番を見ながら勉強できるので、少しずつ上のような不安が解消されいきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;動画の視聴スピードを調整できる&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;これは動画で学ぶ利点の一つですね。他の本での勉強とは違う部分の一つでもあります。&lt;/p&gt;
&lt;p&gt;動画の&lt;strong&gt;視聴速度が調節できる&lt;/strong&gt;ので、すでにわかっていることだったり、一度一通りのレッスンの流れを確認したいというときにすごく役立ってくれます。&lt;/p&gt;
&lt;p&gt;最初の一周は通してみて、自分のわからないところだけピックアップして見たいという時ありますよね。&lt;/p&gt;
&lt;p&gt;そんなときに、2倍速で動画を見れれば半分の時間で最初の一周を終わらせることができます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;モバイルでも学習できる。&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;Udemyでは、モバイルのアプリもあり、PCのアカウントとコースを共有できるので、PCで購入したコースをモバイルでダウンロードして通勤中に動画をみて勉強するということができます。&lt;/p&gt;
&lt;p&gt;家でWiFiを使って携帯に動画をダウンロードしておいて、通勤中にそれを見るとしておけば余計な通信料もかかりません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;動画なので、集中力が持続する。記憶に残りやすい。&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;コース自体は、Photoshopの使い方やWebサイトを作成する際の注意点や進め方、HTML/CSSに関するものが丸っと入っている感じでしたが、&lt;/p&gt;
&lt;p&gt;動画の長さも5分程度で、集中力を保ったまま、動画を見終えることができます。
先に書いた視聴スピードも調整つすれば2分ちょっとで動画を見終えることもできます。&lt;/p&gt;
&lt;img src=&quot;https://www13.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+6MROH&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;気になる分野の学習のスタートに最適&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt;ここまで、Udemyの説明や特徴の紹介、実際に受講してみた感想をお伝えしてきましたがUdemyを活用することができるとみなさんの気になる分野で幸先の良いスタートが切れると思っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;「デザインの勉強してみたいけど何から始めればいいかわからない・・・」&lt;/p&gt;
&lt;p&gt;↓&lt;/p&gt;
&lt;p&gt;「未経験からプロのWebデザイナーになる！ 400レッスン以上の完全マスターコース」を受講する。&lt;/p&gt;
&lt;p&gt;↓&lt;/p&gt;
&lt;p&gt;「パッケージになっているから必要な分野を体系立てて勉強できる！5分ごとの動画で構成されているから少しずつ自分のペースで続けられる。」&lt;/p&gt;
&lt;p&gt;↓&lt;/p&gt;
&lt;p&gt;「webデザイナーに必要な要素が網羅的にわかるので、その中で自分の興味ある分野を深めたりさらにステップアップするまでの下地が作れる」&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;デザインに限らず、機械学習や語学、会計、ビジネス、マーケティングなど様々な分野のものが揃っているので、これから勉強を始めたいという方には良いサービスになっています。&lt;/p&gt;
&lt;p&gt;「こいう知識欲しいなぁ」と日常的に悶々している方はぜひ&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&amp;amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Udemy&lt;/a&gt;
&lt;img src=&quot;https://www11.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;をのぞいてみると良いと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ - Udemyをおすすめしたい人 -&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ここまで、ざーっとUdemyの良い部分を紹介してきましたが、悪い部分は今のところあまり感じていません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;強いていうと、Udemyはインストラクターに直接質問ができるそうですが、コースによっては&lt;strong&gt;質問しても返信が返ってこない&lt;/strong&gt;などがあるようです。&lt;/p&gt;
&lt;p&gt;そのコースで質問が返ってくるかは、コースを受講する前にコースのレビューを見たりすることで確認できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;最後にはなりますが、Udemyは自分できになる分野をどんどん勉強してスキルアップしていきたい人にはぜひオススメです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;すでに少し勉強した分野の理解度の確認&lt;/strong&gt;や&lt;strong&gt;全く新しい分野の勉強&lt;/strong&gt;のどちらにも使えるツールになっています。&lt;/p&gt;
&lt;p&gt;「気になっているけどどうやって勉強すればいいかわからない・・」&lt;/p&gt;
&lt;p&gt;「勉強したいことがあるけど近くに教えてくれる人がいない・・」&lt;/p&gt;
&lt;p&gt;というような方は一度サイトを見て頂けると良いのではと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;登録・購入はこちらのリンクから行えます。↓↓↓&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;「未経験からプロのWebデザイナーになる！ 400レッスン以上の完全マスターコース」がきになる方はこちらから&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2Fweb-design-master%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;未経験からプロのWebデザイナーになる！ 400レッスン以上の完全マスターコース&lt;/a&gt;
&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www10.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;他のコースが気になる方はこちらからどうぞ。&lt;/p&gt;
&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TVGOQ+BH6WX6+3L4M+68MF5&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;
&lt;img src=&quot;https://www29.a8.net/svt/bgt?aid=171109178694&amp;amp;wid=004&amp;amp;eno=01&amp;amp;mid=s00000016735001048000&amp;amp;mc=1&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;250&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;img src=&quot;https://www17.a8.net/0.gif?a8mat=2TVGOQ+BH6WX6+3L4M+68MF5&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171112_e-learning-udemy/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[– サーバの役割について – プログラミングを始める前に知っておいて欲しいWebサイトの仕組み]]></title><description><![CDATA[今回は前回の記事に引き続き
– ブラウザの役割について – プログラミングを始める前に知っておいて欲しいWeb…]]></description><link>https://ver-1-0.net/blog/2017/11/10/web-structure-about-server</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/10/web-structure-about-server</guid><pubDate>Fri, 10 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は前回の記事に引き続き
&lt;a href=&quot;https://ver-1-0.net/2017/11/07/web-structure-browser/&quot;&gt;– ブラウザの役割について – プログラミングを始める前に知っておいて欲しいWebサイトの仕組み&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;サーバ&lt;/h2&gt;
についてのお話です。
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171110_web-structure-about-server/Screen-Shot-2017-11-09-at-21.32.15.png&quot; alt=&quot;Screen-Shot-2017-11-09-at-21.32.15.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;この画像にもあるように、
私も最初のうちはこのサーバという
言葉に慣れませんでした。
（知った風な感じで使ってはいましたが）&lt;/p&gt;
&lt;p&gt;今回の記事ではサーバとはなんなのか。
また、Webサイトの中ではどういう役割があるのか
ということについて書いていきたいと思います。&lt;/p&gt;
&lt;p&gt;※アイキャッチ画像でいう右上部分の話です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;サーバーとは&lt;/h2&gt;
サーバーというのは、
役割の名前と考えて頂ければ良いと思います。
（クライアントが通信をする先と考えても良いです）
&lt;p&gt;おおかたの内部の構造は、
みなさんが&lt;strong&gt;個人でお使いのパソコンと同じ構造&lt;/strong&gt;で、
&lt;strong&gt;用途によって呼ばれ方が違う&lt;/strong&gt;ということです。&lt;/p&gt;
&lt;p&gt;またまた、役割によってさらに細分化されりします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;DBサーバ(ディービー・サーバー）&lt;/h3&gt;
MySQLやPostgresSQLがダウンロードされたデータベース用のサーバ
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;WEBサーバ(ウェブ・サーバー）&lt;/h3&gt;
外部からのアクセスを処理するサーバ
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;ファイルサーバ(ファイル・サーバー）&lt;/h3&gt;
ファイル共有の為に設置されているサーバ
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;皆さんお使いのパソコンがサーバと呼ばれないのは、
HTTP接続できるように外部に公開していたりするわけではないからで
皆さんが自信のサイトを外部に公開してしまえば、
それらはサーバと呼べてしまいます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;※実際には中規模〜大規模のサービスの
サーバは24時間365日稼働する必要があるので、
一般的に個人のパソコンより性能が高かったり
停電や落雷などに対応できるような作りになっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;サーバーのWebサイトでの役割&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;サーバーは、
Webサイトとしての役割です。
&lt;a href=&quot;https://ver-1-0.net/2017/11/07/web-structure-browser/&quot;&gt;前回&lt;/a&gt;の記事や&lt;a href=&quot;https://ver-1-0.net/2017/11/07/web-structure/&quot;&gt;前々回&lt;/a&gt;の記事で説明したように、
クライアントからリクエストを受け取って、HTMLを返却する役割があります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、サーバの構造は
下記のようになっており、
OSの中に、
WebサーバであるApacheやNginxがあり、
その中にデータベースとアプリケーションがあります。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171110_web-structure-about-server/サーバーの構造.png&quot; alt=&quot;サーバーの構造.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これらの構造が連動して、
レスポンス(HTML)を作ってリクエスト元に返します。&lt;/p&gt;
&lt;p&gt;流れとしては、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;外部のクライアント→Webサーバ→APP（PHPコード)→DB&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;→APP(PHPコード）がデータベースのデータなどを元にHTMLを返却&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;と言うようになります。
※データベースは介さない場合もあります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、
ちなみにプログラミングというのは、
ここの&lt;strong&gt;アプリケショーンを作り上げる、開発する作業&lt;/strong&gt;になります。
（javascriptなどのクライアント側のプログラミングはまた別ですが）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;図では、
PHPで作られたアプリケーションを想定していますが、
そのほかのRuby,Python,Java,Cなどでも
基本的な構造は同じです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;サーバーでHTMLを作成する&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;では少しコードも載せつつ説明していきます。
まずHTMLのコードを紹介します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTMLは&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;タグというもので構造化されたファイル&lt;/strong&gt;で&lt;/p&gt;
&lt;p&gt;例えば、
&lt;strong&gt;titleというタグで囲まれた部分のテキスト&lt;/strong&gt;が
そのページのタイトルになり、
ブラウザのタブ部分に表示されます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、
このHTMLファイルは
&lt;strong&gt;「Hello World!!」という文字列を表示するもの&lt;/strong&gt;でもあります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Hello World&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Hello World!!!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;実際に利用されているHTMLはこれより複雑ではありますが、
サーバーは簡単に言うとこのようなファイルを生成して、
クライアントに送信しています。&lt;/p&gt;
&lt;p&gt;しかし、これは静的なファイルと呼ばれ、
クライアントがリクエストする前に生成されているので
プログラムの出番はありません。&lt;/p&gt;
&lt;p&gt;実際のWebアプリケーションでは
動的にページを生成するので
下記のようなぺージになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Hello World&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token prolog&quot;&gt;&amp;lt;?php echo date(&apos;Y-m-d&apos;); ?&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Hello World!!! &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;下記のような行が追加されていますが、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Y-m-d&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token delimiter important&quot;&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;この &lt;?php ?&gt;で囲まれた部分が
&lt;strong&gt;実際のPHPのコード&lt;/strong&gt;になり、
この部分が実際にwebサイトにアクセスした瞬間の日付を表示してくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、
データベースと連携してページを表示する場合は、&lt;/p&gt;
&lt;?php ?&gt;この間にデータベースからデータを取得する
&lt;p&gt;ような処理を書いてHTMLの中に結果を埋め込みます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;サーバ側のエンジニアの主な仕事はこの
データベースからのデータ取得部分や、
取得したデータの整形・加工などをコードで実現することになります。&lt;/p&gt;
&lt;p&gt;フロント側のエンジニアと言うのも存在してそれらの
方々は、クライアント側で動くプログラムのコーディング
が主な仕事になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;最後に、
上にコードを貼りましたが、
&lt;strong&gt;このPHP部分を書いている時に実際の処理などを&lt;/strong&gt;
&lt;strong&gt; イメージできる&lt;/strong&gt;かどうかでプログラミングの理解度というのは
変わってきます。
&lt;strong&gt;（よりリアルにイメージできるようになるのでハラオチし易い）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;「こういうコードをかくとデータベースにもアクセスしてる」&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;などのようにデータの流れがイメージできているというのが
理想の状態になります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二次元エンジニア&lt;/strong&gt;にならないよう
コードの先をイメージしながらコーディングできるよう
になりましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;最後で、
やっとプログラミングらしいことが出てきましたが、
プログラミングというのは
システムの一部でしかないということは
わかりましたでしょうか。
（一応三部作のように記事を書いたので）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;プログラミングというのは、
アプリケーションを作るというWebシステム全体の
一部になり、
エンジニアというのは
そのほかの膨大な項目のものを意識しながら
コーディングする必要があります。&lt;/p&gt;
&lt;p&gt;プログラミングを勉強して
&lt;strong&gt;自分がイメージしたものを作ること&lt;/strong&gt;だったり
&lt;strong&gt;それを学び上達する過程や新しい技術を試してみる&lt;/strong&gt;と言うのはとても
楽しいものなので、
まだあまり触ったことのない人には
ぜひこの世界に踏み込んで頂きたいと思います。&lt;/p&gt;
&lt;p&gt;が、&lt;/p&gt;
&lt;p&gt;その道中
&lt;strong&gt;「ここはどこ？」「私はだれ？」状態
（今学んでいる内容がなんのためなのか、何に役たつのかわからない状態）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;に
陥ってしまうことを避ける為にも、
アイキャッチのようなwebアプリケーションの全体像をイメージしながら
プログラミング学習をすると
より楽しい学びの時間になるはずです。&lt;/p&gt;
&lt;p&gt;ぜひ、
立体的でよりリアルなイメージを持ちながら
プログラミングをしてみてください。&lt;/p&gt;
&lt;p&gt;では。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171110_web-structure-about-server/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[ブラウザの役割について。プログラミングを始める前に知っておいて欲しいWebサイトの仕組み]]></title><description><![CDATA[今回は、
プログラミングを始める前に
Web…]]></description><link>https://ver-1-0.net/blog/2017/11/07/web-structure-browser</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/07/web-structure-browser</guid><pubDate>Tue, 07 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は、
プログラミングを始める前に
Webサイトの仕組みを知ろうと言うことでまず一番
身近な&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ブラウザ&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;について説明します。
アイキャッチ画像で言うところの
クライアント側画像左下部分の話になります。
現在地を見失わないようにお願いします。&lt;/p&gt;
&lt;p&gt;仕組みを知ることの理由みたいなものは
↓↓↓ここに書いています。
&lt;a href=&quot;https://ver-1-0.net/2017/11/07/web-structure/&quot;&gt;プログラミングを始める前に知っておいて欲しいWebサイトの仕組み&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ブラウザと言うのは割と現在身近になっていて、
ポピュラーなブラウザを上げてみると
Google Chrome ,
Safari ,
Internet Explorer
などなどになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://gs.statcounter.com/browser-market-share&quot;&gt;StatCounter&lt;/a&gt;で
日本のシェアをみてみると、
Chrome, Safari, IEの順で利用されているようですね。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171107_web-structure-browser/StatCounter-browser-JP-monthly-201610-201710-bar-1024x576.png&quot; alt=&quot;StatCounter-browser-JP-monthly-201610-201710-bar-1024x576.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これらそれぞれのブラウザはもちろん
違う機能を備えていますが、
ある特定の共通の機能を備えていて、
それがブラウザたる所以になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;ブラウザはHTMLを解析して、人が読みやすい形に表示するツール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ブラウザはクライアント側のツールで
クライアントツールと呼ばれるように、
サーバから返却されるHTMLをみやすいように変換して、
表示をしてくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;試しにお使いのブラウザで右クリックを押して、
「ソースを表示する」のような選択肢をクリックすると
新たなウィンドウかタブが表示され、不等号などで区切られた
ファイルが表示されそれがHTMLファイルになります。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171107_web-structure-browser/Screen-Shot-2017-11-07-at-21.54.07.png&quot; alt=&quot;Screen-Shot-2017-11-07-at-21.54.07.png&quot;&gt;
&lt;p&gt;この一見読みづらい構文で書かれたものが、
HTMLファイルでそれらを見やすいように整形して
表示してくれるツールが&lt;strong&gt;ブラウザ&lt;/strong&gt;になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ブラウザと聞くと
「え、インターネットに接続して、
Googleで検索したり、
ネットサーフィンするものじゃないの？」
と言うようなイメージがあるかとは思いますが、
ブラウザはHTMLを解析して、
見やすい形に表示すると言う大きな機能を備えています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ちなみにブラウザは
普通の自分のパソコンのテキストファイルも表示することができます。&lt;/p&gt;
&lt;p&gt;気にになる方は、適当なテキストファイルを
ブラウザにドロップ&amp;#x26;ドラッグなどしてみてください。
（あまりにそのまま表示されるので感動は少ないと思いますが・・）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;ブラウザはHTTPプロトコルを利用してサーバにリクエストを送るツール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;みなさんがネットサーフィンする場合と言うのは、
Googleなどの検索サイトに
&lt;strong&gt;「ブラウザ 仕組み」&lt;/strong&gt;などのキーワードを入力して利用する場合が
多いはずです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;が、
本来的にブラウザは
先に説明したHTMLを解析するツールであると同時に、
&lt;strong&gt;サーバにこのURLのページをくださいとリクエストを送ったり、&lt;/strong&gt;
&lt;strong&gt; サーバからHTMLファイルを受け取ったりという機能&lt;/strong&gt;が
あります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;例えば、
みなさんがブラウザの上の方にあるテキストバーに
URLを打ち込んだ場合と言うのは、
Enterを押した瞬間に入力した「&lt;a href=&quot;http://ver-1-0.net%E3%80%8D%E3%81%AE%E3%82%88%E3%81%86%E3%81%AAURL%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88&quot;&gt;http://ver-1-0.net」のようなURLリクエスト&lt;/a&gt;
を送るという意味になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そこでそのリクエストを受けたサーバが、
URLに適したHTMLを返却し、
そのHTMLを受けたブラウザがそれを表示するというような
流れになっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、
各Webサイトのリンクやボタンを押すと、
画面が切り替わる場合がありますが、
その瞬間も同様にHTTPのリクエストを送っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ここまでは、
ブラウザが&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;HTMLファイルを解析して見やすく表示してくれていること&lt;/li&gt;
 	&lt;li&gt;URLを元にHTTPリクエストを送っていること&lt;/li&gt;
&lt;/ul&gt;
を説明しましたが、
ハラオチされましたでしょうか？
&lt;p&gt;&lt;strong&gt;HTTPとはなんぞや？&lt;/strong&gt;と言う疑問をもたれる方もいらっしゃる
とは思いますが、
ここでは、
Webサイトをシステム全体でとらえた場合に&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ブラウザと言う登場人物がいて、&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;そいつが&lt;/strong&gt;
&lt;strong&gt; 「Webページ（HTML）をください」と言うリクエストを送って&lt;/strong&gt;
&lt;strong&gt; サーバがHTMLを返却して&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;返ってきた&lt;strong&gt;HTMLを人が見やすいように表示する&lt;/strong&gt;と言うことだけ
覚えて頂ければ良いです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;HTTPなどの説明はまた別途しますので、
とりえあえこの記事はここまでとします。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171107_web-structure-browser/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[プログラミングを始める前に知っておいて欲しいWebサイトの仕組み]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2017/11/07/web-structure</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/07/web-structure</guid><pubDate>Tue, 07 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうも普段は、
割と中級者向けと言うか、
自分が試してみたことを発信していますが、
今回は時間ができたので、
プログラム初学者向けに発信していきたいと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;最近、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;プログラミングを最初に学ぶ際に一番はじめ&lt;/strong&gt;
&lt;strong&gt; に学んでおいておいた方が良いこと&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;を考えていました。
現状の答えとして、
一番最初に学んで欲しいことの一つとしての&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「Webサイトの仕組み」を理解すること&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;についてつらつらと書いていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これからそれなりの文字数を割いて説明しますが、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;プログラミングは立体的に理解することが重要&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;だと考えています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私がWebサイトの仕組みと言っているのはこの図のようなものを
イメージできれブラウザがリクエストを投げてからレスポンスが返され再度
ページを描画する仕組みが説明できるかということです。&lt;/p&gt;
&lt;p&gt;これが説明できる初学者とそうではない人で
理解度に大きな違いが出ると思うので、
この重要性についても語って行きます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171107_web-structure/Untitled-3-1024x714.png&quot; alt=&quot;Untitled-3-1024x714.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;プログラミング初学者はWebサイトの概要図を把握しよう&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;プログラミングは、
はたから見ているとひたすら画面に向かって&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文字をカタカタ打ち込んでいる作業&lt;/strong&gt;に&lt;/p&gt;
&lt;p&gt;見えますが、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;実際は違います。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;実際のところは、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;自分の作っているプログラムがどの場所（サーバ側かクラアント側）や&lt;/strong&gt;
&lt;strong&gt;どのタイミングで呼び出されるのかを想像しながら、&lt;/strong&gt;
開発を行なっています。&lt;/p&gt;
&lt;p&gt;それが実際に先に見せた画像のイメージになります。
（実際私が開発している際にここまで
カラフルな図は連想していないのですがw）&lt;/p&gt;
&lt;p&gt;少し大げさに言うと&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PHPのコードを触っている場合は、「今はサーバ側を触っている」&lt;/strong&gt;
&lt;strong&gt; Javascriptのコードを触っている場合は「今は画面側だな」&lt;/strong&gt;
&lt;strong&gt; と言うようなことを意識してコーディングしています。&lt;/strong&gt;
（まぁこの程度なら意識下で意識する感じになるかと思いますが・・）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;プログラミングをいきなり勉強するのもいいですが、
それと並行して瞬間的にこういったイメージができるようになるよう
意識して勉強していると、
かなりプログラミングへの理解が進むし、
ただ画面に文字を打ち込んでいく作業ではないと気づけるはずです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;プログラミング初学者は自分の居場所を見失いがち&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;システムの仕事をしていたり勉強していると
カタカナの言葉だったり、
アルファベットの略語がたくさん出てきてなんのことやら
全然わかりません。
（特に初学者にとってはより難しいはずです）&lt;/p&gt;
&lt;p&gt;わからないからググって見ても、
難しくとっつきにくい言葉で書かれた文章の説明に辟易しがちです。&lt;/p&gt;
&lt;p&gt;こういった状況が続くと自分が勉強していることはわかるけど、
なんかしっくりしないと言う状態になります。
PHPの文法とかはわかるけど
&lt;strong&gt;自分がどこにいるかわからない、他にどういう知識が必要がわからない&lt;/strong&gt;
という様になりがちです。&lt;/p&gt;
&lt;p&gt;また、
&lt;strong&gt;サーバー&lt;/strong&gt;と言う言葉一つとっても
&lt;strong&gt;「自分がブラウザからリクエストを送った時にhtmlを返してくれるコンピュータ」&lt;/strong&gt;
のことだと実際の構成をイメージとして理解しているのと&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;blockquote&gt;サーバとは、ネットワーク上のコンピュータの中で、
他のコンピュータ（クライアント）から要求や指示を受け、
情報や処理結果を返す役割を持つコンピュータやソフトウェアのこと。&lt;/blockquote&gt;
&lt;a href=&quot;https://it-trend.jp/words/server&quot;&gt;サーバとは - 意味の解説｜ITトレンドのIT用語集&lt;/a&gt;より引用
&lt;p&gt;と字面で説明されるのでは理解度が違います。
（ここでは、説明が悪いと言っているのではなく、学習の態度として、字面で覚えるのではなく、
実際の処理のフローなどと結びつけて想像力を働かせながらが良いと言うことです。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;はたまた
「PHPとjavascriptの違い」を説明する場合に、
&lt;strong&gt;jsはクライアント側で動いてユーザのアクションに対して表示を変化させるプログラム&lt;/strong&gt;で、
&lt;strong&gt;PHPはサーバ側でHTTPリクエストをさばいて、HTMLなどレスポンスを生成するためのプログラム&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;と言う本質的な説明ができるようになるには、
上に載せた画像のようなシステム全体の地図が頭に描けていることが重要です。&lt;/p&gt;
&lt;p&gt;さらに言うと、
自分がPOST送信と言う言葉やGET送信と言う言葉を聞いた時に、
&lt;strong&gt;あの部分で使う技術だと勘が聞くか聞かない&lt;/strong&gt;のでは、
物事の習得度合いや、理解度がだいぶ違ってきます。&lt;/p&gt;
&lt;p&gt;自分の頭にWebサイトの全体図があると言うことは、
ある意味初学者にとっての地図になります。&lt;/p&gt;
&lt;p&gt;例えば自分が今PHPのプログラミングを勉強しているのであれば
「サーバサイドを勉強している」
「UNIXコマンドを勉強しているのであれば、サーバー側のOS部分を勉強している」
と言うことがWebサイトの全体像を知っていることによって
情報を整理して習得できたり、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;システム全体を立体的でよりリアル&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;に理解できることになります。&lt;/p&gt;
&lt;p&gt;初学者の方は、
プログラミングの自習を続けつつも、
常に上の画像の自分はどこにいるのかということを
意識して勉強すべきです&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;プログラミングは必要に応じて自習が必要&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;私は一般的に「プログラミングを勉強したい」と言う人は
「アプリケーションを作りたい」と言う人だと理解しています。&lt;/p&gt;
&lt;p&gt;が、
&lt;strong&gt;プログラミングを勉強した”だけ”&lt;/strong&gt;では、
悲しいことにアプリケーション開発に十分な知識を持っている
とは言えません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;システム開発には、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gitでのソース管理の知識やHTML、CSS、配色、
&lt;/strong&gt;&lt;strong&gt;レイアウトなどのフロントエンドの技術。&lt;/strong&gt;
&lt;strong&gt; 設計プロセスやプロジェクトの進め方に関する理解、&lt;/strong&gt;
&lt;strong&gt; データベースのSQLなどの知識&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;などなど様々な技術があります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;その中でプログラミング（さらに言うと”プログラミング言語”）の知識しかない
エンジニアと言うのはチームとしても個人としてもシステム開発を
行う上では大きな障害になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;覚えるべきことは多いですが、
それら全てを理解しているエンジニアと言うのはかなり希少で
ほとんどのエンジニアには自分が作りたいものや高めたいスキルによって
情報を取捨選択して自習する態度が求められます。&lt;/p&gt;
&lt;p&gt;それらのスキルを高めるためたり知識を得たりするのには
どう学ぶかと言うのは自分で決めて行かなければなりません。&lt;/p&gt;
&lt;p&gt;その際にも、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;自分にはどの部分のスキルが足りないのか知らないのかと言う&lt;/strong&gt;
&lt;strong&gt; ことが地図を持っているだけで明白になります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;自分の目的地を選択するのに必ず地図は必要です。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;早いうちにシステムの全貌を意識しながら学習を進めて行きましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;色々と
自分の考えていることを書きましたが
一番良いたいのは、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どのエンジニアも
&lt;strong&gt;自分のPCの繋がっている先のサーバやサーバ内で動いているデータベース&lt;/strong&gt;
&lt;strong&gt; などを全体像を意識しながら日々の作業を行なっている&lt;/strong&gt;ということで、
プログラミング初学者にもそういった
&lt;strong&gt;プログラミングを立体的に理解する姿勢&lt;/strong&gt;が求められると言うことです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;個人的な意見ではありますが、
エンジニアにはこれらのヴァーチャルな物体をイメージしながら
システムを開発をしていく想像力が求められます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;プログラミング初学者は、
PHP入門やJava入門のような技術書から学び、
&lt;strong&gt;プログラミングが画面にひたすら文字を打ち続ける作業に思えて&lt;/strong&gt;
&lt;strong&gt; 挫折してしまう&lt;/strong&gt;ことがあるように思いますが、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;システム全体のことを考えながら
自分が打っているコードがそれをどのように操作しているか
考えながら勉強ができると感動度や理解度
もだいぶ違ってくるはずです。&lt;/p&gt;
&lt;p&gt;今回は自分の頭にシステムの全体像の地図を持つことの
重要性を書きましたが、
次回以降はちゃんと仕組みについても説明してこうと思います。&lt;/p&gt;
&lt;p&gt;では&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171107_web-structure/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Google AnalyticsからPV順に記事を取得するその② - サイドバーに表示-]]></title><description><![CDATA[前回の記事では、
Google AnalyticsからPV順に記事を取得するその①
PV…]]></description><link>https://ver-1-0.net/blog/2017/11/05/ga-fetch-order-by-pv-2</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/05/ga-fetch-order-by-pv-2</guid><pubDate>Sun, 05 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前回の記事では、
&lt;a href=&quot;https://ver-1-0.net/2017/11/04/ga-fetch-order-by-pv-1/&quot;&gt;Google AnalyticsからPV順に記事を取得するその①&lt;/a&gt;
PV数で人気記事の取得までできました。&lt;/p&gt;
&lt;p&gt;今回はそれを実際にサイドバーに表示できるようにするまで、
やっていきます。
 &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;記事のタイトルを取得する - 導入 -&lt;/h2&gt;
前回は、
記事のURLしか取得できていなかったので、
URLを元に記事のタイトルを取得していきます。
(Google Analyticsから直接記事タイトルをとってくる方法もあるけど、
タイトルを変更したり、
サイトタイトルを変更すると別ページと認識されてしまうので、
URLで判断するようにしました。)
&lt;p&gt;完成イメージはこのような感じです。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171105_ga-fetch-order-by-pv-2/ScreenShot-1.png&quot; alt=&quot;ScreenShot-1.png&quot;&gt;
&lt;p&gt;この記事が終わるころには、
自分のブログで人気記事ランキングを表示できるようになっている
はずです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;記事のタイトルを取得する - 実装 -&lt;/h2&gt;
Wordpressの投稿は、
&lt;strong&gt;wp_posts&lt;/strong&gt;というテーブルに格納されていて、
そのテーブルのpost_nameという絡むにURLの情報が入っています。
&lt;p&gt;&lt;strong&gt;この情報とGoogle Analyticsから取ってきたURLをぶつけて
記事情報を表示します。&lt;/strong&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171105_ga-fetch-order-by-pv-2/Screen-Shot-2017-11-05-at-22.07.43.png&quot; alt=&quot;Screen-Shot-2017-11-05-at-22.07.43.png&quot;&gt;
&lt;p&gt;前回の記事とはだいぶファイルの感じが変わりますが、&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;classes/GoogleAnalyticsService.php ・・・ 主にGoogleAnalyticsとの通信を行うクラス&lt;/li&gt;
 	&lt;li&gt;classes/WPDatabaseService.php ・・・ WordpressのDBとのやりとりするクラス&lt;/li&gt;
 	&lt;li&gt;ga-popular-rankings.php ・・・ ページの表示を行ったりするメインの部分&lt;/li&gt;
&lt;/ul&gt;
という感じになります。
&lt;p&gt;GoogleAnalyticsService.phpは前回で、
GoogleAnalyticsからPageViewなどの情報を取得してきた部分になりますが、今回はクラスとして分割して配置しています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;Class&lt;/span&gt; &lt;span class=&quot;token class-name-definition class-name&quot;&gt;GoogleAnalyticsService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$view_id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$display_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reports&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;__construct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$keyfile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$view_id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$display_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Client&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setApplicationName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;GoogleAnalyticsService&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setAuthConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$keyfile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setScopes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;https://www.googleapis.com/auth/analytics.readonly&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;analytics&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;view_id&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$view_id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;display_count&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$display_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;report_request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// Create the DateRange object.&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$dateRange&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_DateRange&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$dateRange&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setStartDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;90daysAgo&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$dateRange&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setEndDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;today&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Create the Metrics object.&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$sessions&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_Metric&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$sessions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setExpression&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;ga:pageviews&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$sessions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setAlias&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;pv&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Create the Dimension object.&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$dimention&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_Dimension&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$dimention&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;ga:pagePathLevel4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Filter&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_DimensionFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setDimensionName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;ga:pagePathLevel4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setNot&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setOperator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;IN_LIST&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setExpressions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token variable&quot;&gt;$filters&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_DimensionFilterClause&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$filters&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setFilters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// OrderBy&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_OrderBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setFieldName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;ga:pageviews&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setOrderType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;VALUE&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setSortOrder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;DESCENDING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Create the ReportRequest object.&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_ReportRequest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setViewId&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;view_id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setDateRanges&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$dateRange&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setMetrics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$sessions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setDimensions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$dimention&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setDimensionFilterClauses&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$filters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setOrderBys&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token variable&quot;&gt;$body&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_GetReportsRequest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$body&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setReportRequests&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;reports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;analytics&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;reports&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;batchGet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$body&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;fetch_result_as_array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reportIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reportIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;reports&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reportIndex&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token variable&quot;&gt;$report&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;reports&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reportIndex&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token variable&quot;&gt;$rows&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$report&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getRows&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

            &lt;span class=&quot;token variable&quot;&gt;$display_count&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;display_count&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$rows&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$rows&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;display_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rowIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rowIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$display_count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rowIndex&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$row&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rows&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rowIndex&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$dimensions&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$row&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getDimensions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token variable&quot;&gt;$metrics&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$row&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getMetrics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

                &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
                    &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;pageview&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$metrics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getValues&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;url&apos;&lt;/span&gt;      &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$dimensions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;変更点はメソッド名が代わり、
printResultsメソッドがfetch_result_as_arrayのように
配列を返す関数に変わったという部分になります。&lt;/p&gt;
&lt;p&gt;参考:&lt;a href=&quot;https://ver-1-0.net/2017/11/04/ga-fetch-order-by-pv-1/&quot;&gt;Google AnalyticsからPV順に記事を取得するその①&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、
メインのファイルであるga-popular-rankings.php
はそれぞれのクラスを呼ぶ感じでスッキリしております 。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/*
* Plugin Name: Google Analytics Popular Rankings
*/&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;require_once&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;__DIR__&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/vendor/autoload.php&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;require_once&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;__DIR__&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/classes/GoogleAnalyticsService.php&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;require_once&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;__DIR__&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/classes/WPDatabaseService.php&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;ga_popular_rankings&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$KEY_FILE_LOCATION&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;__DIR__&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/service-account-credentials.json&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$VIEW_ID&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;&amp;lt;REPLACE YOUR VIEW ID&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;GoogleAnalyticsService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$KEY_FILE_LOCATION&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$VIEW_ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;report_request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetch_result_as_array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token variable&quot;&gt;$db&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;WPDatabaseService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$pop_posts&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$db&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetch_post_data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;pop_posts_render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$pop_posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;pop_posts_render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$pop_posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&amp;lt;h2 class=&apos;widget-title&apos;&gt;人気記事&amp;lt;/h2&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&amp;lt;ul style=&apos;list-style:none;padding-left:0px;&apos;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$pop_posts&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&amp;lt;li&gt;&amp;lt;a href=&apos;&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;url&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&apos;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;title&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&amp;lt;/a&gt;&amp;lt;/li&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&amp;lt;/ul&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;add_filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;widget_text&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;do_shortcode&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;add_shortcode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ga_popular_rankings&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ga_popular_rankings&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;上のコードのこの部分で、
GoogleAnalayticsのPageView順を配列として取得していますので、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;GoogleAnalyticsService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$KEY_FILE_LOCATION&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$VIEW_ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;report_request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetch_result_as_array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;あとは、
WPDatabaseService.phpで取得した各要素のURLを
元に記事のタイトルを取得します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;WPDatabaseService.php&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;Class&lt;/span&gt; &lt;span class=&quot;token class-name-definition class-name&quot;&gt;WPDatabaseService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;__construct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;posts&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$posts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;get_tilte_by_path_name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$post_name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$wpdb&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$query&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$wpdb&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;prepare&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;select post_title from wp_posts where post_name = %s&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$post_name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$wpdb&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get_var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$query&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;fetch_post_data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;posts&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
           &lt;span class=&quot;token variable&quot;&gt;$path_name&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;urlencode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mb_convert_encoding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;str_replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;url&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;UTF-8&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;auto&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
           &lt;span class=&quot;token variable&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;title&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get_tilte_by_path_name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$path_name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
           &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここでは、fetch_post_dataで配列の各要素を
get_tilte_by_path_nameメソッドに渡して、
URLごとの記事タイトルを取得しています。
先のga-popular-rankings.phpを見てもわかるように
ここで最終的にページビュー順人気記事ランキングの情報が出揃います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;ページビュー順人気記事ランキングを表示する&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は、$wpdbというWordPress固有の変数も使っているので、
先ほど紹介したファイル群を[WordPress Root]/wp-content/plugins/の
下に配置します。&lt;/p&gt;
&lt;p&gt;その時に重要なのがga-popular-rankings.phpの記述で&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/*
* Plugin Name: Google Analytics Popular Rankings
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;の部分になります。&lt;/p&gt;
&lt;p&gt; 
WordPressのインストール済みプラグインをみると、
このPlugin Nameの文字でインストール済みプラグインに表示されます。&lt;/p&gt;
&lt;p&gt;ここでPluginの一覧に表示されてしまえば、
あとは簡単です。
Pluginを有効化したあとにウィジェットから「テキスト」を選択して
サイドバーの任意の場所に追加し、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;ga_popular_rankings&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とwidgetの本体部分に書き込んでしまえば、
先に紹介した人気記事のランキングがサイドバーに表示されます。&lt;/p&gt;
&lt;p&gt;ちなみに、
ウィジェットでショートコードを使用するには、
以下の記載が必要なので、ga-popular-rankings.php
に登録を行っています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token function&quot;&gt;add_filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;widget_text&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;do_shortcode&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;add_shortcode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ga_popular_rankings&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ga_popular_rankings&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回ここまでで、
一応自分のサイトに人気記事のランキンがまでは表示できます。&lt;/p&gt;
&lt;p&gt;が、&lt;/p&gt;
&lt;p&gt;もう少し興味のある方は、
「表示する件数を設定できるようにしたい！！」
「ショートコードとしてサービスを提供しているけどウィジェットとして
提供したい！！」
というようになるかと思います。&lt;/p&gt;
&lt;p&gt;私もその一人で現在これに関連したプラグインを開発して
申請中です。&lt;/p&gt;
&lt;p&gt;WordPressのプラグインには悩まされた苦い思い出が
多くあるのですが、
自分で作ってみると愛着が湧いてきてなかなか面白いです。&lt;/p&gt;
&lt;p&gt;プラグインとして使ってみると、
自分で設定画面を作れたりWidgetとしてサービスを提供できたりして
面白いです。&lt;/p&gt;
&lt;p&gt;興味を持った方には、
ネットにも情報が転がっているのぜひ自分で作ってみると
良いと思います。&lt;/p&gt;
&lt;p&gt;今回のコードはここにありますので、
ご自由にご確認ください&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/ga-popular-rankings&quot;&gt;&lt;a href=&quot;https://github.com/version-1/ga-popular-rankings&quot;&gt;https://github.com/version-1/ga-popular-rankings&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;長くなりましたが、
この記事はここまでにします。
では。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171105_ga-fetch-order-by-pv-2/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Google AnalyticsからPV順に記事を取得するその①]]></title><description><![CDATA[唐突ですが、
だいたいどのブログにも人気記事やよく読まれている記事
ってウィジェットなどにしてまとめて載っけてありますよね。 ただ、人気の記事ってなんだ？っていう話があったりします。
( qiitaとかだといいねの順に並んでる。）
私のブログでも人気記事をwordpress…]]></description><link>https://ver-1-0.net/blog/2017/11/04/ga-fetch-order-by-pv-1</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/11/04/ga-fetch-order-by-pv-1</guid><pubDate>Sat, 04 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;唐突ですが、
だいたいどのブログにも人気記事やよく読まれている記事
ってウィジェットなどにしてまとめて載っけてありますよね。&lt;/p&gt;
&lt;p&gt;ただ、人気の記事ってなんだ？っていう話があったりします。
( qiitaとかだといいねの順に並んでる。）
私のブログでも人気記事をwordpressプラグインを使っていくつか
サイドバーに表示していました。&lt;/p&gt;
&lt;p&gt;が、
そのプラグインが出した記事のリストを見てみると
普段私がGoogle Analyticsで確認しているPVのランキングと
だいぶ違っています。&lt;/p&gt;
&lt;p&gt;そこで、
ちょっとプラグインを調べてみるとプラグイン独自のデータを
データベースに保持して、
その結果から人気記事を取得してきているようでした。&lt;/p&gt;
&lt;p&gt;え正直、
&lt;strong&gt;「これ、自分からのアクセスとかも含まれるのでは・・・」&lt;/strong&gt;
という感想を持ちましたし、
そもそもいちいちDatabaseにアクセスしていて重そうとも
思いました。
ということで、
Google AnalyticsのPVを取得してきて人気記事を調べたいなと思ったので、
Google AnalyticsのAPIを使ってPV順に記事を取得できる
方法を調べて見ました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Google Analytics APIを使うための設定&lt;/h2&gt;
&lt;p&gt;では、早速APIからデータを取って来よう！！
という前にいくつか設定が必要なようです。&lt;/p&gt;
&lt;p&gt;詳しくはこちらについて書いてありますが
&lt;a href=&quot;https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-php?hl=ja&quot;&gt;&lt;a href=&quot;https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-php?hl=ja&quot;&gt;https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-php?hl=ja&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;必要な手順を解説していきます。&lt;/p&gt;
&lt;h3&gt;サービスアカウントの作成&lt;/h3&gt;
&lt;p&gt;まず、
サービスアカウントを作成していきます。
リンク先にあるように&lt;a href=&quot;https://console.developers.google.com/start/api?id=analytics&amp;amp;credential=client_key&amp;amp;hl=ja&quot;&gt;セットアップツール&lt;/a&gt;を利用してアカウントを作成していきます。&lt;/p&gt;
&lt;p&gt;最初の画面はそのまま続行としておきましょう。
そのままプロジェクトを作成してしまいます。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171104_ga-fetch-order-by-pv-1/Screen-Shot-2017-11-04-at-21.32.52.png&quot; alt=&quot;Screen-Shot-2017-11-04-at-21.32.52.png&quot;&gt;
&lt;p&gt;次の画面でAPIを有効化します。
画面ではすでにAPIが有効になっていたようです。
そのまま認証情報に進みます。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171104_ga-fetch-order-by-pv-1/Screen-Shot-2017-11-04-at-21.33.02.png&quot; alt=&quot;Screen-Shot-2017-11-04-at-21.33.02.png&quot;&gt;
&lt;p&gt;次の画面で認証情報を追加しますが、
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171104_ga-fetch-order-by-pv-1/Screen-Shot-2017-11-04-at-21.33.27.png&quot; alt=&quot;Screen-Shot-2017-11-04-at-21.33.27.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;サービスアカウント名は任意なので、
好きな名前を使いましょう。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171104_ga-fetch-order-by-pv-1/Screen-Shot-2017-11-04-at-21.33.50-1024x649.png&quot; alt=&quot;Screen-Shot-2017-11-04-at-21.33.50-1024x649.png&quot;&gt;
&lt;p&gt;この画面で「サービスアカウントID」は後の手順で使用するので保管しておきます。
次へをクリックすると
サービスアカウントの鍵が生成されてダウンロードされます。
大事な鍵なので大切に保管しておきましょう。&lt;/p&gt;
&lt;h3&gt;Google Analyticsヘのユーザ追加&lt;/h3&gt;
&lt;p&gt;これを忘れるとAPIでアクセスした場合に、
権限がないですと怒られるので確実に行いましょう。&lt;/p&gt;
&lt;p&gt;Google Analyticsにログインして、
「左下の歯車のアイコンをクリック」→「ユーザ管理」
で先の「サービスアカウントID」（メールアドレスのようなやつ）を使ってユーザを作成します。
権限は最低限表示と分析だけは付加してあげましょう。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/11/20171104_ga-fetch-order-by-pv-1/google-analytics-add-user-1024x443.png&quot; alt=&quot;google-analytics-add-user-1024x443.png&quot;&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Analytics APIを使ってページごとのPVを取得&lt;/h2&gt;
&lt;p&gt;まずは、
composerを使ってGoogle Client APIライブラリを取得します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; require google/apiclient:^2.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ライブラリがインストールできたら、
下記のreport.phpファイルを作成します。&lt;/p&gt;
&lt;p&gt;まず気をつけるのは、
自分のブログのView IDで&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$VIEW_ID&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&amp;lt; REPLACE YOUR VIEW ID&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;の部分を書き換えることです。&lt;/p&gt;
&lt;p&gt;自分のView IDは下記ツールで調べるか、
&lt;a href=&quot;https://ga-dev-tools.appspot.com/account-explorer/?hl=ja&quot;&gt;Account Exploer&lt;/a&gt;
Google Analyticsから確認できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、先の手順で取得した鍵ファイル（json)を下記のサンプルコード
report.phpと同じ階層のディレクトリにおき、
名前を「service-account-credentials.json」とします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;report.php&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;require_once&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;__DIR__&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/vendor/autoload.php&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;initializeAnalytics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getReport&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;printResults&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$argv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;initializeAnalytics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$KEY_FILE_LOCATION&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;__DIR__&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/service-account-credentials.json&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Client&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setApplicationName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;Hello Analytics Reporting&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setAuthConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$KEY_FILE_LOCATION&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setScopes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;https://www.googleapis.com/auth/analytics.readonly&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;getReport&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// Replace with your view ID, for example XXXX.&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$VIEW_ID&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&amp;lt; REPLACE YOUR VIEW ID&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// Create the DateRange object.&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$dateRange&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_DateRange&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$dateRange&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setStartDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;90daysAgo&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$dateRange&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setEndDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;today&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


    &lt;span class=&quot;token comment&quot;&gt;// Create the Metrics object.&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$sessions&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_Metric&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$sessions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setExpression&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;ga:pageviews&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$sessions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setAlias&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;pv&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// Create the Dimension object.&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$dimention&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_Dimension&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$dimention&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;ga:pagePath&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// Filter&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_DimensionFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setDimensionName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;ga:pagePathLevel4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setNot&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setOperator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;IN_LIST&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setExpressions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;/profile/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


    &lt;span class=&quot;token variable&quot;&gt;$filters&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_DimensionFilterClause&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$filters&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setFilters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// OrderBy&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_OrderBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setFieldName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;ga:pageviews&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setOrderType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;VALUE&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setSortOrder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;DESCENDING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// Create the ReportRequest object.&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_ReportRequest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setViewId&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$VIEW_ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setDateRanges&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$dateRange&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setMetrics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$sessions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setDimensions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$dimention&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setDimensionFilterClauses&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$filters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setOrderBys&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$orderby&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token variable&quot;&gt;$body&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Google_Service_AnalyticsReporting_GetReportsRequest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$body&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setReportRequests&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$analytics&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;reports&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;batchGet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$body&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;printResults&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$reports&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reportIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reportIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$reports&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reportIndex&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$report&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reports&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$reportIndex&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$header&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$report&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getColumnHeader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$dimensionHeaders&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$header&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getDimensions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$metricHeaders&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$header&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getMetricHeader&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getMetricHeaderEntries&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$rows&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$report&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getRows&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rowIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rowIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rowIndex&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$row&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rows&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$rowIndex&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$dimensions&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$row&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getDimensions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token variable&quot;&gt;$metrics&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$row&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getMetrics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$dimensionHeaders&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$dimensions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$dimensionHeaders&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;: &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$dimensions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

            &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$j&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$j&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$metricHeaders&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$j&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$metrics&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$j&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$entry&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$metricHeaders&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$j&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$values&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$metrics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$j&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;Metric type: &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$entry&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;\n&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$valueIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$valueIndex&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getValues&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$valueIndex&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getValues&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$valueIndex&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$entry&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;: &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;実行コマンドは下記になります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;php report.php &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;実行結果&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$php&lt;/span&gt; report.php &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;
ga:pagePath: /2017/02/13/kotlin-spring-boot/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;447&lt;/span&gt;
ga:pagePath: /2017/04/24/cakephp3-でapiを作成-jsonレスンポンス/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;401&lt;/span&gt;
ga:pagePath: /2017/04/28/node-jsビットコインの価格をリアルタイムにdbに保存す/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;293&lt;/span&gt;
ga:pagePath: /2017/06/05/kotlin-spring-boot-でログイン認証を実装/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;194&lt;/span&gt;
ga:pagePath: /2017/01/29/【cakephp3】cakephp3でsqlをログに吐き出す方法/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;157&lt;/span&gt;
ga:pagePath: /2017/02/08/kotlin-db-connect-by-exposed/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;134&lt;/span&gt;
ga:pagePath: /2017/02/05/kotlin-http-request-khttp/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;127&lt;/span&gt;
ga:pagePath: /2017/02/08/bootsnote/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;99&lt;/span&gt;
ga:pagePath: /2017/01/04/cakephpで部分テンプレート/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;96&lt;/span&gt;
ga:pagePath: /2017/08/09/laravelにvue-jsを導入してみる。-bladeの-とコンフリクトする/
Metric type: INTEGER
pv: &lt;span class=&quot;token number&quot;&gt;73&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;PV上位10位以内の記事とそのPVが取得できています。
(今回の実行結果には引数で10を指定しているため10件取得が期待値)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまでで、
無事PVランキングは取得できました。
引数の数を大きくすれば大きくするほど取得できるランキングの件数を
取得できるようにサンプルコードを作成しています。&lt;/p&gt;
&lt;p&gt;実際にやってみた感想としては、
コードを書くまでの最初の設定部分のところで
時間を取られました。。
私の場合は、サービスアカウントをGoogle Analyticsのアカウントとして
作成する部分に気づかず、
何度APIにリクエストを送っても権限がないと怒られてしまっていました。
意外と気づかないの注意されると良いと思います。&lt;/p&gt;
&lt;p&gt;プログラムの流れとしては、
Metrics（SQLでいうカラムのようなイメージ）
でページビューやセッション、ユーザ数などが指定でき
DimensionでMetricsをそれぞれ日付ごとにまとめるのか？ページごとにまとめるのか？
と行った具合で設定を行い、
それらをリクエストのパラメータとしてデータを取得してくる
という感じです。
（FilterやOrderはそのままの部分で今回の流れだと枝葉なのであまり説明はしません）&lt;/p&gt;
&lt;p&gt;今回はPHPコードでデータを取得しただけですが、
これをもう少し発展させて実際にWordPressページなどでも使えるように
していきたいです！！&lt;/p&gt;
&lt;p&gt;とりあえず今回はここまでで。&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/11/20171104_ga-fetch-order-by-pv-1/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[NodeJS + PhatomJSでブログの全ページのスクショを取得する。（Sitemapから）]]></title><description><![CDATA[2017年10月29日追記 このスクリプトを動かすとPVとしてカウントされてしまうことが
判明しました汗
見事にその時間のPVが跳ね上がり直帰率100%。。。
（IP…]]></description><link>https://ver-1-0.net/blog/2017/10/29/node-phantom-take-scsho</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/29/node-phantom-take-scsho</guid><pubDate>Sun, 29 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;2017年10月29日追記&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;このスクリプトを動かすとPVとしてカウントされてしまうことが
判明しました汗
見事にその時間のPVが跳ね上がり直帰率100%。。。
（IPでフィルタかけてるので大丈夫だと思ったのですが、なぜかダメでした。。）&lt;/p&gt;
&lt;p&gt;もし、このスクリプトを動かす場合は十分に気をつけて
開発環境のサイトに対して実行したり（アクセスURLのドメインをローカルホストに置換したり）、
使用してください。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;どうも、
最近コツコツブログの記事を増やしてきているのですが、
一年弱でだいたい80ページくらいのブログになって来ました。&lt;/p&gt;
&lt;p&gt;年内100記事が目標なので、
それを目指して着々と更新を続けていく予定です。
（本当はもっとペースあげたい・・）&lt;/p&gt;
&lt;p&gt;と、
そんなところでコツコツと記事を
変えていると途中でCSSを変更したくなってくる時が
まあまああります。&lt;/p&gt;
&lt;p&gt;変更するのは良いのですが、
それが全記事にどれくらい影響するかって中々確認しづらいですよね。&lt;/p&gt;
&lt;p&gt;そんな時に全ページのキャプチャを取って来て
確認できたら楽だなぁと考えて。
&lt;strong&gt;自動でスクショを取ってくるスクリプトを作ろう！！&lt;/strong&gt;
ということになりました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;処理の流れの説明 - sitemapperとphantomjsを使う -&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;早速手順ですが、
NodeJSと自動化テスト界隈で話題に上るPhantomJSを組み合わせて
作って行きます。&lt;/p&gt;
&lt;p&gt;処理の流れとしては、&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;sitemapを解析して、ブログの全URLを取得。&lt;/li&gt;
 	&lt;li&gt;取得したURL一つ一つに対してPhatomJSを使ってJSを取得していく。&lt;/li&gt;
&lt;/ol&gt;
&amp;nbsp;
&lt;p&gt;で、
1.のsitemapの解析は、
&lt;a href=&quot;https://github.com/hawaiianchimp/sitemapper&quot;&gt;sitemappter&lt;/a&gt;というモジュールを使用し、&lt;/p&gt;
&lt;p&gt;また2のPhantomJSでスクショをとる部分
は&lt;a href=&quot;https://github.com/Medium/phantomjs&quot;&gt;phantomjs&lt;/a&gt;というモジュールを使用します。&lt;/p&gt;
&lt;p&gt;これ、ふざけているのではなくNodeJS+PhantomJSの
モジュールはいくつかあるのでこういう説明にしています。。&lt;/p&gt;
&lt;p&gt;とりあえず簡単に環境だけ作ってしまいましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まずはディレクトリの作成&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; wp-scshots
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; wp-scshots
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; output &lt;span class=&quot;token comment&quot;&gt;# スクショの出力先&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;次に必要なモジュールをnpmでインストール&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; init
&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--save&lt;/span&gt; sitemapper phantomjs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ここまでのPackage.jsonを残しておきます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;wp-scshots&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;1.0.0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;description&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;main&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;index.js&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;echo \&quot;Error: no test specified\&quot; &amp;amp;&amp;amp; exit 1&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;keywords&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;license&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ISC&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;dependencies&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;phantomjs&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^2.1.7&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;sitemapper&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^2.1.13&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;実装&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;前のセクションで、モジュールのインストールはできたので、
実際に実装を行なっていきます。&lt;/p&gt;
&lt;p&gt;まずは、
sitemapからURLを取得する部分&lt;/p&gt;
&lt;p&gt;index.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; sitemap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Sitemapper&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
sitemap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;https://ver-1-0.net/sitemap.xml&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;sites&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    sites&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sites&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;val&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;ar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;val&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これだけで、
sitemapに書かれたURLが全て取得できてしまいます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;次は、
実際にスクリーンショットを撮る部分ですが
この記事のやり方だと直接phantomjsコマンドを
別プロセスで発行する方法になります。&lt;/p&gt;
&lt;p&gt;ので、
スクリーンショットを撮る部分を関数にすると
以下のようになります。
上の方の部分はただの変数・定数定義になるのですが実際にphantomjsで
スクショを撮る部分は中盤あたりあるscreenshotメソッドです。&lt;/p&gt;
&lt;p&gt;あらかじめ決めた定数と引数で与えられたURLを
元にコマンドを作成して実行する形になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;index.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Sitemapper &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;sitemapper&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;OUTPUT_FOLDER&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./output&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 保存先のフォルダー&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_W&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1024&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// viewportの横幅(幅：単位px)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_H&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;768&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// viewportの高さ(幅：単位px)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;PHANTOM_JS_FILE&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;render.js&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// PhantomJSのパス&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; childProcess &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;child_process&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; phantomjs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;phantomjs&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; binPath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; phantomjs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;screenshot&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;url&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; outputFilePath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;OUTPUT_FOLDER&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/version1_&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;index&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;.png&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; options &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token constant&quot;&gt;PHANTOM_JS_FILE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        url&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        outputFilePath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_W&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_H&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; cmd &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; binPath &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos; &apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;childProcess&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;execSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cmd&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; sitemap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Sitemapper&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
sitemap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;https://ver-1-0.net/sitemap.xml&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;sites&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    sites&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sites&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;val&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;ar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;val&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;screenshotメソッドで実行されるコマンドは&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;phantomjs &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;phantomjsを実行するjsファイル&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;URL&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;出力ファイル名&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;VIEWPORTの幅&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;VIEWPORTの高さ&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;になります。
[phantomjsを実行するjsファイル]は&lt;/p&gt;
&lt;p&gt;render.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; page &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;webpage&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; system &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;system&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 引数は、system.argsでアクセスできる。&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; address &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; system&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;args&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; output &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; system&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;args&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_W&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; system&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;args&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_H&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; system&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;args&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;viewportSize &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_W&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_H&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;address&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;output&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        phantom&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;になります。
コマンド引数をphantomjsのオプションに渡して実行する形ですね。&lt;/p&gt;
&lt;p&gt;ここまでで来たらあとは、
取得したURLごとにscreenshotメソッドを実行するだけなので、
最初に追加したsitemapを出力しているループの部分に
screenshotメソッドを入れ込んで完成です。&lt;/p&gt;
&lt;p&gt;index.js（最終盤）&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Sitemapper &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;sitemapper&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;OUTPUT_FOLDER&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;./output&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 保存先のフォルダー&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_W&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1024&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// viewportの横幅(幅：単位px)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_H&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;768&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// viewportの高さ(幅：単位px)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;PHANTOM_JS_FILE&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;render.js&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// PhantomJSのパス&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; childProcess &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;child_process&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; phantomjs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;phantomjs&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; binPath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; phantomjs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;screenshot&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;url&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; outputFilePath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;OUTPUT_FOLDER&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/version1_&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;index&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;.png&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; options &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token constant&quot;&gt;PHANTOM_JS_FILE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        url&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        outputFilePath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_W&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token constant&quot;&gt;VIEWPORT_H&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; cmd &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; binPath &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos; &apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;childProcess&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;execSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cmd&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; sitemap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Sitemapper&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
sitemap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;https://ver-1-0.net/sitemap.xml&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;sites&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    sites&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sites&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;val&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;ar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;processing ..&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;val&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;screenshot&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;val&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;実行するには&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;node index&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;js&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;はい、一通り説明しましたが、
早速私は自分のサイトで試したところうまくいってそうでした。
私の環境では、
約80ページのスクショを撮るのに10分ほどかかりました。&lt;/p&gt;
&lt;p&gt;まあ今の記事数くらいであれば許容範囲という感じでしょうか。
これでイチイチサイトのページを開いてレイアウトの崩れとかをチェックする
必要がなくなりそうです。&lt;/p&gt;
&lt;p&gt;今回は、
コマンド実行を同期実行にしましたが、
実行するプロセスを複数にしたりすればもう少し早くできたり
するかもしれませんね。
（最初は全部非同期で試したのですが、プロセスが上がりすぎてかなり重くなりました。。）&lt;/p&gt;
&lt;p&gt;また、
phantomjsを子プロセスで動かすというのが
どうもしっくり来ないので、
もう少し良い実装の仕方があるのではとも思います。&lt;/p&gt;
&lt;p&gt;とりあえず、目的は達成されたのでよしとします。
以上です！&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171029_node-phantom-take-scsho/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[書籍紹介。「できる社員」に感じる違和感について。「日本企業の風土組織改革」柴田 昌治]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2017/10/27/dekiru-syain</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/27/dekiru-syain</guid><pubDate>Fri, 27 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回紹介する本はこちらです。
&lt;a href=&quot;http://amzn.to/2hd3wXe&quot;&gt;日本企業の組織風土改革 その課題と成功に導く具体的メソッド&lt;/a&gt;
&lt;a href=&quot;https://www.amazon.co.jp/dp/B019OQ2HR4/ref=as_li_ss_il?_encoding=UTF8&amp;amp;btkr=1&amp;amp;linkCode=li2&amp;amp;tag=llg01-22&amp;amp;linkId=8105d69f6b1235cc782bceb79338695a&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B019OQ2HR4&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&quot; border=&quot;0&quot; alt=&quot;日本企業の組織風土改革の表紙&quot;&gt;&lt;/a&gt;&lt;img style=&quot;border: none !important; margin: 0px !important;&quot; src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=B019OQ2HR4&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ある日いつもの
ようにネットサーフィンをしていたら
このような記事を見つけました。
&lt;a href=&quot;http://shuchi.php.co.jp/the21/detail/2881&quot;&gt;「優等生社員のワナ」第１回　なぜ「できる人」が会社を滅ぼすのか&lt;/a&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171027_dekiru-syain/Screen-Shot-2017-10-27-at-12.33.43.png&quot; alt=&quot;Screen-Shot-2017-10-27-at-12.33.43.png&quot;&gt;
&lt;blockquote&gt;「決断が速い」「処理能力が高い」「気が利く」「調整能力がある」……誰もが「できるビジネスマンの条件」として思い浮かべるこれらの能力。だが、それだけに頼っていると、むしろ組織を弱体化させるリスクとなる。こう話すのは、組織の風土改革の第一人者として知られる柴田昌治氏だ。従来型の「できる人」から脱却し、自分と組織を強くするにはどうすればいいのか。&lt;/blockquote&gt;
&amp;nbsp;
&lt;p&gt;私が日常的に感じていた
巷にあふれる「できる社員」像みたいなものに対する違和感について
言及している記事で「その通り！」と思い
紹介されている書籍もそのまま勢いで購入してしまいました。&lt;/p&gt;
&lt;p&gt;今回はこちらの書籍について
紹介します。&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;「できる社員」への違和感の正体&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;リンク先の記事では、
いわゆる「できる社員」の弊害を&lt;/p&gt;
&lt;ul&gt;
 	&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ul&gt;
 	&lt;li&gt;仕事をさばく&lt;/li&gt;
 	&lt;li&gt;上司の的をあてにいく&lt;/li&gt;
 	&lt;li&gt;即断即決&lt;/li&gt;
 	&lt;li&gt;自部門のみのエキスパート&lt;/li&gt;
 	&lt;li&gt;調整能力がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
のように指摘しています。
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;中には&lt;/p&gt;
&lt;h4&gt;「え、それ良いことじゃないの？」&lt;/h4&gt;
と言われそうな
ものもありますが、
これらが私の感じる&lt;strong&gt;違和感の正体&lt;/strong&gt;でした。
&lt;p&gt;例えば、
一般的に&lt;strong&gt;仕事をさばく&lt;/strong&gt;、処理する能力が高い人は&lt;strong&gt;「できる」&lt;/strong&gt;人と
認められやすいですが、
それを言い換えると意味や目的・価値などを&lt;strong&gt;「考える習慣」の欠如と&lt;/strong&gt;も
言え「上司から指示されたことはやるが、それ以上のことは何もやらない」
と言うこともできます。&lt;/p&gt;
&lt;p&gt;また、「即断即決」と言うものも上司が全部自分の経験に基づいて
「即断即決」してまうので部下が育たない。
現場に身近で詳しいはずの部下の意見が判断に利用されない、
議論されないなどの問題があります。&lt;/p&gt;
&lt;p&gt;他にも「調整」という言葉は聞こえは良いですが、
皆の意見を平等に聞いて、なんとなく当たり触りのない判断になってしまうリスクや、
率直な意見を覆い隠して問題を先送りにしてしまう可能性も十分にあり得ます。&lt;/p&gt;
&lt;p&gt;ネットに転がっている記事やメディアで話題になる&lt;strong&gt;「できる社員」&lt;/strong&gt;に関する
記事はどれもこれらのリスクに対して言及していることが
あまりなく、思考停止しているような感じがして
これまで、それらの記事や情報に随分と&lt;/p&gt;
&lt;p&gt;「なんか違うよなぁ」&lt;/p&gt;
&lt;p&gt;「こういう人が身近にいても
別に本当の意味ですごいとは思わないだろうなぁ」&lt;/p&gt;
&lt;p&gt;と違和感を感じていました。&lt;/p&gt;
&lt;p&gt;中でも
「上司の的をあてにいく」「調整能力」あたり
に強く違和感がありました。&lt;/p&gt;
&lt;p&gt;（会社ってそもそもお客様に良いサービスを提供して、売り上げ
を上げるというところが目標なはずなのに、
あれ社内での調整のためとか、
上司にOKをもらうために時間を使っているのはおかしい。）&lt;/p&gt;
&lt;p&gt;という風に常日頃から感じていたことを
代弁してもらったような気がしてスッキリしました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;組織の生産性の低さと立場を守るための保険仕事&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;これは面白いと思って
&lt;a href=&quot;http://amzn.to/2hd3wXe&quot;&gt;日本企業の組織風土改革 その課題と成功に導く具体的メソッド&lt;/a&gt;
も読んで見たのですが、&lt;/p&gt;
&lt;p&gt;記事の方では割と「できる社員」という形で個人にスポットを
当てた記事になっていましたが、
こちらはより組織にスポットを当てたものでした。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;例えば、
日本企業の間接部門の生産性の低さを指摘し、
さらにそれらが決して怠惰な仕事の結果でないこととも言っています。&lt;/p&gt;
&lt;p&gt;また、
日本企業で働く組織人は&lt;strong&gt;「自分の立場」&lt;/strong&gt;を第一に考え、
上司や同僚の評価に依存し、&lt;strong&gt;「利益」など本来的な企業の存在意義&lt;/strong&gt;とは
ずれた指標で行動を決め、
その「立場」を守るための保険仕事ばかりに多くの時間を費やしている
としています。
（同僚や上司が遅くまで働くからなんとなく自分もつられて残業するなど・・）&lt;/p&gt;
&lt;p&gt;上司に言われた仕事で、
目的や利益・採算など考えても腑に落ちない点もあるが
右から左に仕事をこなしていけば、
とりあえずは上司や同僚からの評判も悪くならないからやる。
というようなことが日常茶飯事だと書いています。&lt;/p&gt;
&lt;p&gt;本文では、
&lt;strong&gt;「コアネットワーク」&lt;/strong&gt;という概念を元に組織体質の改善を図り
組織の生産性を向上させることなども言及されていますが、
読み進めていく中で
いわゆる「できる社員」「評価される社員」の共通概念を改めて
考え直すだけでも大分違うのではないでしょうか。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ -できる社員像を考え直そう-&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;本文では、
人間に二種類の判断能力があると書かれています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「与えられた制約条件の範囲内で最適解を求めていく能力」&lt;/strong&gt;
と
&lt;strong&gt;「問題をそれぞれバラバラに捉えるのではなく、問題相互の関連で捉えることができる能力」&lt;/strong&gt;
です。&lt;/p&gt;
&lt;p&gt;後者は
与えられた制約条件を鵜呑みにするのではなく、
他の条件との関係性の何が本当の制約条件なのかを見直したり、
どこに本当の問題があるのか特定し、それの解決に尽力する能力のことのようです。&lt;/p&gt;
&lt;p&gt;これまでの「できる社員像」というのは
前者の能力を持って「仕事を早くさばける」
「関係各所に気を配り、波風が立たないで仕事を進める」
ことが評価されている部分が大きいです。&lt;/p&gt;
&lt;p&gt;が、&lt;/p&gt;
&lt;p&gt;私は先にも言ったように改めて&lt;strong&gt;「できる社員」像&lt;/strong&gt;を
改めないといけないと考えています。&lt;/p&gt;
&lt;p&gt;これからは
後者の能力が評価されるようになるべきで、&lt;/p&gt;
&lt;p&gt;「あの人は調整能力がすごい！」
「あの人はたくさんの仕事量をこなしていてすごい！」&lt;/p&gt;
&lt;p&gt;などではなく、
「あの人は根本的な問題の解決に向き合っている」
「会社全体を考えて部門や立場に縛られず仕事をしている」
などの部分で評価されるというのが理想です。&lt;/p&gt;
&lt;p&gt;目的地を勘違いしていると、
物事はあらぬ方向に進んでしまいます。
まずは、「できる社員」像をしっかり考え直して、
それに即した教育・育成・文化醸成ができると
個人が自立した活発で生産性の高い組織ができるのではないでしょうか。
以上です。&lt;/p&gt;
&lt;p&gt;紹介はここまでですが&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;「できる社員」「優秀な社員」という言葉に違和感を感じる方&lt;/li&gt;
 	&lt;li&gt;日本企業の生産性を嘆いている方&lt;/li&gt;
 	&lt;li&gt;今いる自分の会社で無駄な仕事ばかりされている方&lt;/li&gt;
 	&lt;li&gt;そもそもできる社員って何という部分に興味のある方&lt;/li&gt;
&lt;/ul&gt;
は一度目を通してみると良いと思います。
&lt;p&gt;読んでくださってありがとうございました。&lt;/p&gt;
&lt;div class=&quot;cstmreba&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4569829740/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/510WwA0rhEL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4569829740/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;日本企業の組織風土改革 (PHPビジネス新書)&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;柴田 昌治 PHP研究所 2015-12-19    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4569829740/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B019OQ2HR4/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F13523236%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-56-982974-6%252520%25257C%2525204-569-82974-6%252520%25257C%2525204-5698-2974-6%252520%25257C%2525204-56982-974-6%252520%25257C%2525204-569829-74-6%252520%25257C%2525204-5698297-4-6&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&amp;nbsp;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171027_dekiru-syain/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[一人利用でもおすすめSlackの始め方。新規登録]]></title><description><![CDATA[どうも前回の記事で
フリーランスの方や在宅作業の方におすすめ。一人Slack のように
一人Slackを紹介しましたが、
今回は
そんなSlack…]]></description><link>https://ver-1-0.net/blog/2017/10/26/how-to-regist-slack</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/26/how-to-regist-slack</guid><pubDate>Thu, 26 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうも前回の記事で
&lt;a href=&quot;https://ver-1-0.net/2017/10/23/self-slack/&quot;&gt;フリーランスの方や在宅作業の方におすすめ。一人Slack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;のように
一人Slackを紹介しましたが、
今回は
そんなSlackの登録の仕方を説明します。&lt;/p&gt;
&lt;p&gt;サイトが英語だったりして、
一人でやるにはちょっと億劫になりますよね。
そんな方に向けて画像付きで解説します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;
&amp;nbsp;
&lt;h2 class=&quot;chapter&quot;&gt;Slackの始め方は簡単&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;最初に言っておくと難しくないです！！
やってみると案外できたという感じで、
すんなりと利用開始できます。
メールアドレスを入力して、メールアドレスを認証して、
ワークスペースの名前を決めるだけで完了です！！&lt;/p&gt;
&lt;p&gt;それでは、
こちらのサイトから始めて行きましょう。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://slack.com/&quot; target=&quot;_blank&quot;&gt;Where work happens | Slack&lt;/a&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image1.png&quot; alt=&quot;slack&quot;&gt;
&lt;p&gt;最初に、「GET STARTED」をクリック&lt;/p&gt;
&lt;h3 id=&quot;ワークスペースを作成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90&quot; aria-label=&quot;ワークスペースを作成 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ワークスペースを作成&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image2.png&quot; alt=&quot;slack&quot;&gt;
&lt;p&gt;次ページ画面上部のStart with a workspaceから
「create a new workspace」を選択。
ワークスペースとは、
チームで利用するスペースと考えて頂いて構いません。
（一人で利用する場合は、一人用ワークスペースですが・・・）&lt;/p&gt;
&lt;h3 id=&quot;メールアドレス入力&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E5%85%A5%E5%8A%9B&quot; aria-label=&quot;メールアドレス入力 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;メールアドレス入力&lt;/h3&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image3.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;次の画面で任意のメールアドレスを入力します。&lt;/p&gt;
&lt;h3 id=&quot;認証コード入力&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%AA%8D%E8%A8%BC%E3%82%B3%E3%83%BC%E3%83%89%E5%85%A5%E5%8A%9B&quot; aria-label=&quot;認証コード入力 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;認証コード入力&lt;/h3&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image4.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;少し待つと先の画面で入力したアドレス宛に
認証コードが送られてくるのでそちらを入力します。&lt;/p&gt;
&lt;h3 id=&quot;名前入力&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%90%8D%E5%89%8D%E5%85%A5%E5%8A%9B&quot; aria-label=&quot;名前入力 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;名前入力&lt;/h3&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image5.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;認証コードが正常に入力できたら、名前の入力が求められます。
別に本名を入れろとかそういうことでないので
好きな名前を入れてしまって大丈夫です。&lt;/p&gt;
&lt;h3 id=&quot;チーム情報入力&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%81%E3%83%BC%E3%83%A0%E6%83%85%E5%A0%B1%E5%85%A5%E5%8A%9B&quot; aria-label=&quot;チーム情報入力 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;チーム情報入力&lt;/h3&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image6.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;次にチームの情報について入力を求められますが、
こちら特に必須じゃないのでそのままボタンを押して次に進んで大丈夫です。
（一人で使ってすみませんみたいな気持ちになる必要もありません。）&lt;/p&gt;
&lt;h3 id=&quot;グループ名入力&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%90%8D%E5%85%A5%E5%8A%9B&quot; aria-label=&quot;グループ名入力 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;グループ名入力&lt;/h3&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image7.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;グループ名を聞かれます。
自分の好きなグループ名を入力してください。
（混雑時にレストランの四人席を一人締めしているかのような
罪悪感を感じる必要はありません。）&lt;/p&gt;
&lt;h3 id=&quot;ワークスペース名入力&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E5%90%8D%E5%85%A5%E5%8A%9B&quot; aria-label=&quot;ワークスペース名入力 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ワークスペース名入力&lt;/h3&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image8.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;ワークスペース名を聞かれます。
ワークスペース自体のURLに使われるので、すでに使われてしまっている
ワークスペース名は使うことができません。独創的な名前をつけましょう。
（グループ名がデフォルトで入るのでそのまま使えれば大丈夫です。）&lt;/p&gt;
&lt;h3 id=&quot;メンバーを招待&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%82%92%E6%8B%9B%E5%BE%85&quot; aria-label=&quot;メンバーを招待 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;メンバーを招待&lt;/h3&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image9.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;最後、
インビテーションを送るか聞かれますが、
一人用の場合は「Skip For Now」をクリックしましょう。
（孤独に耐える強さを身につけるためにも、
誰かを招待したいという誘惑に打ち勝ってください）&lt;/p&gt;
&lt;h3 id=&quot;登録完了&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%99%BB%E9%8C%B2%E5%AE%8C%E4%BA%86&quot; aria-label=&quot;登録完了 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;登録完了&lt;/h3&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image10.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;これで見事登録完了です。
自分専用のスペースとして、好きなだけメッセージを送ってください。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;登録して気になるところですが、
料金はどうなっているのか見てみましょう。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://slack.com/pricing&quot; target=&quot;_blank&quot;&gt;Pricing | Slack&lt;/a&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/image11.png&quot; alt=&quot;slack&quot;&gt;
&lt;p&gt;最初に登録した時点ではフリープランなので無料で利用できます。
Standard Planでは、ユーザ一人に対して月850円程度ですね。&lt;/p&gt;
&lt;p&gt;フリープランだと検索できる件数などに制限が
あるようですが、一人で使う分にはあまり困らず利用できています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;先の記事で紹介した内容などと含めて
非常に便利なツールですので、
一度試してみて頂けると良いと思います。&lt;/p&gt;
&lt;p&gt;前回の記事で紹介したもの以外にも
自分で工夫して自分にあった使い方もできるかと思います。&lt;/p&gt;
&lt;p&gt;私は、「あ、これやらなきゃ」みたいなものを
テキストベースで連投するチャンネルを作ったりするなど色々工夫して
利用しています。&lt;/p&gt;
&lt;p&gt;みなさんもぜひ一度お使い下さい。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171026_how-to-regist-slack/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[webpackでnormalize.cssを読み込む方法]]></title><description><![CDATA[今回は、
webpackでnormalize.cssを読み込む方法を紹介します。 webpackとはなんぞやや
normalize.cssとはなんぞやということは他のサイト
の説明に譲るとして、
この記事ではとりあえず、
normalize.css…]]></description><link>https://ver-1-0.net/blog/2017/10/24/webpack-normalize-css</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/24/webpack-normalize-css</guid><pubDate>Tue, 24 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は、
&lt;strong&gt;webpack&lt;/strong&gt;で&lt;strong&gt;normalize.css&lt;/strong&gt;を読み込む方法を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;webpack&lt;/strong&gt;とはなんぞやや
&lt;strong&gt;normalize.css&lt;/strong&gt;とはなんぞやということは他のサイト
の説明に譲るとして、
この記事ではとりあえず、
&lt;strong&gt;normalize.css&lt;/strong&gt;を
読み込むというところを第一目標にして書いていきます。&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;早速環境準備 - WebPack,CSSLoarder,StyleLoaderをインストール&lt;/h2&gt;
&lt;p&gt;サンプル用のプロジェクトを作成
+
&lt;strong&gt;webpack&lt;/strong&gt;と&lt;strong&gt;style-loader&lt;/strong&gt;、&lt;strong&gt;css-loader&lt;/strong&gt;をインストール&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; webpack-normalize-demo
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; webpack-normalize-demo &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; init &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; i &lt;span class=&quot;token parameter variable&quot;&gt;-D&lt;/span&gt; webpack style-loader css-loader
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;cssを読み込むにはwebpackに加えて、
style-loader、css-loaderというモジュールが必要なので、
合わせてインストールします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;インストール後
webpack.config.jsにも設定を記述します。
（webpack.config.jsは自分で作成します）&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;entry&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;./index.js&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;     &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;__dirname&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;bundle.js&apos;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;rules&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;\.css&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;loaders&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
          &lt;span class=&quot;token string&quot;&gt;&apos;style-loader&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token literal-property property&quot;&gt;loader&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;css-loader&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token literal-property property&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;normalize.cssをnpmでインストール&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;normalize.css&lt;/strong&gt;もnpmでインストールできてしまうので
インストールしましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; i &lt;span class=&quot;token parameter variable&quot;&gt;-D&lt;/span&gt; normalize.css
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;あとは、
エントリポイントに
index.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;import &apos;normalize.css&apos;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; index.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;と記載すれば、&lt;/p&gt;
&lt;p&gt;normalize.cssがバンドルされた、bundle.jsができるので、
それをpublic/index.htmlなどで
読み込めば合わせて、normalize.cssも読み込めます。&lt;/p&gt;
&lt;p&gt;public/index.html&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;UTF-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Demo&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;root&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;text/javascript&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;./bundle.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上です。
 
 
 &lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171024_webpack-normalize-css/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[フリーランスの方や在宅作業の方におすすめ。一人Slack]]></title><description><![CDATA[どうも、
みなさんSlackってご存知でしょうか？
最近色々な会社で使われ初めていてなかなか有名な方
のチャットツールではあると思います。 このSlack…]]></description><link>https://ver-1-0.net/blog/2017/10/23/self-slack</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/23/self-slack</guid><pubDate>Mon, 23 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうも、
みなさんSlackってご存知でしょうか？
最近色々な会社で使われ初めていてなかなか有名な方
のチャットツールではあると思います。&lt;/p&gt;
&lt;p&gt;このSlackというツール
会社内で使うだけでも相当便利なツールなのですが
個人で利用するのもおすすめなので記事にしてみました。&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Slackって？&lt;/h2&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171023_self-slack/image1.png&quot; alt=&quot;slack&quot;&gt;
&lt;p&gt;エンジニア界隈やスタートアップなどで
よく使われているチャットツールです。
&lt;a href=&quot;https://slack.com/&quot;&gt;&lt;a href=&quot;https://slack.com/&quot;&gt;https://slack.com/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;日本ですとチャットワークなどのチャットツールもありますが、
それと同じような用途でチームのコミュニケーションや
情報共有に利用されるアプリケーションです。
PCやスマートフォンからも利用でき、
移動先などでも使えるツールです。&lt;/p&gt;
&lt;p&gt;ファイルの転送やリンクの共有。
はたまた、マークダウン形式のような記法がサポートされていたりして
かなり便利です。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;チームで使うSlackを一人で利用？&lt;/h2&gt;
&lt;p&gt;Slackではもちろん、
他のチームメンバーとのコミュニケーションのためのツールで、
テレビ会議に使われたりして、
他者とのコミュニケーションツールとして利用されていますが、
Slackには他の使われ方をしている部分も多いです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Slackには自分が考えていることや詰まっていること、リマインド
などを自由に書き込みできるので、
私の会社ではエンジニアが一人一つチャンネルを持っていて、
皆勤務時間中は思い思いに人それぞれtwitterのような感覚で、
今日のタスクや備忘録、詰まっているところ、メモ
のような内容をチャンネルに書いていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;普段このように、
自分のチャンネルに様々なことを呟きながら
仕事を進めているのですが、
一度チームを離れて休日など自宅で一人で作業をする際に
なぜか上手いこと作業が進みません。。&lt;/p&gt;
&lt;h5&gt;「なぜだ・・・・・。自宅にいるからやはり甘えがでているのか？」&lt;/h5&gt;
&lt;h5&gt;なんて思いながら、
職場との違いを考えていると&lt;/h5&gt;
&lt;h4&gt;「そうか！普段仕事でやっているようにSlackを使ってTo DOとか備忘を呟かないから」&lt;/h4&gt;
ということに気づきました。
そこに気がつき一人でSlackを利用している人が
いないか検索もかけてみましたが、
みなさん思いの外一人Slackを利用されているそうです。
&lt;p&gt;他のアプリとの連携（RSSフィードを通知するなど）
が一人Slackの面白いところではあるようですが、
標準機能だけでも随分生産性工場に寄与する部分があると思うので、
ひとまずこの記事では標準の機能としての活用方法を紹介してみます。
（別アプリとの連携は別記事で。。機会あれば）&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;使い方その1 Twitterの代わりとして使ってみる&lt;/h2&gt;
&lt;p&gt;slackではチャンネルと言って、
自分で好きなチャットルームの部屋を作ることができます。
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171023_self-slack/image2.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;p&gt;ここで、
自分の呟く用の部屋を作って
自由に呟くということができます。&lt;/p&gt;
&lt;p&gt;フリーランスの方とかだとクライアントの
作業内容などなどが入っている内容とかってSNSでは自由に呟けないですよね。。。&lt;/p&gt;
&lt;p&gt;ただこの個人Slackなら誰も見ていないので
つぶやき放題です。&lt;/p&gt;
&lt;p&gt;他にも、
仕事をしていて頭の中だけで考えて
ごちゃごちゃしている時に、
整理するために、
メモ書きのように自分が考えていることを
書きなぐるというのもいいかもしれません。&lt;/p&gt;
&lt;p&gt;一度頭の外に出してみると、
案外スッキリして作業の見通しがたったり、
頭の中がシンプルに整理されたりします。&lt;/p&gt;
&lt;p&gt;仕事中にモヤモヤすることがあれば、
Slackに一度吐き出してみてはいかがでしょうか。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;使い方その2 To Do リストにしてみる&lt;/h2&gt;
&lt;p&gt;To Doって続かないですよね。
（あれって無限に増えていくじゃないですか。。作業中に増えていったりもするし）&lt;/p&gt;
&lt;p&gt;しかも、
他のアプリと連動していないで、別で起動しないといけなかったり
してついつい億劫になってしまったり、忘れ去られたりしますよね。&lt;/p&gt;
&lt;p&gt;なので、
私は、毎日見る自分のチャンネルにやらないと行けないなーということや
忘れずにやらないと行けないことをガンガンつぶやいていきます。
（下記は例です。こんなことTo Doに書く人いないと思いますけど・・・）&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171023_self-slack/image3.png&quot; alt=&quot;slack&quot;&gt;
&lt;p&gt;また、slackではスニペットという機能を
使って文字を装飾できるので、
タスクが終わったら取り消し線を入れることができます。
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171023_self-slack/image4.png&quot; alt=&quot;slack&quot;&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171023_self-slack/image5.png&quot; alt=&quot;slack&quot;&gt;
&lt;p&gt;（ &quot;~&quot;で文字を囲むとその間を取り消し線で表示できます。)
朝を起きるになってる。。&lt;/p&gt;
&lt;p&gt;また、
投稿した文章は後からでも編集可能なので、
後からTo Doを追加したり、
順番を変更したりすることも可能です。
編集可能なので消してしまってもいいのですが、
一日の終わりに今日何やったかな？とか見返せるので私の場合は、
特に消したりはしないです。&lt;/p&gt;
&lt;p&gt;このやり方は、
Slackとして他に必要な機能とまとめて、
To DOをまとめたり、自分の自由なフォーマットで
作業をリスト化できるので気に入っています。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここでは、
Slackの標準の機能でできることしか紹介しませんでしたが、
他のアプリと連携させると、
天気予報を表示したり、サーバーの容量を表示したり、
Google アナリティクスの内容を表示したりより自分好みのスペース
にカスタマイズできるみたいです。&lt;/p&gt;
&lt;p&gt;併せて、
参考になりそうなURLも貼っておきます。
&lt;a href=&quot;https://qiita.com/saitotak/items/ac0eb7ddc0d8d83cbe91&quot;&gt;個人 Slack のススメ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一人で煮詰まる自分にサヨナラを告げる！在宅ワークを効率化する「ひとりSlack」が最強すぎる&lt;/p&gt;
&lt;p&gt;以上です！！&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171023_self-slack/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[ブロックチェーンの仕組みがわかる記事”How does blockchain really work? I built an app to show you.”を訳してみた]]></title><description><![CDATA[どうも週末に、
パッと見つけた記事で面白かったものがあったので
シェアしたいと思いました。 チュートリアル用のようなunderstandableなアプリも
一緒に公開しており、
Awesome!と思ったので和訳します。 原文はコチラ
How does blockchain…]]></description><link>https://ver-1-0.net/blog/2017/10/18/how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/18/how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja</guid><pubDate>Wed, 18 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうも週末に、
パッと見つけた記事で面白かったものがあったので
シェアしたいと思いました。&lt;/p&gt;
&lt;p&gt;チュートリアル用のようなunderstandableなアプリも
一緒に公開しており、
Awesome!と思ったので和訳します。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171018_how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja/twittercard.png&quot; alt=&quot;twittercard&quot;&gt;
&lt;p&gt;原文はコチラ
&lt;a href=&quot;https://medium.freecodecamp.org/how-does-blockchain-really-work-i-built-an-app-to-show-you-6b70cd4caf7d&quot;&gt;How does blockchain really work? I built an app to show you.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;※プロフェッショナルな
訳ではないのでそこは大目にみてください。
雰囲気だけ伝わればと思っています。
誤訳等あればおしらせください。
※訳文掲載は著者の転載許可の承諾を得ております。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;全文を訳したましたが、
マイニング部分の流れがコード付きで
わかりやすく説明されていて本当に役立ちました！！
できれば本文中にあるweb版のデモを触ってみると
より深く理解できるはずです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;海外の記事 - （訳）Sean HHow does blockchain really work? I built an app to show you.&lt;/h2&gt;
&amp;nbsp;
&lt;h3 class=&quot;section&quot;&gt;実際ブロックチェーンはどうやって動いているのか？説明用のアプリを作ってみた&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ウィキペディアによれば、ブロックチェーンは&lt;/p&gt;
&lt;blockquote&gt;ブロックと呼ばれる継続的に成長するレコードのリストを保持するために
使われる分散型データベースである&lt;/blockquote&gt;
とある。
うん、いいね！でもそれはどうやって動くのか？
&lt;p&gt;ブロックチェーンについて説明するには、オープンソースの&lt;a href=&quot;https://github.com/seanseany/blockchain-cli&quot;&gt;Blockchain CLI&lt;/a&gt;コマンドラインインタフェースを使うと良いと思う。&lt;/p&gt;
&lt;p&gt;私が作ったブラウザで使えるバージョンはここです。
&lt;a href=&quot;http://blockchaindemo.io/&quot;&gt;browser-based version of this here.&lt;/a&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171018_how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja/how-blockchain-works.png&quot; alt=&quot;how blockchain-works&quot;&gt;&lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;コマンドラインインターフェースバージョンをインストールする&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まだ、
自分の環境にNode.jsがインストールされてなかったら、
インスートールしてください、
それから、ターミナルで下のコマンドを実行します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;npm install blockchain-cli -g
blockchain
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コマンドを実行すると
? Welcome to Blockchain CLI!　と bloackchain →
というプロンプトが現れるでしょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;ブロックがどのように見えるか？&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ターミナルの今のブロックチェーンを見るには、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;blockchain&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;か&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;bc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;をターミナルに
打ち込みます。
下のように見えるはずです。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171018_how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja/block-on-the-blockchain.png&quot; alt=&quot;block on the blockchain&quot;&gt;
&lt;ul&gt;
 	&lt;li&gt;Index (Block#) : それがどのブロックか（ジェネシスブロックのindexは0)&lt;/li&gt;
 	&lt;li&gt;Hash : そのブロックが妥当か？&lt;/li&gt;
 	&lt;li&gt;　 Previous Hash : 前のブロックが妥当か？&lt;/li&gt;
 	&lt;li&gt;Timestamp:いつブロックが追加されたか？&lt;/li&gt;
 	&lt;li&gt;Data: どんな情報がブロックに保持されているか？&lt;/li&gt;
 	&lt;li&gt;Nonce: 妥当なブロックを見つけるまでに何回イテレートしたか？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Genesis Block (ジェネシスブロック）&lt;/strong&gt;
全てのブロックチェーンはGenesis Blockから始まります。
あとで見るように、各ブロックチェーンのブロックは前のブロックに依存している。
そのため、Genesis Blockは最初のブロックとして採掘される必要がある。&lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;新しいブロックが採掘される場合に何が起きるか？&lt;/h3&gt;
&lt;p&gt;最初のブロックを採掘してみましょう。mine freeCodeCamp♥︎と打ち込んでみてください。&lt;/p&gt;
&lt;p&gt;そのブロックはブロックチェーン場での最新のインデックスと前のブロックのハッシュを
みています。このジェネシスブロックのケースでは最新のブロックは、&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;Index (Block#) : 0 + 1 = 1&lt;/li&gt;
 	&lt;li&gt;　 Previous Hash : 0000018035a828da0…&lt;/li&gt;
 	&lt;li&gt;Timestamp:ブロックが追加されたタイムスタンプ&lt;/li&gt;
 	&lt;li&gt;Data: freeCodeCamp♥︎&lt;/li&gt;
 	&lt;li&gt;Hash : ??&lt;/li&gt;
 	&lt;li&gt;Nonce: ??&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;section&quot;&gt;ハッシュがどのように計算されているか？&lt;/h3&gt;
&lt;p&gt;ハッシュ値は一意にデータを識別する固定長の数字の値です。&lt;/p&gt;
&lt;p&gt;そのハッシュはインデックスと前ブロックのハッシュ値、タイムスタンプ、ブロックの値と
ナンスを足したものから計算される。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;SHA256アルゴリスムはこれらの与えられたものから一意なハッシュを計算します。
同じ入力値からは常に同じハッシュが返却されます。&lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;ブロックのハッシュの頭につく4つの0&lt;/h3&gt;
&lt;p&gt;先頭の0は有効なハッシュに最低限必要なものです。
その必須の数字はdifficultyと呼ばれます。&lt;/p&gt;
&lt;pre&gt;function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i &lt; b; i ++) { if (hash[i] !== &apos;0&apos;) { break; } } return i &gt;= difficulty;
}
&lt;/pre&gt;
&lt;p&gt;これは&lt;a href=&quot;https://en.wikipedia.org/wiki/Proof-of-work_system&quot;&gt;Proof-of-Work system&lt;/a&gt;としても知られています。&lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;nonce（ナンス）とは？&lt;/h3&gt;
&lt;p&gt;nonce（ナンス）は妥当なハッシュを見つけるたみに使われる数字です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = CryptoJS.SHA256(input)
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;そのナンスはハッシュが有効になるまでイテレートされます。
このケースでは、有効なハッシュは最低限先頭に4つの0をもつ必要があります。&lt;/p&gt;
&lt;p&gt;その有効なハッシュに一致するナンスを見つける過程がマイニングです。&lt;/p&gt;
&lt;p&gt;difficultyが増加すると、有効なハッシュである可能性の数字が減ります。
有効となる可能性が低ければ低いほど、ハッシュを見つけるためにより多くの電力を必要とします。&lt;/p&gt;
&lt;h3 class=&quot;section&quot;&gt;なぜこれが重要なのか？&lt;/h3&gt;
&lt;p&gt;これらの作業はブロックチェーンが改ざんできなくするのに重要です。&lt;/p&gt;
&lt;p&gt;もし、私たちがA-&gt;B-&gt;Cというブロックチェーンを持っていて、
誰かがブロックAを変更した場合に、以下のことが起こります。&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;ブロックAが変更される&lt;/li&gt;
 	&lt;li&gt;そのデータはハッシュの計算に使われるのでブロックAのハッシュ値が変更される&lt;/li&gt;
 	&lt;li&gt;そのハッシュはもはや先頭4つの0を持たないので、不正なハッシュとなる&lt;/li&gt;
 	&lt;li&gt;ブロックAのハッシュはブロックBのハッシュを計算するのに使われているので、
ブロックBのハッシュも変更されます&lt;/li&gt;
 	&lt;li&gt;ブロックBのハッシュも先頭4つの0を持たないので、ブロックBが不正になります&lt;/li&gt;
 	&lt;li&gt;ブロックBのハッシュはブロックCのハッシュを計算するのに使われるので、
ブロックCのハッシュが変わります。&lt;/li&gt;
 	&lt;li&gt;ブロックCのハッシュも先頭4つの0を持たないので、ブロックCが不正になります&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;em&gt;ブロックを変更させるたった一つの方法は、再びブロックを採掘する方法です。
そして、そのあと全てのブロックを採掘する必要があります。
新しいブロックは常に追加され続けるので、ブロックチェーンを改ざんすることは
ほぼ不可能となります。&lt;/em&gt;&lt;/span&gt;
&lt;p&gt;このチュートリアルがあなたに役立ちますように！&lt;/p&gt;
&lt;p&gt;もしWebバージョンのでもを確認したい場合はこちらのリンクにお進みください。
&lt;a href=&quot;http://blockchaindemo.io&quot;&gt;&lt;a href=&quot;http://blockchaindemo.io&quot;&gt;http://blockchaindemo.io&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;cstmreba&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798151343/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/51ZDMhsrXWL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798151343/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer&apos;s Books)&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;渡辺 篤,松本 雄太,西村 祥一,清水 俊也 翔泳社 2017-08-03    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798151343/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B07416W2PY/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15008160%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-79-815134-2%252520%25257C%2525204-798-15134-2%252520%25257C%2525204-7981-5134-2%252520%25257C%2525204-79815-134-2%252520%25257C%2525204-798151-34-2%252520%25257C%2525204-7981513-4-2&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171018_how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Laravel5.4とVue.jsでSPAを作ってみる。③ -仮想通貨の価格を取得するページを作ってみる-]]></title><description><![CDATA[前回、前々回と
環境の構築、
クライアント側でのルーティング設定を
行いました。 Laravel5.4とVue.jsでSPAを作ってみる。① -環境構築- Laravel5.4とVue.jsでSPAを作ってみる。② -クライアントルーティング- 今回は、
実際にAjax…]]></description><link>https://ver-1-0.net/blog/2017/10/14/laravel-vue-spa-3</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/14/laravel-vue-spa-3</guid><pubDate>Sat, 14 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前回、前々回と
環境の構築、
クライアント側でのルーティング設定を
行いました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2017/10/11/laravel-vue-spa-1/&quot;&gt;Laravel5.4とVue.jsでSPAを作ってみる。① -環境構築-&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2017/10/11/laravel-vue-spa-2/&quot;&gt;Laravel5.4とVue.jsでSPAを作ってみる。② -クライアントルーティング-&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回は、
実際にAjax通信を使ったより実践的で、
現実に即した内容をお届けできればと思います。&lt;/p&gt;
&lt;p&gt;さて、
作成する内容ですが、
仮想通貨の価格をコインチェックのAPIを利用して取得
→リアルタイムで画面で価格を表示とします。&lt;/p&gt;
&lt;p&gt;出来上がったものはこちらです。&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171014_laravel-vue-spa-3/spa-sample-step2.mp4&quot; controls &gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;コインチェックのAPIを利用して、
実に14種類の仮想通貨のレートを確認できるようにしています。&lt;/p&gt;
&lt;p&gt;内部でやっていることは&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;同サーバDB内の仮想通貨の一覧を取得&lt;/li&gt;
&lt;li&gt;1.のそれぞれの仮想通貨に関して価格を取得&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;です。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;同サーバDB内の仮想通貨の一覧を取得&lt;/h2&gt;
&lt;p&gt;マイグレーションを書いてDB
に仮想通貨の情報を登録します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;Illuminate&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Support&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Facades&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Schema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;Illuminate&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Database&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Schema&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Blueprint&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;Illuminate&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Database&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Migrations&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Migration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;App&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Models&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Currency&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name-definition class-name&quot;&gt;CreateCurrencies&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Migration&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;/**
   * Run the migrations.
   *
   * @return void
   */&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;up&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token class-name static-context&quot;&gt;Schema&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;currencies&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name type-declaration&quot;&gt;Blueprint&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$table&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;increments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;id&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$table&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token keyword type-declaration&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$table&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token keyword type-declaration&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$table&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token keyword type-declaration&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$table&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;timestamps&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;btc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ビットコイン&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;BitCoin&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;bch&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ビットコインキャッシュ&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;BitCoinCash&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;eth&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;イーサリアム&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Etherium&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;etc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;イーサリアムクラシック&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Etherium Classic&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;dao&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;DAO&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;DAO&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;lsk&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;リスクコイン&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;BitCoin&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;fct&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ファクトム&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Factom&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;xmr&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;モネロ&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Monero&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;rep&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;オーガー&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Augur&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;xrp&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;リップル&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Ripple&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;zec&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ジーキャッシュ&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Zcach&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;xem&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ネム&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Xem&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ltc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ライトコイン&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Litecoin&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;dash&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_ja&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;DASH&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name_en&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;DASH&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token class-name static-context&quot;&gt;Currency&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;insert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;/**
   * Reverse the migrations.
   *
   * @return void
   */&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;down&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token class-name static-context&quot;&gt;Schema&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;drop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;currencies&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;マイグレーション実行&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;php aritsan migrate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これでDatabaseの準備はできたので、
これをAjaxでとってきて表示させるまでやりましょう。&lt;/p&gt;
&lt;p&gt;APIのルーティング設定。&lt;/p&gt;
&lt;p&gt;routes/api.php&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;Illuminate&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Http&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;App&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Models&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Currency&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;GuzzleHttp&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Client&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token class-name static-context&quot;&gt;Route&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;group&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;middleware&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;api&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token class-name static-context&quot;&gt;Route&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;currencies&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$obj&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Currency&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$obj&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;json_encode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで /api/currenciesにアクセスすると、
json形式の仮想通貨の情報を取得できるようになります。
（ルーティングファイルに処理を書くという。。まあチュートリアルでもやってたし。。）
お次は表示するVueコンポーネントです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;row&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;col-md-8 col-md-offset-2&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel panel-default&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Crypto Currencies&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

          &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel-body&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{message}}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;list-unstyled&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;v-if&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;is_init&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
              &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;v-for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;(currency, key) in currencies&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
                &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;v-on:&lt;/span&gt;click&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;loading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
                  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;router-link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;:to&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{ path: &apos;/currencies/&apos; + currency.key }&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{currency.name_ja}} / {{currency.name_en}}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;router-link&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
                &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
              &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;created&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetchCurrencies&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;is_init&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Fetching Data...&quot;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;loading&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_loading &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Fetching Data...&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;fetchCurrencies&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      axios&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/api/currencies&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;currencies &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_loading &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_init &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここまででとりあえず、仮想通貨の一覧を取得はできて、
Ajax通信も使えています。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171014_laravel-vue-spa-3/demo.png&quot; alt=&quot;demo&quot;&gt;
&lt;p&gt;が、ここまでだとリアルタイムに価格を表示していく！！
というSPAの面白さみたいなものがないので、
さらにそれぞれの価格を取得するように修正していきます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;APIで仮想通貨の価格を取得する&lt;/h2&gt;
&lt;p&gt;APIはこちらのコインチェックのAPIを使用します。
&lt;a href=&quot;https://coincheck.com/ja/documents/exchange/api&quot;&gt;&lt;a href=&quot;https://coincheck.com/ja/documents/exchange/api&quot;&gt;https://coincheck.com/ja/documents/exchange/api&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;価格設定の部分のAPIのルーティングを設定します。
routes/api.phpに以下のルーティングを設定します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token class-name static-context&quot;&gt;Route&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;rate/{currency}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$currency&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$res&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;currency&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$currency&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;btc&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;jpy&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;currency&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token variable&quot;&gt;$res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;currency&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;btc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Client&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$url&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;https://coincheck.com/api/rate/${currency}_jpy&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;GET&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;jpy&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;json_decode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBody&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;rate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$currency&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;btc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token variable&quot;&gt;$url&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;https://coincheck.com/api/rate/${currency}_btc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;GET&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token variable&quot;&gt;$res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;btc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;json_decode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getBody&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;rate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$response&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getStatusCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$res&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;json_encode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;error&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここでは、
仮想通貨の円建て、ビットコイン建てのレートを取得して
返却しています。&lt;/p&gt;
&lt;p&gt;次に、Index.vueのhtml部分に以下のタグを追加し、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;row&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;col-md-8 col-md-offset-2&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel panel-default&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Crypto Currency Rate&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel-body&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{message}}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;list-unstyled&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;v-if&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;!is_loading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        1{{name.toUpperCase()}} =   &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;h2&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{currency.jpy.toLocaleString()}}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; JPY
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;v-if&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;name != &apos;btc&apos;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        1{{name.toUpperCase()}} =   &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;h2&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{currency.btc.toLocaleString()}}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; BTC
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;javascipt部分を以下のようにします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;created&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetchCurrencies&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fetchRate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;timer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;setInterval&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fetchRate&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;name&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;currency&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token string-property property&quot;&gt;&apos;currency&apos;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-property property&quot;&gt;&apos;jpy&apos;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-property property&quot;&gt;&apos;btc&apos;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;is_init&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;is_loading&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Fetching Data...&quot;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;loading&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_loading &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Fetching Data...&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;fetchCurrencies&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      axios&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/api/currencies&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;currencies &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_loading &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_init &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;fetchRate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;btc&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      axios&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/api/rate/&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;currency&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;btc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;btc&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;currency&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;jpy &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;jpy&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; res&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;currency&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_loading &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function-variable function&quot;&gt;cancelAutoUpdate&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token function&quot;&gt;clearInterval&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;timer&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;beforeDestroy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;clearInterval&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;timer&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;script&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;あとは、cssなどを多少直すと
上の動画のような感じになります。&lt;/p&gt;
&lt;p&gt;コードはここに置いておきます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/spa-sample&quot;&gt;https://github.com/version-1/spa-sample&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上、ここまでで
クライアント側でレンダリングして、
必要なデータはAPIでとってくる。
という感じでサクサク動くSPAを作ってきました。&lt;/p&gt;
&lt;p&gt;基本の部分は紹介したので、
あとは各々の興味次第という感じですね。&lt;/p&gt;
&lt;p&gt;構築した感想としては、
ユーザ側からの使用感として、リロードの待ち時間が短くすみ
サクサク動くという点で良い気がきましたが、
やはりコードの管理が煩雑になりそうな気がしています、
ビュー側でそれなりのコードを各必要があるのでコード量が多くなり
大変そうです。&lt;/p&gt;
&lt;p&gt;あとは、以前にも仮想通貨の価格を取得する記事を
書いたのですが、そこからビットコインの価格が5,6倍とかに
なっています。
恐ろしや。。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2017/04/28/node-js-realtime/&quot;&gt;[Node.js]ビットコインの価格をリアルタイムにDBに保存する。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以上です！！&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171014_laravel-vue-spa-3/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Laravel5.4とVue.jsでSPAを作ってみる。② -クライアントルーティング-]]></title><description><![CDATA[前回はこの記事でLaravel5.4とVue.jsの環境構築を行いました。 Laravel5.4とVue.jsでSPA…]]></description><link>https://ver-1-0.net/blog/2017/10/11/laravel-vue-spa-2</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/11/laravel-vue-spa-2</guid><pubDate>Wed, 11 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前回はこの記事でLaravel5.4とVue.jsの環境構築を行いました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/10/11/laravel-vue-spa-1/&quot;&gt;Laravel5.4とVue.jsでSPAを作ってみる。① -環境構築-&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回は、クライアント側でのルーティングを行なう形で
もう少し実践的な内容で進めていきます。&lt;/p&gt;
&lt;p&gt;記事の終わりにはこのようなページができます。&lt;/p&gt;
&lt;p&gt;※無音なので、安心してご視聴ください。&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171011_laravel-vue-spa-2/spa-sample.mp4&quot; poster=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171011_laravel-vue-spa-2/spa-sample.png&quot; poster=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171014_laravel-vue-spa-3/spa-sample-step2.png&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;動画をみるとわかりますが、
ページを切り替えているのに全体を読み込まず、
差分だけ切り替えているので、
これまでのWebアプリ特有のページの読み込みが無くなっています。&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;vue-routerのインストール&lt;/h2&gt;
&lt;p&gt;上の動画を実現するには、
クライアント側でルーティングを行う必要があるので、
vue-routerをインストールします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://router.vuejs.org/ja/essentials/getting-started.html&quot;&gt;&lt;a href=&quot;https://router.vuejs.org/ja/essentials/getting-started.html&quot;&gt;https://router.vuejs.org/ja/essentials/getting-started.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インストールの流れは簡単で、
package.jsonに依存性を追加 -&gt; npm installです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;devDependencies&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;axios&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^0.16.2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;bootstrap-sass&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^3.3.7&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;cross-env&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^5.0.1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;jquery&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^3.1.1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;laravel-mix&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^1.0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;lodash&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^4.17.4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;vue&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^2.1.10&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;vue-router&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^2.3.0&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;クライアントでのルーティングの設定&lt;/h2&gt;
&lt;p&gt;vue-routerをインストールできたら、
app.js、web.php、app.blade.phpを下のように変更します。&lt;/p&gt;
&lt;p&gt;resourses/assets/js/app.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Vue &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; VueRouter &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;vue-router&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./bootstrap&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

Vue&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;VueRouter&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/**
 * Next, we will create a fresh Vue application instance and attach it to
 * the page. Then, you may begin adding components to this application
 * or customize the JavaScript scaffolding to fit your unique needs.
 */&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; router &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;VueRouter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;history&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; app &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Vue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    router&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;#app&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;routes/web.php&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the &quot;web&quot; middleware group. Now create something great!
|
*/&lt;/span&gt;


&lt;span class=&quot;token class-name static-context&quot;&gt;Route&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/{any}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;app&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;any&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;.*&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;resources/app.blade.php
(body部分のみ表示しています)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;app&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;header&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      {{$description = __(&apos;messages.site-description&apos;) }}
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;navbar&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{$description}}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;navbar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wrapper&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Contetns&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;hr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;router-view&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{__(&apos;labels.price&apos;)}}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;router-view&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;footer&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;nav-footer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;nav-footer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここまでが終わったら、
一度ビルドして&lt;a href=&quot;http://127.0.0.1:8000/&quot;&gt;http://127.0.0.1:8000/&lt;/a&gt; にアクセスしてみましょう。
&lt;a href=&quot;http://127.0.0.1:8000/&quot;&gt;http://127.0.0.1:8000/&lt;/a&gt; でアクセスすると上の動画のトップページが
表示され、任意のURLhttp://127.0.0.1:8000/hoge などでアクセスすると
何も表示されなければ、クライアント側でのルーティングは成功しています。&lt;/p&gt;
&lt;p&gt;さらにweb.phpを以下のように設定して、
指定したComponentを作成して配置してあげれば、
/, /example,/example/1, /example/2で
それぞれの画面を描画することができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; router &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;VueRouter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;history&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/example&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/example/1&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example1.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/example/2&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example2.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;※resources配下のソースを変更した場合は、ビルドするのを忘れずに・・・&lt;/p&gt;
&lt;p&gt;ここまでで、
クライアントでのルーティングはできるようになりました。&lt;/p&gt;
&lt;p&gt;わかりやすいように
app.jsとapp.blade.phpの全体を乗せておきます。&lt;/p&gt;
&lt;p&gt;app.blade.php&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ config(&apos;app.locale&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;utf-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;http-equiv&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;X-UA-Compatible&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;IE=edge&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;viewport&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;width=device-width, initial-scale=1&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;spa-samples&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ mix(&apos;css/app.css&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;csrf-token&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ csrf_token() }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;
    window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Laravel &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;csrfToken&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;{{ csrf_token() }}&quot;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;app&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;router-view&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;router-view&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;nav-footer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;nav-footer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ mix(&apos;js/app.js&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;app.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Vue &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; VueRouter &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;vue-router&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./bootstrap&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

Vue&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;VueRouter&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/**
 * Next, we will create a fresh Vue application instance and attach it to
 * the page. Then, you may begin adding components to this application
 * or customize the JavaScript scaffolding to fit your unique needs.
 */&lt;/span&gt;
 Vue&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;nav-footer&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/NavFooter.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; router &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;VueRouter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;history&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/example&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/example/1&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example1.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/example/2&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example2.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; app &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Vue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    router&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;#app&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;長くなったので、今回はここまでとします。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまでやると、
Vueで作成したSPAのサクサクした使用感がわかってくると
思います。
次回のAJAX通信によって画面を変更するとよりアプリケーションらしく
なって面白いかと思います。
以上です！！&lt;/p&gt;
&lt;p&gt;ここまでのソースは下記に置いておきます。&lt;/p&gt;
&lt;p&gt;&lt;ins&gt;レポジトリを変更したので、こちらのソースはfeature/step1ブランチにあります。&lt;/ins&gt;
&lt;a href=&quot;https://github.com/version-1/spa-sample&quot;&gt;&lt;a href=&quot;https://github.com/version-1/spa-sample&quot;&gt;https://github.com/version-1/spa-sample&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171011_laravel-vue-spa-2/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Laravel5.4とVue.jsでSPAを作ってみる。① -環境構築-]]></title><description><![CDATA[LaravelはVue.jsを標準でサポートしており、
お手軽にSPAのアプリを作成することができます。 だいたい二回くらいで簡単なSPAのサンプルアプリを作る計画で、
今回はまず環境構築をしてきます。 SPA…]]></description><link>https://ver-1-0.net/blog/2017/10/11/laravel-vue-spa-1</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/11/laravel-vue-spa-1</guid><pubDate>Wed, 11 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;LaravelはVue.jsを標準でサポートしており、
お手軽にSPAのアプリを作成することができます。&lt;/p&gt;
&lt;p&gt;だいたい二回くらいで簡単なSPAのサンプルアプリを作る計画で、
今回はまず環境構築をしてきます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;そもそもSPAって何？！&lt;/h2&gt;
SPAとはSingle Page Applicationの略で、
従来のDOMを直接書き換えたり、ルートから&lt;strong&gt;画面全体&lt;/strong&gt;を
再度描画(レンダリングとも言います）し直す、
&lt;strong&gt;クライアント-サーバ型&lt;/strong&gt;のアプリケーションとは別に、
仮想DOMを用いて、&lt;strong&gt;差分&lt;/strong&gt;だけ変更し、
ページ遷移を伴いwebアプリケーションのことです。
&lt;p&gt;SPAでサイトを構築すると、
いちいち画面全体の描画を行わない（ページをリロードしたりしない）ので、
&lt;strong&gt;サクサクした使用感&lt;/strong&gt;になります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;デメリット&lt;/strong&gt;としては、
ブラウザが行なっていた操作なども、
記述しないといけないとめ&lt;strong&gt;実装のコストが高く&lt;/strong&gt;、
難易度の高い技術となっていること。&lt;/p&gt;
&lt;p&gt;初期ロードでそれら実装した大量のJavaScriptコード
なども読み込む必要があるので、
&lt;strong&gt;初期読み込みに時間がかかる&lt;/strong&gt;ということがあるようです。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;環境構築　Laravelアプリ作成・Vue.jsインストール&lt;/h2&gt;
&lt;p&gt;Laravel5.4のアプリ作成
（Laravelはすでに導入済みの体です。）&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; create-project --prefer-dist laravel/laravel  my-app &lt;span class=&quot;token string&quot;&gt;&quot;5.4.*&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上でアプリが作成できたら、できたファイル群をみてみると。
以下のようになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$cd&lt;/span&gt; my-app/ &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-1&lt;/span&gt;
app
artisan
bootstrap
composer.json
composer.lock
config
database
package.json
phpunit.xml
public
readme.md
resources
routes
server.php
storage
tests
vendor
webpack.mix.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回はVueもインストールしないといけないので、
上の中にある。package.jsonをみてみると&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;devDependencies&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;axios&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^0.16.2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;bootstrap-sass&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^3.3.7&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;cross-env&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^5.0.1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;jquery&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^3.1.1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;laravel-mix&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^1.0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;lodash&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^4.17.4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;vue&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^2.1.10&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このような風に、最初からvueが
依存関係に記述されていることがわかります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;npm install&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これらのモジュールをインストールします。&lt;/p&gt;
&lt;p&gt;npmはNode.jsのパッケージを管理するツールです。
ちなみに、Nodeもすでにインストールされている前提です。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;環境構築　DB設定-sqlite3-&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今回のDBはsqlite3を使用します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$sqlite3&lt;/span&gt;
SQLite version &lt;span class=&quot;token number&quot;&gt;3.16&lt;/span&gt;.0 &lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt;-11-04 &lt;span class=&quot;token number&quot;&gt;19&lt;/span&gt;:09:39
Enter &lt;span class=&quot;token string&quot;&gt;&quot;.help&quot;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; usage hints.
Connected to a transient in-memory database.
Use &lt;span class=&quot;token string&quot;&gt;&quot;.open FILENAME&quot;&lt;/span&gt; to reopen on a persistent database.
sqlite&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; .open database/development.sqlite3
sqlite&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; .q
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;sqliteのデータベースを作成したので、
作成したものをデータベースに指定します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$cat&lt;/span&gt; .env
&lt;span class=&quot;token assign-left variable&quot;&gt;APP_NAME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Laravel
&lt;span class=&quot;token assign-left variable&quot;&gt;APP_ENV&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;local
&lt;span class=&quot;token assign-left variable&quot;&gt;APP_KEY&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;base64:tD+sSyvGr6EtipnDgOmBXCFlfwJsV6635aS3ssi/rgU&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;APP_DEBUG&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;true
&lt;span class=&quot;token assign-left variable&quot;&gt;APP_LOG_LEVEL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;debug
&lt;span class=&quot;token assign-left variable&quot;&gt;APP_URL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;http://localhost

&lt;span class=&quot;token assign-left variable&quot;&gt;DB_CONNECTION&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sqlite
&lt;span class=&quot;token assign-left variable&quot;&gt;DB_HOST&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1
&lt;span class=&quot;token assign-left variable&quot;&gt;DB_PORT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3306&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;DB_DATABASE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;/database/development.sqlite3
&lt;span class=&quot;token assign-left variable&quot;&gt;DB_USERNAME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;DB_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;BROADCAST_DRIVER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;log
&lt;span class=&quot;token assign-left variable&quot;&gt;CACHE_DRIVER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;file
&lt;span class=&quot;token assign-left variable&quot;&gt;SESSION_DRIVER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;file
&lt;span class=&quot;token assign-left variable&quot;&gt;QUEUE_DRIVER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sync

&lt;span class=&quot;token assign-left variable&quot;&gt;REDIS_HOST&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1
&lt;span class=&quot;token assign-left variable&quot;&gt;REDIS_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;null
&lt;span class=&quot;token assign-left variable&quot;&gt;REDIS_PORT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6379&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;MAIL_DRIVER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;smtp
&lt;span class=&quot;token assign-left variable&quot;&gt;MAIL_HOST&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;smtp.mailtrap.io
&lt;span class=&quot;token assign-left variable&quot;&gt;MAIL_PORT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2525&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;MAIL_USERNAME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;null
&lt;span class=&quot;token assign-left variable&quot;&gt;MAIL_PASSWORD&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;null
&lt;span class=&quot;token assign-left variable&quot;&gt;MAIL_ENCRYPTION&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;null

&lt;span class=&quot;token assign-left variable&quot;&gt;PUSHER_APP_ID&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;PUSHER_APP_KEY&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;PUSHER_APP_SECRET&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここまでで、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;php artisan serve&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;として、&lt;a href=&quot;http://127.0.0.1:8000&quot;&gt;http://127.0.0.1:8000&lt;/a&gt;
にアクセスすればLaravelのトップページは確認可能です。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;環境構築　トップページだけVueで描画してみる&lt;/h2&gt;
&lt;p&gt;作り込みは次回に回しますが、
とりあえず、npm installされた後にできるExampleページだけでも
描画できるようにしましょう。&lt;/p&gt;
&lt;p&gt;resources/views/app.blade.php(新規作成)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ config(&apos;app.locale&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;utf-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;http-equiv&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;X-UA-Compatible&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;IE=edge&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;viewport&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;width=device-width, initial-scale=1&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SPA-samples&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ mix(&apos;css/app.css&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;csrf-token&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ csrf_token() }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;
  window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Laravel &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;csrfToken&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;{{ csrf_token() }}&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;app&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;header&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      {{$description = __(&apos;messages.site-description&apos;) }}
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;navbar&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{$description}}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;navbar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wrapper&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Contetns&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;hr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;router-view&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{__(&apos;labels.price&apos;)}}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;router-view&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;footer&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;nav-footer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;nav-footer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ mix(&apos;js/app.js&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ルーティング設定で上で作成したapp.blade.phpが
読み込まれるように設定します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;routes/web.php(編集)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the &quot;web&quot; middleware group. Now create something great!
|
*/&lt;/span&gt;

&lt;span class=&quot;token class-name static-context&quot;&gt;Route&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;app&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;app.js はもともとありますが、
一応載せます。&lt;/p&gt;
&lt;p&gt;resources/assets/app.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/**
 * First we will load all of this project&apos;s JavaScript dependencies which
 * includes Vue and other libraries. It is a great starting point when
 * building robust, powerful web applications using Vue and Laravel.
 */&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./bootstrap&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Vue &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/**
 * Next, we will create a fresh Vue application instance and attach it to
 * the page. Then, you may begin adding components to this application
 * or customize the JavaScript scaffolding to fit your unique needs.
 */&lt;/span&gt;

Vue&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;example&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./components/Example.vue&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; app &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Vue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;#app&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これらが一通り終わったら&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; run dev&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;でresources配下のjsファイルなどをビルドして、
artisanでサーバを起動すると&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171011_laravel-vue-spa-1/demo.png&quot; alt=&quot;demo&quot;&gt;
&lt;p&gt;これで、
resources/assets/js/component/Example.vue
の内容が表示されていることがわかります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;row&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;col-md-8 col-md-offset-2&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel panel-default&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Example Component&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

          &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;panel-body&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
            I&apos;m an example component!
          &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;
  &lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;mounted&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Component mounted.&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上、ここまでで環境構築は終わりです。
次回は実際にVueのクライアントでのルーティングやAjax通信など
を使ってデモページを作成していきます。&lt;/p&gt;
&lt;p&gt;&lt;ins&gt;&lt;a href=&quot;https://ver-1-0.net/2017/10/11/laravel-vue-spa-2/&quot;&gt;&lt;/a&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171011_laravel-vue-spa-1/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Kotlin + Spring Boot で Web APIを作成してみる。 ~その②~]]></title><description><![CDATA[どうも前回こちらの Kotlin + Spring Boot で Web APIを作成してみる。 その①
記事でWeb APIをKotlin+Spring Bootで
作ってみるということをしてみました。   が、 前回は、
CRUDでいう所のRの部分しかAPI…]]></description><link>https://ver-1-0.net/blog/2017/10/05/kotlin-web-api</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/05/kotlin-web-api</guid><pubDate>Thu, 05 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうも前回こちらの&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/09/18/kotlin-spring-api-1/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Kotlin + Spring Boot で Web APIを作成してみる。 &lt;del&gt;その①&lt;/del&gt;&lt;/a&gt;
記事でWeb APIをKotlin+Spring Bootで
作ってみるということをしてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;が、&lt;/p&gt;
&lt;p&gt;前回は、
CRUDでいう所のRの部分しかAPIとして
提供できていなかったので、
今回はCRUDの全てのメソッドを備えたRESTfulなAPI
を目指して前回のリポジトリをブラッシュアップしました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;RESTFulなAPIにブラッシュアップ&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Controller&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; BookController &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; bookService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; BookService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ModelAndView &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ModelAndView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/book/index&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;apply&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;addObject&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAllBook&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;MutableList&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAllBook&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books/{id}&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_show&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@PathVariable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Controller&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; BookController &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; bookService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; BookService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ModelAndView &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ModelAndView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/book/index&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;apply&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;addObject&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAllBook&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;MutableList&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAllBook&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books/{id}&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_show&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@PathVariable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; method &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;arrayOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;RequestMethod&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PUT&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@RequestBody&lt;/span&gt; book&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; method &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;arrayOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;RequestMethod&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;POST&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@RequestBody&lt;/span&gt; book&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Book&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; book&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; book&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;author&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isbn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books/{id}&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;method &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;arrayOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;RequestMethod&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DELETE&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@PathVariable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; book&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;Book &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;みての通り
api_delete,api_create,api_updateがメソッド
として追加され、
HTTPをもとにして、データの更新・削除・作成・参照ができるように
なりました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;そのほかの変更について&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は新たに&lt;strong&gt;更新・削除・作成&lt;/strong&gt;
のメソッドを追加したので、
serviceについても変更を加えています。&lt;/p&gt;
&lt;p&gt;変更点は、
以下のようで&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/**
 * DBからのデータ取得と加工を行う.
 */&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Service&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; BookService &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; bookRepository&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; BookRepository&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/**
     * 全ユーザリストの取得
     * @return ユーザリスト
     */&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;findAllBook&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableList &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; bookRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;Int&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Book&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; book&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Book &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; bookRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; book
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Long&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Boolean&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; bookRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;Book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        bookRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;Book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        bookRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;今回追加したメソッドは、
save,exixts,deleteなどになりますが、
そのほとんどがBookRepositoryクラスに宣言されている
メソッドを利用しました。&lt;/p&gt;
&lt;p&gt;前回の記事をアップした際にここまではほぼ80%完成している
と思っていたのですが、
createの部分がいかんせんうまくいきませんでした。&lt;/p&gt;
&lt;p&gt;今でもなんでこんなことでスタックしてたんだろう・・・
と思うくらい簡単なことだったのですが、
前回公開した記事のsqlだとcreateができないので再掲します&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;create table &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; not exists &lt;span class=&quot;token function&quot;&gt;books&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  id int primary key auto_increment&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  name &lt;span class=&quot;token function&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  author &lt;span class=&quot;token function&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  isbn &lt;span class=&quot;token function&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  category_id int&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  created_at datetime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  updated_at datetime
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

delete from books&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
insert into books
&lt;span class=&quot;token function&quot;&gt;VALUES&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;多動力&apos; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&apos;堀江貴文&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;&lt;span class=&quot;token number&quot;&gt;9784344031159&lt;/span&gt;&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;キングダム&lt;span class=&quot;token number&quot;&gt;47&lt;/span&gt;巻&apos; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&apos;原泰久&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;&lt;span class=&quot;token number&quot;&gt;9784088907017&lt;/span&gt;&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;深夜特急〈&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;〉香港・マカオ &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;新潮文庫&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&apos; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&apos;沢木耕太郎&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;&lt;span class=&quot;token number&quot;&gt;9784101235059&lt;/span&gt;&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;はい、
驚くことにエラーの出ていた原因はテーブルの主キーに
オートインクリメントをつけていなかった為でした。。&lt;/p&gt;
&lt;p&gt;とにもかくにも
RESTfulなAPIは作成できましたので、
ここにレポジトリを晒しておきます。
&lt;a href=&quot;https://github.com/version-1/kotlin-api-sample-&quot;&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-api-sample-&quot;&gt;https://github.com/version-1/kotlin-api-sample-&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;クローンして、GET,PUT,POST,DELETEすれば
確認できるはずです。&lt;/p&gt;
&lt;p&gt;以上です！！&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171005_kotlin-web-api/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[GitHub Pagesが便利。簡単にwebアプリのデモを公開するならオススメ]]></title><description><![CDATA[どうも、近所に中華屋さんしかなくて栄養が偏りがちな
@version1です。 昔からなんかあるな〜とは思っていたのですが、前回の記事 日本地図を地方ごとにアクションを分ける〜クリッカブルマップ〜 を書いている時に使ってみて、
GitHub Pages…]]></description><link>https://ver-1-0.net/blog/2017/10/02/github-pages</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/02/github-pages</guid><pubDate>Mon, 02 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうも、近所に中華屋さんしかなくて栄養が偏りがちな
&lt;a href=&quot;https://twitter.com/version1_2017&quot;&gt;@version1&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt;昔からなんかあるな〜とは思っていたのですが、前回の記事&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/10/01/japanese-action/&quot;&gt;日本地図を地方ごとにアクションを分ける〜クリッカブルマップ〜&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;を書いている時に使ってみて、
&lt;strong&gt;GitHub Pages便利！！&lt;/strong&gt;
となりました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages | Websites for you and your projects, hosted directly ..&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ので、紹介して行きます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;GitにPushするだけでwebページを公開できる。&lt;/h2&gt;
&lt;p&gt;このGitHubを使うと、
&lt;strong&gt;Webアプリ&lt;/strong&gt;の&lt;strong&gt;デモの公開&lt;/strong&gt;が
GitPushするだけでできてしまいます。&lt;/p&gt;
&lt;p&gt;前回の日本地図の記事でも
デモを公開していますが、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;GitPushしたあとにRepositoryで設定を行うと
このようにすぐwebページを公開できます。&lt;/p&gt;
&lt;p&gt; 
&lt;code class=&quot;language-text&quot;&gt;http://{your account name}.github.io/{repository name}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;例）
&lt;a href=&quot;https://version-1.github.io/imagemap/&quot;&gt;&lt;a href=&quot;https://version-1.github.io/imagemap/&quot;&gt;https://version-1.github.io/imagemap/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Git Pagesの設定方法&lt;/h2&gt;
&lt;p&gt;1.適当なwebページ用のリポジトリを作成
(もちろんPush )&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171002_github-pages/setting1.png&quot; alt=&quot;setting&quot;&gt;
&lt;p&gt;2.リポジトリの「Settings」のページに
行き、Sourceのところでmaster branchを選択する。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171002_github-pages/setting2.png&quot; alt=&quot;setting&quot;&gt;
&lt;p&gt;3.master branch を選択しSAVEを押した所で、
「 Your site is published at {url}」
のように表示されたらOK。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171002_github-pages/setting3.png&quot; alt=&quot;setting&quot;&gt;
&lt;p&gt;ページが作成されるまで、一定の時間がかかるので、しばらく待ってからアクセスすると&lt;/p&gt;
&lt;p&gt;リポジトリのindex.htmlが開かれて
自分のwebページが表示されます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;以上、
GitHup Pagesだと本当に設定いらずでページ公開できます。&lt;/p&gt;
&lt;p&gt;さすがにPHPやRubyなどサーバ側でもプログラムを動かす動的なページの作成は難しいですが、&lt;/p&gt;
&lt;p&gt;html,css,javascriptあたりのデモであれば
簡単に公開することができます。&lt;/p&gt;
&lt;p&gt;もっというと、他のツールも併用するとブログなどもできてしまうようです。
&lt;a href=&quot;https://liginc.co.jp/web/programming/server/104594&quot;&gt;&lt;a href=&quot;https://liginc.co.jp/web/programming/server/104594&quot;&gt;https://liginc.co.jp/web/programming/server/104594&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以上、です。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171002_github-pages/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[日本地図を地方にアクションを分ける~クリッカブルマップ~]]></title><description><![CDATA[どうも、運転が苦手な@version…]]></description><link>https://ver-1-0.net/blog/2017/10/01/japanese-action</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/10/01/japanese-action</guid><pubDate>Sun, 01 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうも、運転が苦手な@version1です。&lt;/p&gt;
&lt;p&gt;今回は仕事で地図の中でクリックされた座標を元にアクションを分けるという機能を実装する必要が
あったので、それの方法を調べてみました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;〜クリッカブルマップ〜座標でアクションを分ける、難しそう・・・&lt;/h2&gt;
&lt;p&gt;どうやらクリッカブルマップというのを使うと地図の中でアクションを分けることが実現できるようです。&lt;/p&gt;
&lt;p&gt;が、、、&lt;strong&gt;「え、難しそう」&lt;/strong&gt;これが第一印象でした。
でも、意外とそうでもないみたいです。&lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt;文章でいうと&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;
いつものようにimgタグを貼り付けて画像を表示する。
&lt;/li&gt;
 	&lt;li&gt;
その下にmapタグを貼り付ける。（そこで座標を指定する。）
&lt;/li&gt;
 	&lt;li&gt;
imgタグにusemap属性とmapタグのname属性に対応する名前をつける。
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;で2で指定した座標の画像ごとにアクションを分けることができます。&lt;/p&gt;
&lt;p&gt;あれ、でも&lt;/p&gt;
&lt;p&gt;ちょっと待って座標を指定するとかヒョロっと言っているけどそこが一番大変なんじゃないの？&lt;/p&gt;
&lt;p&gt;というツッコミが入ると思うので
コードを貼り付けます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;img/color_ken_nashi.gif&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;usemap&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#ImageMap&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;map&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ImageMap&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;area&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;poly&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;coords&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;695,20,779,96,816,82,806,104,811,117,831,118,783,140,741,143,716,168,661,132,633,142,611,127,625,144,638,161,620,159,593,171,590,162,598,145,589,133,592,119,614,114,623,111,619,100,626,96,636,104,656,106,663,85,676,82,673,83&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;hokkaido&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;area&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;poly&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;coords&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;632,169,652,177,647,178,641,191,662,235,629,296,611,295,601,315,606,337,532,337,531,325,553,309,562,290,553,279,579,248,583,229,576,229,573,223,589,215,582,197,632,169,632,169&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tohoku&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;area&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;poly&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;coords&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;594,350,532,339,504,341,489,357,499,363,500,377,515,394,504,401,509,411,524,410,539,421,560,417,574,401,587,399,577,381,577,381&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;kanto&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;area&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;poly&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;coords&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;494,430,510,417,504,402,514,393,500,378,497,365,489,358,503,342,528,336,528,324,552,310,562,290,552,282,502,321,455,330,447,338,434,331,453,309,450,307,429,312,419,340,378,365,378,370,369,378,355,372,358,382,369,389,397,376,397,395,407,399,414,417,421,422,421,422&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;cyubu&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;area&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;poly&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;coords&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;409,405,406,397,396,394,393,374,366,387,354,372,354,364,314,362,318,372,303,388,306,399,321,399,335,409,327,437,355,455,393,432,403,433,410,426,410,426&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;kansai&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;area&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;poly&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;coords&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;315,367,246,360,187,384,182,392,156,390,152,405,176,413,213,420,222,403,230,409,260,409,266,403,286,407,306,400,301,401&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;cyugoku&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;area&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;poly&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;coords&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;264,420,282,410,307,420,312,436,291,446,280,454,265,443,245,445,239,453,228,458,223,469,209,463,205,456,208,443,194,433,217,429,235,414,244,422,242,422&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;shikoku&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;area&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;poly&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;coords&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;81,419,154,406,152,415,169,423,177,420,182,425,169,432,174,438,183,438,184,445,180,451,190,455,139,510,106,517,86,501,98,469,94,443,82,437,82,437&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;kyushu&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;「え。。。正気？なんか数字が一杯並んでいるけど」&lt;/strong&gt;
 &lt;/p&gt;
&lt;p&gt;と心配される方もいるかも&lt;/p&gt;
&lt;p&gt;しれませんが、&lt;/p&gt;
&lt;p&gt;実は下のツールを使うと、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;自分で、切り取る図形を選択しながらクリッカブルマップの座標を
取得できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://labs.d-s-b.jp/ImagemapGenerator/&quot;&gt;HTML Imagemap Generator - dreamseeker&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;使い方としては、
&lt;strong&gt;①画像アップロード&lt;/strong&gt;
&lt;strong&gt;②モード選択（日本地図の場合は多角形モードでやりました）&lt;/strong&gt;
&lt;strong&gt;③各地方の境界線をツールを使ってなぞっていく&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;と言った感じです。
割と地味な作業ですが難しくはないです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;レスポンシブにも対応するクリッカブルマップ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;上の手順で頑張って、
座標を立てたにも関わらず、
Webページのものについては、
必ずレスポンシブという障害があります。
（画面の大きさも変われば、座標の位置も変わるよね。。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;が、
これも、
&lt;a href=&quot;https://github.com/stowball/jQuery-rwdImageMaps&quot;&gt;jQuery-rwdImageMaps&lt;/a&gt;
というライブラリを使えば解決できます。&lt;/p&gt;
&lt;p&gt;使い方としては、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ready&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;img[usemap]&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rwdImageMaps&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のような感じで、
簡単に画像要素を指定するだけです。&lt;/p&gt;
&lt;p&gt;これで、
画面の大きさを変えても
このライブラリが座標を良い感じに変更してくれます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;成果物&lt;/h2&gt;
&lt;p&gt;という事で、
今回この技術を使って、
簡単なデモを作りました。&lt;/p&gt;
&lt;p&gt;日本地図をクリックするとクリックされた
地方の県名の一覧が表示されるという
簡単なものです。&lt;/p&gt;
&lt;p&gt;gitで公開しているので、
よかったら見てみてください。
&lt;a href=&quot;https://version-1.github.io/imagemap/&quot;&gt;&lt;a href=&quot;https://version-1.github.io/imagemap/&quot;&gt;https://version-1.github.io/imagemap/&lt;/a&gt;&lt;/a&gt;
(今は簡単なものであればgit上で簡単なページで作れるんですね。）&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/10/20171001_japanese-action/japan-map.png&quot; alt=&quot;Japan Map&quot;&gt;
&lt;p&gt;以上です！！&lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/10/20171001_japanese-action/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[飽きっぽい人にお勧めする良書3選]]></title><description><![CDATA[どうも3連休明けの
@version…]]></description><link>https://ver-1-0.net/blog/2017/09/20/books-for-akippoi</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/09/20/books-for-akippoi</guid><pubDate>Wed, 20 Sep 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうも3連休明けの
@version1です。&lt;/p&gt;
&lt;p&gt;私は自分で
結構&lt;strong&gt;飽きっぽい&lt;/strong&gt;と自覚しているのですが、
皆さんはどうでしょうか？&lt;/p&gt;
&lt;p&gt;エンジニアなので、&lt;strong&gt;一人で黙々と作業するのが苦でなく、好き&lt;/strong&gt;でもあるんですが、長期的にみると色々な事に手を出していてプログラミングの勉強もしたい、投資の勉強もしたい、英語の勉強も。。
という感じで気付いているとやる事が増えすぎて、定期的にやらないことの整理みたいなのが必要になってくることが多々あります。
やはり日本のお国柄なのか、飽きっぽいというのはあまり良いイメージをもたれないので、&lt;/p&gt;
&lt;p&gt;「このままでは良くない！」と思う事もあるんですが、&lt;/p&gt;
&lt;p&gt;私自身多くの場合、好奇心旺盛とか、興味の幅が広いとかとかプラスに捉えてなんとかやりくりしています。
そんなこんなで飽きっぽいって良い事なの？悪い事なの？という疑問がある人が興味を持ちそうな書籍を紹介させていただきます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;一貫したテーマを持って手数出した人の勝ち&lt;/h2&gt;
&lt;p&gt;先に紹介する本を載せておくとこのような感じになります。&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;&lt;a href=&quot;http://amzn.to/2w6ARbX&quot;&gt;多動力　（著）堀江貴文&lt;/a&gt;&lt;/li&gt;
 	&lt;li&gt;&lt;a href=&quot;http://amzn.to/2w7rmcf&quot;&gt;極めるひとほどあきっぽい　（著）窪田良&lt;/a&gt;&lt;/li&gt;
 	&lt;li&gt;&lt;a href=&quot;http://amzn.to/2xi5Inn&quot;&gt;やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける 　（著）アンジェラ・ダックワース&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
これらの本は、自分自信が&lt;strong&gt;「飽きっぽい」&lt;/strong&gt;と感じているので、ついつい買って読んでしまいました。
&lt;p&gt;どれも面白い本でしたが、&lt;strong&gt;多動力&lt;/strong&gt;と&lt;strong&gt;Grid（やり抜く力）&lt;/strong&gt;が対極にある考えのタイトルで面白いですね。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;多動力&lt;/strong&gt;はインターネットが普及して、業界の壁が崩れてきているのに、一生を一つの会社とか一つの肩書きで終えるのは勿体無いよね。と言っていて、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grid&lt;/strong&gt;は、才能があるからって成功できる訳ではなく、情熱があってやり抜けるということが大事で、さらにその粘り強さも鍛えることが可能です。ということを言っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;タイトルをみると意見が真っ向からぶつかっているように見えますが、読んでみるとどちらも&lt;strong&gt;1万時間の鍛錬&lt;/strong&gt;について言及してて、やっぱり&lt;strong&gt;集中すること&lt;/strong&gt;や&lt;strong&gt;のめりこむこと&lt;/strong&gt;について言っていて、違う角度から同じことを言っているようにも思えます。&lt;/p&gt;
&lt;p&gt;さらに二番目に紹介する
「極めるひとほど飽きっぽい」でも、窪田さんは研究者、臨床医、バイオベンチャーの起業家など様々な経歴は持ちますが&lt;strong&gt;一貫して&lt;/strong&gt;&lt;strong&gt; 「眼」&lt;/strong&gt;というテーマを持って仕事をしていると書いています。&lt;/p&gt;
&lt;p&gt;とこれら、
三冊を実際に読んでみてまとめてみると&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一貫したテーマを自分の中に持ちつつ、それに必要な要素を手数多く試したもん勝ち&lt;/strong&gt;
というようになるんでしょうね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「飽きっぽい」&lt;/strong&gt;みなさんまだ読んだことのない本がこの中に
あればぜひ読んでみてはいかがでしょうか？？&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;多動力　（著) 堀江貴文&lt;/h2&gt;
&lt;div class=&quot;cstmreba&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4344031156/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/51of-IcKWRL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4344031156/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;多動力 (NewsPicks Book)&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;堀江 貴文 幻冬舎 2017-05-27    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4344031156/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B072HVZ9RF/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F14918400%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-34-403115-9%252520%25257C%2525204-344-03115-9%252520%25257C%2525204-3440-3115-9%252520%25257C%2525204-34403-115-9%252520%25257C%2525204-344031-15-9%252520%25257C%2525204-3440311-5-9&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;言わずもがな、最近話題となったホリエモンの&lt;strong&gt;多動力&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;高度経済成長期の終身雇用の時代は１つの会社に勤め上げることが美徳とされていしました。景気も良く待遇も良くなるので「飽きっぽい」というのはマイナスで１つのことをコツコツと続けるのがよしとされ、転職さえも悪者として扱われていました。&lt;/p&gt;
&lt;p&gt;が、&lt;/p&gt;
&lt;p&gt;「多動力」では、業界の垣根を超えた仕事であったり、肩書きに囚われないことが重要であると説いています。
（細かい内容は実際読んでみてください。。。自分は原液のくだりとか好きです）&lt;/p&gt;
&lt;p&gt;読んだ感想も記事にしているので興味があればどうぞ&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/05/28/tado-ryoku/&quot;&gt;=&gt;「多動力」読んでみた&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;極める人ほど飽きっぽい　（著）窪田 良&lt;/h2&gt;
&lt;div class=&quot;cstmreba&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4822274209/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/513Eg1ZIsfL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4822274209/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;極めるひとほどあきっぽい&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;窪田 良 日経BP社 2013-05-23    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4822274209/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B00F3UTNUK/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F12279899%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-82-227420-7%252520%25257C%2525204-822-27420-7%252520%25257C%2525204-8222-7420-7%252520%25257C%2525204-82227-420-7%252520%25257C%2525204-822274-20-7%252520%25257C%2525204-8222742-0-7&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こちらは、20代で加齢黄斑変性の原因遺伝子を発見し、30代は眼の臨床医として活躍し、40代で、バイオベンチャーを立ち上げCEOに就任した多様な経歴を持つ窪田良さんの本です。&lt;/p&gt;
&lt;p&gt;本書では、専門性のある人は多趣味な場合が多く、飽きっぽいほどに好奇心が強くないとなにかを極める事はできない。&lt;/p&gt;
&lt;p&gt;一生でなにか１つの付加価値を身につけたところで、いつそのスキルが陳腐化してもおかしくないと指摘しています。
（眼というテーマに対して様々な角度からチャレンジし続けているというところがイケてますね）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける&lt;/h2&gt;
&lt;div class=&quot;cstmreba&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4478064806/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/51VtDFjmZdL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4478064806/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;アンジェラ・ダックワース ダイヤモンド社 2016-09-09    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4478064806/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B01LMP9RLY/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F14398454%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-47-806480-1%252520%25257C%2525204-478-06480-1%252520%25257C%2525204-4780-6480-1%252520%25257C%2525204-47806-480-1%252520%25257C%2525204-478064-80-1%252520%25257C%2525204-4780648-0-1&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://amzn.to/2xgN4vO&quot;&gt;やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本書は、人生でなにかを成し遂げるには生まれもった才能よりも情熱と粘り強さが関係する可能性が高いことを突き止め、アメリカで天才賞と呼ばれるマッカーサー賞を受賞した心理学者の本です。&lt;/p&gt;
&lt;p&gt;グリーンベレーと共同研究の内容や著者自信の教師の経験談などから、やり抜く力を持った人が良い成績をあげることことを指摘し、成功者の共通点ややり抜く力の高め方などについて言及しています。
（他の二冊よりはより科学的な書き方になっています。個人的には冒頭の著者と著者のエピソードが好きです）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/09/20170920_books-for-akippoi/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Kotlin + Spring Boot で Web APIを作成してみる。 ~その①~]]></title><description><![CDATA[こんばんは、
3連休でどこも出かけなかった
@version1
です。   もう少し有意義に過ごせたのでは、
という思いは募る一方ですが、
それは置いておいて久しぶりにKotlinに関する記事です。 (3連休でこれしか更新していない・・・
+CRUD全てをAPI…]]></description><link>https://ver-1-0.net/blog/2017/09/18/kotlin-spring-api-1</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/09/18/kotlin-spring-api-1</guid><pubDate>Mon, 18 Sep 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こんばんは、
3連休でどこも出かけなかった
&lt;a href=&quot;https://twitter.com/?lang=ja&quot;&gt;@version1&lt;/a&gt;
です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;もう少し有意義に過ごせたのでは、
という思いは募る一方ですが、
それは置いておいて久しぶりに&lt;strong&gt;Kotlin&lt;/strong&gt;に関する記事です。&lt;/p&gt;
&lt;p&gt;(3連休でこれしか更新していない・・・
+CRUD全てをAPIからできるようにしたかったけど
終わらなかった。。)&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;タイトルもその①としたように、
今回はAPIで本のリストと、ID指定した本一件を
jsonで返却するAPIまでです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そのほかの、&lt;strong&gt;作成・削除・更新&lt;/strong&gt;は
いつの日か更新します！！
（8割くらいはできているんだけど、詰めの部分でまだあげられないとして
今回の記事からは外しました。）&lt;/p&gt;
&lt;p&gt;ではでは早速行きましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;前提条件&lt;/h2&gt;
&lt;p&gt;使用する構成はいつもの通りです。&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Framework:&lt;/th&gt;
&lt;td&gt;Spring Boot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Language:&lt;/th&gt;
&lt;td&gt;Kotlin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Database:&lt;/th&gt;
&lt;td&gt;Mysql&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Build:&lt;/th&gt;
&lt;td&gt;Gradle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&amp;nbsp;
&lt;p&gt;データベースは
booksテーブルだけで、
これを&lt;strong&gt;Kotlin+SpringBoot&lt;/strong&gt;でこねこねして
jsonで返却するの今回のミッションになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ちなみに今回使用するテーブルは
SQLだと以下のようになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;create table &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; not exists &lt;span class=&quot;token function&quot;&gt;books&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  id int primary key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  name &lt;span class=&quot;token function&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  author &lt;span class=&quot;token function&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  isbn &lt;span class=&quot;token function&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  category_id int&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  created_at datetime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  updated_at datetime
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

delete from books&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
insert into books
&lt;span class=&quot;token function&quot;&gt;VALUES&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;多動力&apos; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&apos;堀江貴文&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;&lt;span class=&quot;token number&quot;&gt;9784344031159&lt;/span&gt;&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;キングダム&lt;span class=&quot;token number&quot;&gt;47&lt;/span&gt;巻&apos; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&apos;原泰久&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;&lt;span class=&quot;token number&quot;&gt;9784088907017&lt;/span&gt;&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;深夜特急〈&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;〉香港・マカオ &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;新潮文庫&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&apos; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&apos;沢木耕太郎&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &apos;&lt;span class=&quot;token number&quot;&gt;9784101235059&lt;/span&gt;&apos;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;イメージが湧きづらい人用に
一覧ページも作成しました。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170918_kotlin-spring-api-1/books.png&quot; alt=&quot;books&quot;&gt;
&lt;p&gt;↑この一覧がJSON形式で取得できれば成功です。&lt;/p&gt;
&lt;p&gt;ちなみにgitレポジトリも用意したので
どうぞ。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-api-sample-&quot;&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-api-sample-&quot;&gt;https://github.com/version-1/kotlin-api-sample-&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;早速Kotlin+SpringBoot APIの説明&lt;/h2&gt;
&lt;p&gt;はじめに、ファイル構成を&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170918_kotlin-spring-api-1/dir-structure.png&quot; alt=&quot;Directory Structure&quot;&gt;
&lt;p&gt;このように
以前のKotlinシリーズでもおなじみの
構成となっております。&lt;/p&gt;
&lt;p&gt;わからない方はこちらが参考になるかと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ver-1-0.net/2017/02/13/kotlin-spring-boot/&quot;&gt;Kotlin + Spring boot で DBからデータ取得して画面に表示&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;はい、
では下が実際のコードです。&lt;/p&gt;
&lt;p&gt;BookController&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Controller&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; BookController &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; bookService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; BookService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ModelAndView &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ModelAndView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/book/index&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;apply&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;addObject&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAllBook&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;MutableList&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAllBook&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books/{id}&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_show&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@PathVariable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; ResponseEntity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bookService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;それぞれなんてことはないコードですね。&lt;/p&gt;
&lt;p&gt;個人的な今回の学びは、
URLから値をとってくるのに&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/api/books/{id}&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;api_show&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@PathVariable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ResponseEntity &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにかけることと&lt;/p&gt;
&lt;p&gt;ResponseEntityクラスを使うとクラスをそのまま
jsonにして返却できることですかね。&lt;/p&gt;
&lt;p&gt;ちなみに
springを起動して&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://localhost:8080/api/books&quot;&gt;http://localhost:8080/api/books&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;にアクセスすると&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170918_kotlin-spring-api-1/browser1.png&quot; alt=&quot;browser1&quot;&gt;
&lt;p&gt;本の一覧が&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://localhost:8080/api/books/1%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B%E3%81%A8&quot;&gt;http://localhost:8080/api/books/1にアクセスすると&lt;/a&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170918_kotlin-spring-api-1/browser2.png&quot; alt=&quot;browser2&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;指定したIDの本一件を取得することができます。以上、参照だけだと結構さっくり終わりますね。
次回は作成・更新・削除の部分を公開します。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/09/20170918_kotlin-spring-api-1/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[自分の名前を晒すのやめましょう。。 iPhoneのSSIDの変更のしかた]]></title><description><![CDATA[どうも、
平日の寝不足が休日に繰り越されている
@version1です。
眠い。。
そんなどうでも良いことは
置いておいて
最近こんなツイートをしてみました。   @version…]]></description><link>https://ver-1-0.net/blog/2017/09/03/how-to-change-ssid</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/09/03/how-to-change-ssid</guid><pubDate>Sun, 03 Sep 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうも、
平日の寝不足が休日に繰り越されている
&lt;a href=&quot;https://twitter.com/version1_2017&quot;&gt;@version1&lt;/a&gt;です。
眠い。。
そんなどうでも良いことは
置いておいて
最近こんなツイートをしてみました。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170903_how-to-change-ssid/ssid-tweet.png&quot; alt=&quot;ssid tweet&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;iPhoneのSSIDに名前が含まれる人は変更しましょう&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/version1_2017&quot;&gt;@version1&lt;/a&gt;
は、
普通に電車で通勤しているのですが、
電車の中で携帯をいじっていると
勝手に携帯がアクセスポイントを探し始める時が
あります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そこで最近気づくのですが、
&lt;strong&gt;「〇〇（人の名前）のiPhone」&lt;/strong&gt;
みたいな
SSIDの人がちょこちょこいます。&lt;/p&gt;
&lt;p&gt;おそらく、
iPhoneを買った後の
初期設定のままなのでしょう。。。&lt;/p&gt;
&lt;p&gt;それだけでは、
個人は特定は難しいのですが、
例えば、
車内に女性が一人で「〇〇（人の名前）のiPhone」というのが
女性の名前だったら簡単に
その人の個人名がバレてしまいます。&lt;/p&gt;
&lt;p&gt;そこまで警戒しなくても。。。
というのは
あるかとも思うのですが、
知っていて個人の名前を公開しているのと
知らないのとでは大きな違いがあるので、
一応このブログで&lt;strong&gt;注意喚起&lt;/strong&gt;しておきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;そもそもSSIDって何？？？&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;知らない方の為に書いておきますと、
SSIDとは、
WI-FIのアクセスポイントを識別するためのID
になります。&lt;/p&gt;
&lt;p&gt;街中でWiFiをオンにすると、
接続できるアクセスポイントの名前がずらっとリスト
で表示されると思いますが、
それのことです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;SSIDの変更の仕方&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;本当に簡単なので
これを見たらすぐに変更しましょう&lt;/p&gt;
&lt;h3&gt;①iPhoneホーム画面より「設定」（灰色の歯車のアイコン）をタップ&lt;/h3&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id=&quot;リストより一般を選択&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%82%B9%E3%83%88%E3%82%88%E3%82%8A%E4%B8%80%E8%88%AC%E3%82%92%E9%81%B8%E6%8A%9E&quot; aria-label=&quot;リストより一般を選択 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;②リストより「一般」を選択&lt;/h3&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170903_how-to-change-ssid/change-ssid-1.png&quot; alt=&quot;How To Change SSID&quot;&gt;
&lt;h3 id=&quot;情報をタップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%83%85%E5%A0%B1%E3%82%92%E3%82%BF%E3%83%83%E3%83%97&quot; aria-label=&quot;情報をタップ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;③「情報」をタップ&lt;/h3&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170903_how-to-change-ssid/change-ssid-2.png&quot; alt=&quot;How To Change SSID&quot;&gt;
&lt;h3 id=&quot;名前をタップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%90%8D%E5%89%8D%E3%82%92%E3%82%BF%E3%83%83%E3%83%97&quot; aria-label=&quot;名前をタップ permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;④「名前」をタップ&lt;/h3&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170903_how-to-change-ssid/change-ssid-3.png&quot; alt=&quot;How To Change SSID&quot;&gt;
&lt;h3 id=&quot;端末の名前が表示されるのでここで自分の好きな名前に変更&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%AB%AF%E6%9C%AB%E3%81%AE%E5%90%8D%E5%89%8D%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%93%E3%81%93%E3%81%A7%E8%87%AA%E5%88%86%E3%81%AE%E5%A5%BD%E3%81%8D%E3%81%AA%E5%90%8D%E5%89%8D%E3%81%AB%E5%A4%89%E6%9B%B4&quot; aria-label=&quot;端末の名前が表示されるのでここで自分の好きな名前に変更 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;⑤端末の名前が表示されるのでここで自分の好きな名前に変更&lt;/h3&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170903_how-to-change-ssid/change-ssid-4.png&quot; alt=&quot;How To Change SSID&quot;&gt;
&lt;p&gt;以上、
1分かからずにできる手順です。&lt;/p&gt;
&lt;p&gt;繰り返しになりますが、
本当に簡単に変えられるので
これを機に設定を変更しておきましょう。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/09/20170903_how-to-change-ssid/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CodePen - webサービスのデザインを考えるときにおすすめの海外サイト]]></title><description><![CDATA[どうも@version1です。 私はwebサイトの
デザインとかレイアウトを
考えるときは、ググって「いいね！」って
思うのを探すことが多いんですが、 それをするのにおすすめのサイトが
あったので紹介します。 それは、
CodePen…]]></description><link>https://ver-1-0.net/blog/2017/09/02/codepen</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/09/02/codepen</guid><pubDate>Sat, 02 Sep 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうも&lt;a href=&quot;https://twitter.com/version1_2017&quot;&gt;@version1&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt;私はwebサイトの
デザインとかレイアウトを
考えるときは、ググって「いいね！」って
思うのを探すことが多いんですが、&lt;/p&gt;
&lt;p&gt;それをするのに&lt;strong&gt;おすすめのサイト&lt;/strong&gt;が
あったので紹介します。&lt;/p&gt;
&lt;p&gt;それは、
&lt;a href=&quot;https://codepen.io/&quot;&gt;CodePen&lt;/a&gt;というサイトで
ここには、数々の
イケてるデザインレイアウトやコンポーネントなどがアップされています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codepen.io/&quot;&gt;&lt;a href=&quot;https://codepen.io/&quot;&gt;https://codepen.io/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170902_codepen/codepen.png&quot; alt=&quot;codepen&quot;&gt;
&lt;h2 class=&quot;chapter&quot;&gt; 気に入ったデザインを探して参考にしてみる&lt;/h2&gt;
&lt;p&gt;例えばですが、
自分のサイトのログインフォームを
チャチャッと作りたいけど
なんか「良いレイアウトとか配色ないかなぁ」
と考えたら&lt;/p&gt;
&lt;p&gt;サイトの右上の虫眼鏡の部分をクリックして
「Login」
とかで検索します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codepen.io/search/pens?q=Login&amp;amp;limit=all&amp;amp;type=type-pens&quot;&gt;&lt;a href=&quot;https://codepen.io/search/pens?q=Login&amp;#x26;amp;limit=all&amp;#x26;amp;type=type-pens&quot;&gt;https://codepen.io/search/pens?q=Login&amp;#x26;amp;limit=all&amp;#x26;amp;type=type-pens&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;そうすると
ズラってイケてるデザインが
出てきます。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/09/20170902_codepen/codepen-search-result.png&quot; alt=&quot;CodePen Search Result&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そして、
きになるデザインがポチッと
クリックすれば
気になるデザインのhtml,css,javascriptの
コードが見れます。&lt;/p&gt;
&lt;p&gt;コードを見たり、
どうやって書いているんだろうというのを
見てみたり、
(このスケスケどうやっているんだろうとか）
気入ったデザインにコメントしたり
使い方は自由です！&lt;/p&gt;
&lt;p&gt;というか見てるだけでも割とワクワクして
見てられます！&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;自分でもアップロードしてみた&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;そもそも、
ログインフォームを
作るのに
どんな感じで作ろかなぁというので
このサイトに辿りついたので、
自分でも作成したものをアップロードしてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;iframe height=&quot;500&quot; width=&quot;300&quot; scrolling=&apos;yes&apos; title=&apos;Simple Login Form&apos; src=&apos;https://codepen.io/version1/embed/QMVzJd/?height=265&amp;theme-id=0&amp;default-tab=result,result&amp;embed-version=2&apos; frameborder=&apos;no&apos; allowtransparency=&apos;true&apos; allowfullscreen=&apos;true&apos;&gt;See the Pen &lt;a href=&apos;https://codepen.io/version1/pen/QMVzJd/&apos;&gt;Simple Login Form&lt;/a&gt; by version1 (&lt;a href=&apos;https://codepen.io/version1&apos;&gt;@version1&lt;/a&gt;) on &lt;a href=&apos;https://codepen.io&apos;&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;・・・&lt;/p&gt;
&lt;p&gt;他の人気デザインに比べれば
だいぶ見劣りしますが&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まあまあとりあえずはこんなところで、
(Edit on CodePenというところを押すとサイトで見れます）
 
CodePenを使えば上のようにブログでのシェアも簡単なので
ぜひ使ってみると良いと思います！！&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以上です！&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;webデザインの基本のちょっと上を学ぶなら
この本をオススメします。&lt;/p&gt;
&lt;p&gt;css,htmlはわかっているけど
なんかデザインとかレイアウト
とかはいまいちという人はこの本にあるコードを
真似してみると良いと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4798141577/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798141577&amp;linkCode=as2&amp;tag=llg01-22&amp;linkId=59c6ec7214ebedaca86ef962b5ea40ac&quot;&gt;HTML5/CSS3モダンコーディング フロントエンドエンジニアが教える3つの本格レイアウト スタンダード・グリッド・シングルページレイアウトの作り方 (WEB Engineer’s Books)&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;l=am2&amp;amp;o=9&amp;amp;a=4798141577&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798141577/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798141577&amp;linkCode=as2&amp;tag=llg01-22&amp;linkId=6211e8a5d20ef0dc2a07bf1e1e7586b0&quot;&gt;&lt;img height=&quot;250&quot; width=&quot;183&quot; layout=&quot;fixed&quot; border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;MarketPlace=JP&amp;amp;ASIN=4798141577&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL250_&amp;amp;tag=llg01-22&quot;&gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;l=am2&amp;amp;o=9&amp;amp;a=4798141577&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;
 &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/09/20170902_codepen/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Laravel5.4の多言語化]]></title><description><![CDATA[どうも
多言語化というと
たいそうな話に聞きこえますが、
Laravelでのロケールの話です。 つまり、
webアプリケーションを作る時に
html…]]></description><link>https://ver-1-0.net/blog/2017/08/13/international-laravel</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/08/13/international-laravel</guid><pubDate>Sun, 13 Aug 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうも
多言語化というと
たいそうな話に聞きこえますが、
Laravelでのロケールの話です。&lt;/p&gt;
&lt;p&gt;つまり、
webアプリケーションを作る時に
htmlに文字をベタ書きしてしまうと、
あとあと
「このサイト英語にするのどれくらいかかる？」
とかの
無邪気な質問に対応しづらくなります。&lt;/p&gt;
&lt;p&gt;ベタ書きしてしまうと、
後から、置き換える必要のある場所を洗い出して
全部htmlなりテンプレートファイルを
書き換えないといけません。&lt;/p&gt;
&lt;p&gt;最近
Laravelでアプリを作りはじめていて
使い方を調べたので、
ここにまとめておきます。&lt;/p&gt;
&lt;p&gt;ちなみにLaravelのバージョンは5.4です。
この記事はここを参考にしました。
&lt;a href=&quot;https://laravel.com/docs/5.4/localization&quot;&gt;&lt;a href=&quot;https://laravel.com/docs/5.4/localization&quot;&gt;https://laravel.com/docs/5.4/localization&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;ロケールファイルの置き場所&lt;/h2&gt;
&lt;p&gt;ロケールファイルこのように、
resources/lang/の下に
言語に分けてそれぞれの言語ファイルを置いて起きます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;resources
    &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;lang
        &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;en
            messages&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;php
        &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;ja
            messages&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;php
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;それぞれの中身は
(英語版) lang/en/message.php&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;　&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;description&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;welcome to our site. this is shopping site on the web !!&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(日本語版) lang/ja/message.php&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;description&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ようこそ私たちのオンラインショッピングサイトへ&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;になります。
このようにしておくと
message.descriptionなどを
キーにviewファイルから文字を呼びだすようになります。&lt;/p&gt;
&lt;h2&gt;ロケールファイルに書いたメッセージの呼び出し&lt;/h2&gt;
&lt;p&gt;上の設定が住んで入れば、
view ファイルで&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token function&quot;&gt;__&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;message.description&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&apos;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のように、
呼び出せます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2  class=&quot;chapter&quot;&gt;ロケールの設定&lt;/h2&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;p&gt;ここまでで、
・言語ごとのロケールファイルの設定
・viewファイルでの呼び出し&lt;/p&gt;
&lt;p&gt;はできます。
が、
日本語が呼ばれるか、英語が呼ばれるかどこで判断するの？
という疑問が生まれると思います。&lt;/p&gt;
&lt;p&gt;それがどこかというと、
それは、&lt;/p&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;p&gt;config/app.phpのlocaleになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/&lt;/span&gt;

&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;locale&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ja&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;また、config/app.phpはアプリの起動時に
読まれるはずですが、
アプリの起動中でも&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token class-name static-context&quot;&gt;Route&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;welcome/{locale}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$locale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token class-name static-context&quot;&gt;App&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setLocale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$locale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;//&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のような形でロケールを変更できるよう。&lt;/p&gt;
&lt;p&gt;これはやってみてはないですが、
これを使って、
言語をユーザに選ばせるとかはできそう。&lt;/p&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;おまけ - メッセージを動的にする&lt;/h2&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;p&gt;以下は少し補足的な内容になりますが、
メッセージを動的に変化させたい時ありますよね。&lt;/p&gt;
&lt;p&gt;例えば、
ログイン後の画面でよくある「ようこそ〇〇さん」みたいな表示です。&lt;/p&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;p&gt;これをロケールでやろうとすると
(英語版)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;　&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;welcom&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;:name　, welcome to our site!!&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(日本語版)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;welcom&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;ようこそ :name さん&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにファイルに定義して、
呼び出す際に&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token function&quot;&gt;__&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;messages.welcome&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;name&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;John&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにすれば、
変数の文字を埋め込んだ形でメッセージを表示することができます。&lt;/p&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;p&gt;ここまでで、
ロケールとか国際化とか多言語化とかに
役立つ情報をまとめました。&lt;/p&gt;
&lt;p&gt;これはアプリを多言語で作ると決めてから
コツコツ両方のロケールを更新していくという作業
が必要なので、
早めに知っておくと良いと思います。
（後から文字を全部置き換えるという単純作業は地獄なので・・・）&lt;/p&gt;
&lt;p&gt;以上です!!&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/08/20170813_international-laravel/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[LaravelにVue.jsを導入してみる。- Bladeの{{ }}とコンフリクトする問題の対処 -]]></title><description><![CDATA[どうも、
トレーニング後にビールを
飲んでしまう@version1です。   今回は、
そろそろ勉強のために、
JqueryでなくAngular, React, Vueらへん
使って見ようかということ
でvue.jsをlaravel…]]></description><link>https://ver-1-0.net/blog/2017/08/09/conflict-vue-with-blade</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/08/09/conflict-vue-with-blade</guid><pubDate>Wed, 09 Aug 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;どうも、
トレーニング後にビールを
飲んでしまう@version1です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は、
そろそろ勉強のために、
JqueryでなくAngular, React, Vueらへん
使って見ようかということ
で&lt;strong&gt;vue.js&lt;/strong&gt;を&lt;strong&gt;laravel&lt;/strong&gt;にインストールしてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;数あるjavascriptライブラリの
中で&lt;strong&gt;vue.js&lt;/strong&gt;を選んだ理由は
特になく、なんとなく
なのですが強いて言うのであれば、
今からやるのであれば後発の新しいライブラリを
使いたいと言うところでした。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以下、Googleトレンドで他ライブラリとの
検索の割合調べてみた画像。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/08/20170809_conflict-vue-with-blade/javascript-library.png&quot; alt=&quot;javascript-library.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;検索数も伸びてますね。
後発だけに他ライブラリの課題を見事に解決しているとか
いないとか&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まずはライブラリのインストール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;インストールの方法は&lt;a href=&quot;https://jp.vuejs.org/v2/guide/installation.html&quot;&gt;こちら&lt;/a&gt;から&lt;/p&gt;
&lt;p&gt;最初に触ってみる程度であれば
CDNでの読み込みが一番早いので、
htmlのヘッダ部に下記を追加してしまうのが早いです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://unpkg.com/vue&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;が、
これだとライブラリがアップデートされると
アプリが使うライブラリのバージョンも変わってしまうので、
ダウンロードリンクから直接
ライブラリをダウンロードして配置します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;開発版と本番版があるようなので
両方ダウンロードしてpublic/jsに&lt;/p&gt;
&lt;p&gt;public/js/vue.js (開発版）&lt;/p&gt;
&lt;p&gt;public/js/vue.min.js (本番版）&lt;/p&gt;
&lt;p&gt;を配置します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ヘッダ部分は以下のようにして、
.envのAPP_DEBUGの値を元に読み込むライブラリを
変えるようにしましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;@if (env(&apos;APP_DEBUG&apos;))
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ asset(&apos;js/vue.js&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
@else
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ asset(&apos;js/vue.min.js&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
@endif
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Hello Worldしてみる　〜 Bladeとのコンフリクト解消方も ~&lt;/h2&gt;
&lt;p&gt;上のような設定が終わっていれば
下記のようにすれば&lt;strong&gt;Hello Vue! &lt;/strong&gt;
という文字が表示されるので
導入完了です！&lt;/p&gt;
&lt;p&gt;※注意※&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Laravel&lt;/strong&gt;で&lt;strong&gt;blade&lt;/strong&gt;を使っている場合は、
{{}}のMastache記法がコンフリクトして、
Vueのテキスト表示がPHPに解釈されエラーとなってしまいます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;blade + vue&lt;/strong&gt;の場合は
&lt;strong&gt;blade（PHP)の式を書く場合&lt;/strong&gt; -&gt; {{}}で囲う
&lt;strong&gt;vueの式を書く場合は、&lt;/strong&gt; -&gt; {{}} の前に@を表示する&lt;/p&gt;
&lt;p&gt;ようにしてください。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Sample&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ asset(&apos;css/reset.css&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ asset(&apos;css/style.css&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    @if (env(&apos;APP_DEBUG&apos;))
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ asset(&apos;js/vue.js&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    @else
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ asset(&apos;js/vue.min.js&apos;) }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    @endif
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;app&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        @{{ message }}
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;
      &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; app &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Vue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token literal-property property&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;#app&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token literal-property property&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;token literal-property property&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Hello Vue!&apos;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以上です。&lt;/p&gt;
&lt;p&gt;↓ここでは&lt;strong&gt;Vue.js&lt;/strong&gt;でできたアプリを試せますので是非&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://jp.vuejs.org/v2/examples/&quot;&gt;&lt;a href=&quot;https://jp.vuejs.org/v2/examples/&quot;&gt;https://jp.vuejs.org/v2/examples/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/08/20170809_conflict-vue-with-blade/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[vagrantローカルPCのインスタンスの起動状態を知りたい！vagrant global-statusコマンド]]></title><description><![CDATA[どうも、
今回は久しぶりにvagrantの話題です。 vagrantって
みなさんいちいちVagrantfileのある
それぞれのイメージの
ルートディレクトリに移動（cd…]]></description><link>https://ver-1-0.net/blog/2017/07/30/vagrant-status</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/07/30/vagrant-status</guid><pubDate>Sun, 30 Jul 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どうも、
今回は久しぶりにvagrantの話題です。&lt;/p&gt;
&lt;p&gt;vagrantって
みなさんいちいちVagrantfileのある
それぞれのイメージの
ルートディレクトリに移動（cd)してから
コマンド叩いていたりしませんか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「え、そんなことない」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;と言う方もいるかもしれませんが、&lt;/p&gt;
&lt;p&gt;上記に当てはまる方に朗報です。&lt;/p&gt;
&lt;p&gt;vagrantでは、
ローカルPCに散らばるイメージの稼働状況を
みるコマンドが存在します。&lt;/p&gt;
&lt;p&gt;それは&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant global-status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;です。&lt;/p&gt;
&lt;p&gt;これでどのディレクトリにいても、
vagrantの稼働状況を確認します。&lt;/p&gt;
&lt;p&gt;実行結果はこんな感じ。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$vagrant&lt;/span&gt; global-status
&lt;span class=&quot;token function&quot;&gt;id&lt;/span&gt;       name    provider   state    directory
-------------------------------------------------------------------------
4445c4b  default virtualbox poweroff /Users/admin/Vagrant/hoge
4a947f0  default virtualbox poweroff /Users/admin/Vagrant/ubu
5212b05  default virtualbox poweroff /Users/admin/Vagrant/foo
41ec701  default virtualbox running  /Users/admin/Vagrant/bar

The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date. To interact with any of the machines, you can go to
that directory and run Vagrant, or you can use the ID directly
with Vagrant commands from any directory. For example:
&lt;span class=&quot;token string&quot;&gt;&quot;vagrant destroy 1a2b3c4d&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こんな感じで、
&lt;strong&gt;使ってないのに、起動してしまっている&lt;/strong&gt;
&lt;strong&gt; サーバ&lt;/strong&gt;を確認できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;しかも消した時は、
表示されているidを引数に渡して&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant &lt;span class=&quot;token function&quot;&gt;halt&lt;/span&gt; 41ec701&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;みたいな感じで
狙いを定めてサーバを停止できます。&lt;/p&gt;
&lt;p&gt;さらに複数のサーバを停止させたい時は
引数に複数のidを渡してあげれば、
一気にサーバを停止できます。&lt;/p&gt;
&lt;p&gt;停止もできるのでもちろん
起動もできるし、
実行結果にもあるようにインスタンスの削除も
可能です。&lt;/p&gt;
&lt;p&gt;私のPCではたまに上げっぱなしの
サーバがリソースを食っていたりするので、
この方法でチェックー＞必要なければ停止させるという
ことをやっています。&lt;/p&gt;
&lt;p&gt;便利ですよね！
すでに知っている方もいるかとは思いますが
共有まで！！&lt;/p&gt;
&lt;p&gt; 
&lt;a href=&quot;http://amzn.to/2eY82uA&quot;&gt;Vagrant入門ガイド&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Vagrant%E5%85%A5%E9%96%80%E3%82%AC%E3%82%A4%E3%83%89-%E6%96%B0%E5%8E%9F%E9%9B%85%E5%8F%B8-ebook/dp/B00F418SQ8/ref=as_li_ss_il?ie=UTF8&amp;linkCode=li2&amp;tag=llg01-22&amp;linkId=113f390bb992a0fab201daecb538973c&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00F418SQ8&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=B00F418SQ8&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/07/20170730_vagrant-status/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[せっかく買った本を読みきれない・途中飽きてしまう方にオススメ - つまみ読み]]></title><description><![CDATA[どーも、
暑さに耐えきれず
早起きをしてしまった
@version…]]></description><link>https://ver-1-0.net/blog/2017/07/17/how-to-avoid-tsundoku</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/07/17/how-to-avoid-tsundoku</guid><pubDate>Mon, 17 Jul 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;どーも、
暑さに耐えきれず
早起きをしてしまった
&lt;a href=&quot;https://twitter.com/version1_2017&quot;&gt;@version1&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&amp;nbsp;
最近では、KindleでもiBookでも
電子書籍の購入がクレカさえ登録すればボタン一つで
簡単に購入できるようになってて、
1000円程度の購入のハードルがかなり下がって来ていますね。
&lt;p&gt;が、その気軽さに反して、
それを読むの自体は根気や集中力がかなり必要な本
を読むことも必要になって来ます。&lt;/p&gt;
&lt;p&gt;その結果、
私の中では最近
 &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;本を読みきれない・飽きる&lt;/li&gt;
&lt;li&gt;別の本を買う&lt;/li&gt;
&lt;li&gt;読みきれない・飽きる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という負のスパイラルがまわり始めてしまっています。。
 &lt;/p&gt;
&lt;p&gt;そこで、
今回はこれを解消すべく対策を考えてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;本を読みきれない・飽きる原因の考察&lt;/h2&gt;
&lt;p&gt;考察というほどではないですが、
原因としては、
 &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;むのに集中力が必要で理解せずに読み進めてしまい、&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;後から集中し直して読み返す必要が生じるので時間がかかる。
 
2. 一番最初から読み進めていると自分の知りたい情報ではない
余計な情報も入ってくるので飽きる。
 
というのがあるかと思っています。
 &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&amp;nbsp;
&lt;p&gt;はっきり行ってできる人はできるのかもしれませんが、
ある程度理解に集中力のある文章になると
集中力を持って読み進められるのは、
一章分（だいたい200P)くらいです。&lt;/p&gt;
&lt;p&gt;個人差があるかとは思うのですが、
私の場合それ以上になると
&lt;strong&gt;「目では追っていても頭に入ってこないモード」&lt;/strong&gt;
にだんだんと突入して行きます。&lt;/p&gt;
&lt;p&gt;そこでその本を読むことへの意義を失って読むのに
苦痛を感じ始め読むのをやめてしまうというのが
私の失敗パターンです。
 &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;読みきれない・飽きない本の読み方　つまみ読み&lt;/h2&gt;
&amp;nbsp;
上に書いた失敗パターンを
繰り返していてはダメなのでこれを解消する方法を探究したところ、
&lt;p&gt; 
&lt;strong&gt;「つまみ読み」&lt;/strong&gt;という答えに辿りつきました。&lt;/p&gt;
&lt;blockquote&gt;困難は分割せよ -ルネ・デカルト&lt;/blockquote&gt;
&lt;p&gt;デカルトが言うように、
困難を分割してメリハリのついた読書を提案します。&lt;/p&gt;
&lt;p&gt;方法としては、&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;①冒頭・導入の章を読んでその本が言おうとしていることを何となく理解する。&lt;/p&gt;
&lt;p&gt;②目次に目を通して自分の興味のあるタイトルの章を見つける。&lt;/p&gt;
&lt;p&gt;③興味のある章を読む&lt;/p&gt;
&lt;p&gt;④②③を繰り返す。&lt;/p&gt;
&lt;p&gt;⑤興味のない章だけになったら他は読まず次の本に移る。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;となります。&lt;/p&gt;
&lt;p&gt;①で冒頭を読むのは、
さすがに全体像を掴んでおかないとどこ読んでも話がわからないので
冒頭から数章くらいは
読み進めます。&lt;/p&gt;
&lt;p&gt;②興味のある章を見つけると書きましたが、
これは集中力の続く範囲の単位として章が良いかなということなので、
これより小さい単位でやっても特に問題は
ないと思います。&lt;/p&gt;
&lt;p&gt;⑤の興味のない章だけになったら他は読まずに次の本に移る。
としましたが、興味のない章、ひっかからない章については特に
読む必要がないと思っています。
自分のほしい情報を得るために本を読んでいるので、
それ以外を読むのは基本的に時間の無駄です。&lt;/p&gt;
&lt;p&gt;ただ、
自分の欲しい情報というのは時間と共に変化するので、
後日、日を置いて、再度章を眺めてみるというのも良いと思います。&lt;/p&gt;
&lt;p&gt;この方法を実践することで、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;冒頭から読み進めた結果、力つき終わりの方の筆者の言いたいことや、&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;読んでいれば自分に関心あることに辿り着けずに飽きてしまうということを回避できる&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自分の集中力の範囲で読み進めるので、メリハリがある読書ができ、&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;思考が進みやすい。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;全て読まなければならないという心理的ハードルを下げるので、読むのが億劫にならない&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;というメリットがあります。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;読みきれない・飽きない本の読み方　まとめ&lt;/h2&gt;
&lt;p&gt;以上、自分の悩みを元に解決策を練ってみました。
もし、良さそうであれば
ぜひ試して見てください。&lt;/p&gt;
&lt;p&gt;少し話はずれますが、
人間には誰にも先入観があるので、
最初に本を読んだ時に入ってくる情報と2回目に読んだ時、3回目に読んだ時で
得られる情報が違い、何回も読み返すほどより自分の先入観から離れた情報が
入ってきやすくなるそうです。&lt;/p&gt;
&lt;p&gt;自分が読んでみて良いなと思った本は、
この記事で紹介したつまみ読みの方法と読み返すという
ことをして、効率よく情報を吸収できるようになると良いですね！&lt;/p&gt;
&lt;p&gt;以上、
日々の読書の参考にしていただけたら幸いです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;↓オススメの本です。
この本では成功にはやり抜く力が大切だと説いています。&lt;/p&gt;
&lt;p&gt;ただの「気合い・根性」などの話ではなく、
「何をやり抜くべくか？」についても言及し、
やり抜く力の重要性を事象観察を元にロジカルに説明しています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://amzn.to/2tubs9V&quot;&gt;やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける&lt;/a&gt;
&lt;a href=&quot;https://www.amazon.co.jp/%E3%82%84%E3%82%8A%E6%8A%9C%E3%81%8F%E5%8A%9B-GRIT-%E3%82%B0%E3%83%AA%E3%83%83%E3%83%88-%E4%BA%BA%E7%94%9F%E3%81%AE%E3%81%82%E3%82%89%E3%82%86%E3%82%8B%E6%88%90%E5%8A%9F%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B-%E7%A9%B6%E6%A5%B5%E3%81%AE%E8%83%BD%E5%8A%9B-%E3%82%92%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%82%8B-%E3%82%A2%E3%83%B3%E3%82%B8%E3%82%A7%E3%83%A9-%E3%83%80%E3%83%83%E3%82%AF%E3%83%AF%E3%83%BC%E3%82%B9/dp/4478064806/ref=as_li_ss_il?ie=UTF8&amp;qid=1500220410&amp;sr=8-1&amp;keywords=%E3%82%84%E3%82%8A%E6%8A%9C%E3%81%8F&amp;linkCode=li3&amp;tag=llg01-22&amp;linkId=393a04ef142d2926fbb8fe99d81c540e&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4478064806&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&quot;&gt;&lt;/a&gt;&lt;img src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=4478064806&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot;&gt;&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/07/20170717_how-to-avoid-tsundoku/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[データベースマイグレーションにFlyway使ってみた]]></title><description><![CDATA[こんばんは
最近目を酷使しがちな@verion1です。 さて、
最近セコセコと
自分で考えたwebサイトを
開発しているのですが、
「開発をしているとやっぱDBの変更もヴァージョン管理できるといいよね。」
と思い、マイグレーションツールを導入しました。 その名もFlyway…]]></description><link>https://ver-1-0.net/blog/2017/07/10/flyway-migration</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/07/10/flyway-migration</guid><pubDate>Mon, 10 Jul 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;こんばんは
最近目を酷使しがちな&lt;a href=&quot;https://twitter.com/version1_2017?lang=ja&quot;&gt;@verion1&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt;さて、
最近セコセコと
自分で考えたwebサイトを
開発しているのですが、
&lt;strong&gt;「開発をしているとやっぱDBの変更もヴァージョン管理できるといいよね。」&lt;/strong&gt;
と思い、マイグレーションツールを導入しました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;その名も&lt;strong&gt;Flyway&lt;/strong&gt;です。
使っている人も多いのか少ないのか
よくわからないのですが、
kotlinで開発していてjava系のマイグレーションツールを
探していたので、使ってみることにしました。&lt;/p&gt;
&lt;p&gt;サイトをみると
コマンドラインのツールもあるみたいなのですが、
公開サーバにいちいちインストールするのも
怠いので、
gradleで全部やってしまいます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;gradleなら&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;依存性にFlywayを追加&lt;/li&gt;
&lt;li&gt;build.gradleごとgitにコミット&lt;/li&gt;
&lt;li&gt;サーバにデプロイしたら、 gradlewを使ってFlywayタスクを実行。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;のような感じでスムーズにできるので&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Flywayを使ってみる　| 依存性の追加&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;それでは、
依存性追加&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;groovy&quot;&gt;&lt;pre class=&quot;language-groovy&quot;&gt;&lt;code class=&quot;language-groovy&quot;&gt;buildscript &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    ext&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springBootVersion &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1.5.1.RELEASE&apos;&lt;/span&gt;
    ext&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;kotlin_version &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1.1.1&apos;&lt;/span&gt;

    repositories &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;jcenter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;mavenCentral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        classpath &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-gradle-plugin:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlin_version&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
        classpath &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.flywaydb:flyway-gradle-plugin:3.0&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

apply plugin&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;kotlin&apos;&lt;/span&gt;
apply plugin&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;flyway&apos;&lt;/span&gt;


flyway&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    url &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;jdbc:mysql://localhost/hoge&apos;&lt;/span&gt;
    user &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;sample&apos;&lt;/span&gt;
    password &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

repositories &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;jcenter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;mavenCentral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    compile &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-stdlib:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlin_version&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    compile &lt;span class=&quot;token string&quot;&gt;&apos;mysql:mysql-connector-java:5.1.6&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここでは、
build.gradleに接続情報を持たせてしまっています。&lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt;サイトをみると
コマンドラインで引数に渡す方法もあるみたいです。
ファイルにパスワードとか平文で書くのに抵抗ある方は
こっちの方が良いかと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;さてこれで準備はできましたが、
マイグレーションするファイルがないのでは意味ないので
次は、マイグレーションファイルの準備です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Flywayを使ってみる　| マイグレーションファイルの配置&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;マイグレーションファイルはクラスパス上に
&lt;strong&gt;db/migration&lt;/strong&gt;
と言うディレクトリを切って、
ファイルを配置します。&lt;/p&gt;
&lt;p&gt;ファイルの命名規則は
&lt;strong&gt;V[バージョン番号]__[任意のファイル名].sql&lt;/strong&gt;
です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;例えば、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;V1__create_hoge_table.sql
V1.1__add_column_to_hoge_table.sql
V1.2__alter_column_to_hoge_table.sql
V2__create_foo_table.sql
・
・&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のような形です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;バージョン番号は以下のようなコマンドで確認できます。
State が実行のステータスを表し&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「Pending」　・・・実行前&lt;/li&gt;
&lt;li&gt;「Success」・・・成功&lt;/li&gt;
&lt;li&gt;「Failed」・・・失敗&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$gradle&lt;/span&gt; flywayInfo
:compileKotlin
Using kotlin incremental compilation
w: The &lt;span class=&quot;token string&quot;&gt;&apos;-d&apos;&lt;/span&gt; option with a directory destination is ignored because &lt;span class=&quot;token string&quot;&gt;&apos;-module&apos;&lt;/span&gt; is specified
:compileJava NO-SOURCE
:copyMainKotlinClasses UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestKotlin NO-SOURCE
:compileTestJava NO-SOURCE
:copyTestKotlinClasses UP-TO-DATE
:processTestResources NO-SOURCE
:testClasses UP-TO-DATE
:flywayInfo
+----------------+----------------------------+---------------------+---------+
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Version        &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Description                &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Installed on        &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; State   &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
+----------------+----------------------------+---------------------+---------+
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;              &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; create hoge table          &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt;-07-09 &lt;span class=&quot;token number&quot;&gt;21&lt;/span&gt;:24:35 &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Success &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1.1&lt;/span&gt;            &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; create companies           &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt;-07-09 &lt;span class=&quot;token number&quot;&gt;21&lt;/span&gt;:24:35 &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Success &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1.2&lt;/span&gt;            &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Insert data into companies &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt;-07-09 &lt;span class=&quot;token number&quot;&gt;21&lt;/span&gt;:24:36 &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Success &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
+----------------+----------------------------+---------------------+---------+

BUILD SUCCESSFUL


&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここまでで、準備は完了です。&lt;/p&gt;
&lt;p&gt;次は実際に実行していきます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Flywayを使ってみる　| マイグレーション実行&lt;/h2&gt;
&lt;p&gt;いよいよ実行です。
コマンドはこちら&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;gradle flywayMigrate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このコマンドで、
db/migrate配下にあるSQLファイルがバージョン
の若い方から順番に
実行されていきます。&lt;/p&gt;
&lt;p&gt;エラーが表示されず。
「BUILD SUCCCESSFUL」となれば成功です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;もし、失敗した場合は、
sqlファイルを直したりする必要があるのですが、
ファイルを直してから、
gradle flywayMigrationをしても
エラーになってしまいます。&lt;/p&gt;
&lt;p&gt;Flywayの流儀として、
一度マイグレーションが失敗をしたら&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;gradle flywayRepair&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;でマイグレーションの実行状態を
リペアしてあげないといけません。&lt;/p&gt;
&lt;p&gt;なので、
マイグレーションが失敗したら、
このコマンドは忘れないように実行するようにしてください。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Flywayを使ってみる　| まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;そもそもFlywayの導入は、
DBの状態もヴァージョン管理できるといいよね。
と言う目的で始めました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;なので、
一般的には先の手順で使用したようなsqlはgitにコミットして
おき、デプロイで使ったり他のサーバで環境を
作る際に利用します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;マイグレーションファイルは作成して、
問題ないことが確認できたら忘れずにコミットするように
習慣づけておきましょう。&lt;/p&gt;
&lt;p&gt;もっと興味がある方は他のコマンドなども調べてみると良いかと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私があとよく使うのは
gradle flywayCleanくらいですかね。&lt;/p&gt;
&lt;p&gt;これをするとdatabaseの全テーブルが綺麗になるので
利用には注意が必要ですがアプリケーション開発の初期段階では、
頻繁にdbの構造を帰るのでまあまこれをやります。&lt;/p&gt;
&lt;p&gt;今回は
基本的なところを
まとめましたが、
これ以上はおいおい知っていけば良いかなと。&lt;/p&gt;
&lt;p&gt;では！！&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/07/20170710_flyway-migration/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[一億総かっこいい!!給料BANKが面白い。あなたの職業はどんなイメージ？？]]></title><description><![CDATA[こんにちは、
二日酔いの@version1_2017です。 最近私のwebサイトがあるので、
それが給料BANK…]]></description><link>https://ver-1-0.net/blog/2017/07/08/salary-bank</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/07/08/salary-bank</guid><pubDate>Sat, 08 Jul 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こんにちは、
二日酔いの&lt;a href=&quot;https://twitter.com/version1_2017&quot;&gt;@version1_2017&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt;最近私のwebサイトがあるので、
それが&lt;strong&gt;給料BANK&lt;/strong&gt;というサイトです。&lt;/p&gt;
&lt;p&gt;結構話題になっていたりもするので、
すでに知っている方もいらっしゃるかと
思うのですが、
世間の職業のイメージをイラストにして
描いて紹介しています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kyuryobank.com/&quot;&gt;&lt;a href=&quot;https://kyuryobank.com/&quot;&gt;https://kyuryobank.com/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://amzn.to/2uVbcSk&quot;&gt;日本の給料&amp;#x26;職業図鑑 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%B5%A6%E6%96%99-%E8%81%B7%E6%A5%AD%E5%9B%B3%E9%91%91-%E7%B5%A6%E6%96%99BANK/dp/4800250005/ref=as_li_ss_il?ie=UTF8&amp;amp;linkCode=li3&amp;amp;tag=llg01-22&amp;amp;linkId=1a5888c416267bd1e1f163e9f66e9be6&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4800250005&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;img style=&quot;border: none !important; margin: 0px !important;&quot; src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=4800250005&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;
&lt;p&gt;欲しい。。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;給料BANKのかっこいい所 その1 カッコイイイラスト&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;このページでは、
各職種を&lt;strong&gt;「RPG化」&lt;/strong&gt;して、
さまざまな職種を&lt;strong&gt;RPG&lt;/strong&gt;のキャラクターさながらの
&lt;b&gt;かっこいい&lt;/b&gt;イラストが載せられています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;イラストは載せられないですが、
元サイトか本を買うかしてみて見てください。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ぜひ、
自分の職業を調べてみるのがオススメなのですが、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「ちょっw 私の仕事こんなかっこよくて良いのかな・・・」&lt;/strong&gt;
という感じになります。笑&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;給料BANKのかっこいい所 その1 優れた網羅性&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;こちらは職業の網羅性もすごくて、
プロブロガー、Youtuber、専業アフィリエーター、コスプレーヤー
など最近の仕事なども網羅さえれています。&lt;/p&gt;
&lt;p&gt;プロブロガー&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kyuryobank.com/geino/problogger.html&quot;&gt;&lt;a href=&quot;https://kyuryobank.com/geino/problogger.html&quot;&gt;https://kyuryobank.com/geino/problogger.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Youtuber&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kyuryobank.com/geino/youtuber.html&quot;&gt;&lt;a href=&quot;https://kyuryobank.com/geino/youtuber.html&quot;&gt;https://kyuryobank.com/geino/youtuber.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;専業アフィリエーター&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kyuryobank.com/geino/youtuber.html&quot;&gt;&lt;a href=&quot;https://kyuryobank.com/geino/youtuber.html&quot;&gt;https://kyuryobank.com/geino/youtuber.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;もちろん、
私の職業であるwebエンジニアもありますよ。
&lt;a href=&quot;https://kyuryobank.com/it/webprogramer.html&quot;&gt;&lt;a href=&quot;https://kyuryobank.com/it/webprogramer.html&quot;&gt;https://kyuryobank.com/it/webprogramer.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;調べてみたら400職種くらいあるみたいですね。
せっかく調べたので末尾に一覧載せておきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;給料BANKのかっこいい所 その2 カッコイイ決めゼリフ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;各イラストでは、
各職業の決めゼリフが書かれているのですが、
私の仕事であるエンジニアは
webプログラマー
&lt;strong&gt;「プログラミングはシンフォニーを作曲するようなものです。」&lt;/strong&gt;
システムエンジニア
&lt;strong&gt;「全ての開発は私の仕様書にかかっているのだ」&lt;/strong&gt;
こんなこと考えたことない笑
そもそもシンフォニーが何かわからないし。
シンフォニーわかってないとwebプログラマーにはなれないのか。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今度決め台詞まとめて
ランキングにしてみようかな。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;給料BANKのかっこいい所 まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;他にももちろん、
システムエンジニアになるには？
や
どういう仕事をするのかなどもサイトに書かれていて、
イラストだけに止まらず
かなりしっかり作られています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ぜひ、自分の職業を調べてみてください。
書籍版もあるのでこちらもどうぞ。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;cstmreba&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4800250005/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/61osTfSmnOL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4800250005/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;日本の給料&amp;amp;職業図鑑&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;給料BANK 宝島社 2016-01-09    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4800250005/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/gp/search?keywords=%93%FA%96%7B%82%CC%8B%8B%97%BF%26%90E%8B%C6%90%7D%8A%D3&amp;amp;__mk_ja_JP=%83J%83%5E%83J%83i&amp;amp;url=node%3D2275256051&amp;amp;tag=llg01-22&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F13521619%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-80-025000-1%252520%25257C%2525204-800-25000-1%252520%25257C%2525204-8002-5000-1%252520%25257C%2525204-80025-000-1%252520%25257C%2525204-800250-00-1%252520%25257C%2525204-8002500-0-1&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;cstmreba&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4800264375/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/61v8pwIK4oL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4800264375/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;女子の給料&amp;amp;職業図鑑&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;給料BANK 宝島社 2017-02-17    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4800264375/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/gp/search?keywords=%8F%97%8Eq%82%CC%8B%8B%97%BF%26%90E%8B%C6%90%7D%8A%D3&amp;amp;__mk_ja_JP=%83J%83%5E%83J%83i&amp;amp;url=node%3D2275256051&amp;amp;tag=llg01-22&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F14666233%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-80-026437-4%252520%25257C%2525204-800-26437-4%252520%25257C%2525204-8002-6437-4%252520%25257C%2525204-80026-437-4%252520%25257C%2525204-800264-37-4%252520%25257C%2525204-8002643-7-4&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;給料BANKのかっこいい所 その1 優れた網羅性　付録: 職種一覧&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;アイドル【地下アイドル】
アイリスト
アクチュアリー
AD（アシスタントディレクター）
アスレティックトレーナー（スポーツトレーナー）
アートディレクター
アナウンサー
アニメーター
専業（トップ）アフィリエイター
海女(海人）
アロマセラピスト
あん摩マッサージ指圧師
石工
イタコ
板前
いちご農家
一級建築士
一般事務・経理
鋳物工
イラストレーター（絵師）
医療事務
医療ソーシャルワーカー
医療秘書
インテリアコーディネーター
インテリアデザイナー
ウェイトレス・ウェイター
ウエディングプランナー
ウェブ解析士（Webアナリスト）
webディレクター
ウェブデザイナー
WEBプログラマー
WEBプロデューサー
鵜飼い
歌い手（ニコニコ動画）
宇宙飛行士
うどん職人（讃岐）
占い師
映画監督
営業職
栄養士
駅長
エステティシャン
NTTドコモ
NPO
F１レーサー
MR
演歌歌手
オートレース選手
おでん屋【屋台】
オペラ歌手
お坊さん（住職、僧侶）
音楽療法士
音楽プロデューサー・ボカロＰ
外交官
介護事務
介護福祉士（ケアワーカー）
海事代理士
海上保安庁
海上自衛隊
快眠セラピスト
回路設計士
カイロプラクター
画家
鍵師（錠前師）
科捜研（科学捜査研究所）
学芸員
学童保育指導員
型枠大工
学校事務
カツオ漁師
カーデザイナー
カニ漁船漁師
歌舞伎役者
カメラマン
カラーコーディネーター
眼科医
環境コンサルタント
環境測量士（環境計量士）
看護師
看護助手
神主・宮司（神職）
看板持ち・プラカード持ちバイト
管理栄養士
企画・経営職
起業家
義肢装具士
気象予報士
喫茶店オーナー
機動隊
脚本家
キャディ
cadオペレーター
キャバクラ嬢
キャビンアテンダント（CA）
キャリアコンサルタント
救急救命士
給食センター（給食のおばちゃん）
行司
行政書士
競艇選手（ボートレーサー）
空間デザイナー（スペースデザイナー）
区議会議員
汲み取り屋さん（バキュームカー）
クラシック作曲家
グラフィックデザイナー(CG)
クラブDJ
グランドスタッフ
グランドホステス
クリエイティブディレクター
クリーニング師
クレーン運転士
ケースワーカー
ケアマネージャー（ケアマネ）
経営コンサルタント
警察官
警察事務
芸能人（芸人）マネージャー
競馬調教師（厩務員）
警備員
刑務官
競輪選手（ガールズ競輪）
ゲーム音楽作曲家
ゲームクリエイター
ゲームデザイナー
ゲームプランナー
ゲームプロデューサー
ゲームプログラマー
外科医
劇団四季
検疫官
健康運動指導士
言語聴覚士
検察事務官
検事（検察官）
研修医
建設コンサルタント
現場監督
原発作業員
校閲部
航海士
工業デザイナー（インダストリアル）
皇宮護衛官
航空自衛隊
航空管制官
航空整備士
広告代理店
高速道路料金所スタッフ（収受係）
公認会計士
広報
国税専門官
国立大学助教授（准教授）
国連職員
コスプレイヤー
国会議員
国境なき医師団
コピーライター
ごみ収集（じんかい収集）
コメ農家
コールセンター（テレホンオペレーター）
コンシェルジュ
コンパニオン
コンビニ店長
裁判官
裁判所職員
細胞検査士
財務専門官
サウンドプログラマー
左官
作業療法士
作詞家
作家（小説家）
サッカー審判員
雑貨デザイナー
茶道家・茶人（家元）
産婦人科医
小児科医
料理人（シェフ)
歯科医
歯科衛生士
歯科技工士
歯科助手
市議会議員
指揮者
se（システムエンジニア）
システム監査技術者
自動車学校教官（指定自動車教習所指導員）
視能訓練士
司法書士
社会教育主事
ジャーナリスト
ジャイカ（jica）
社会人野球選手
社会福祉協議会
社会福祉士（ソーシャルワーカー）
市役所職員
社労士（社会保険労務士）
獣医
臭気判定士
柔道整復師
出版社編集長
ジュエリーデザイナー
樹木医
出版社
主筆
手話通訳士
食品衛生監視員
騎手（ジョッキー）
書店員
小学校教諭
証券アナリスト
商工会議所
消防士
照明技師
食育インストラクター
職業訓練指導員
ショコラティエ
助産師
ショップ店員
書道家
私立・公立高校教師
鍼灸師
人事部
新聞記者
新聞配達員
診療情報管理士
スクールカウンセラー
スタントマン
スーパーバイヤー
精神科医
精神保健福祉士
青年海外協力隊
整備士
声優・ナレーター
声優
税理士
セキュリティポリス（SP）
専業主婦
戦場カメラマン
潜水士
専門看護師
造園業
葬儀屋
総務
相続診断士
測量士
ソーシャルメディアプランナー
速記士
ソムリエ
体操審判員
大学教授
大使館職員
大道芸人
鷹匠
宝塚女優
タクシードライバー【運転手】
宅地建物取引士
殺陣師
たばこ屋の店主
ダンサー
探偵
治験コーディネーター（CRC）
知事
中小企業診断士
調剤薬局事務
調理師
ツアープランナー
通関士
通訳案内士
テレビプロデューサー（番組プロデューサー）
ディスパッチャー（運航管理者）
デイトレーダー・専業トレーダー
データサイエンティスト（データアナリスト）
テーブルコーディネーター
テキ屋
鉄筋工
TVディレクター（番組ディレクター）
テレビ局AD
電気工事士
電車運転士
添乗員
陶芸家
動物園飼育員
動物看護師（看護士）
登録販売者
読者モデル（読モ）
特殊清掃
登山家（アルピニスト）
図書館司書
塗装屋
土地家屋調査士
ドッグトレーナー
都道府県議会議員
鳶職
土方（土木作業員）
トマト農家
トラック運転手
トリマー
ドローン操縦士
内科医
仲居
ナニー
南極観測隊
二級建築士
日本語教師
入国警備官
庭師
塗師（塗り師）
ネイリスト
ネットワークエンジニア
納棺士
農家（専業農家・兼業農家）
農協職員
バーテンダー
配管工
胚培養士
俳優
バスガイド
パタンナー
パチンコライター
パチスロライター
パチンコライター
発破技士
パティシエ
花火師
花屋
バリスタ
バレーボール選手
パン屋
半導体エンジニア
ピザ職人（ピッツァイオーロ）
ピアニスト（ジャズ・バレエ・ブライダル）
ピアノ調律師
秘書
ビール醸造家
非常勤講師
ビューティーアドバイザー
美容師
美容整形外科医
美容部員
ひよこ鑑定士
FP(ファイナンシャルプランナー）
ファッションデザイナー
副知事
フードコーディネーター
福祉住環境コーディネーター
不動産鑑定士
ブライダルコーディネーター
プライベートバンカー
フラワーデザイナー（フラワーアレンジメント）
プラントハンター
フリーランス
振付師
プロ棋士（将棋）
プロゲーマー
プロゴルファー
プロスケート選手（フィギュア）
プロブロガー
プロボウラー
プロボクサー
プロ野球選手
弁護士
編集者
弁理士
便利屋（なんでも屋）
保育士
法医学医
貿易事務
冒険家
放射線技師（レントゲン技師）
宝飾デザイナー
ポーカー選手
宝石バイヤー
ポケモントレーナー
ポータルサイター
ホームヘルパー
牧師（神父）
保険外交員
保険会社社員（セールスレディ）
保健師
ホステス（銀座）
ホスト
研究者（ポスドク）
ホテルマン
彫師
翻訳コーディネーター
舞妓さん
マグロ漁師
マジシャン
マーシャラー（グランドハンドリング）
麻酔科医
マタギ（猟師）
麻薬取締官・麻薬取締員
マンション管理士
巫女（助勤）
宮大工
無線通信士
メイクアップアーティスト
メイドカフェ店員
モデル（女性・メンズ）
盲導犬訓練士
八百屋
野球審判員
薬剤師
ヤクルトレディ
野菜ソムリエ
youtuber
郵便局員
養護教諭
溶接工
幼稚園教諭
養豚家
養蜂家
ヨガインストラクター
予備校講師
ライター
噺家・落語家
酪農家
ラグビー選手
ラジオdj
 ラノベ作家
理学療法士
力士（横綱）
陸上自衛隊
理容師
旅行代理店
臨床検査技師
臨床工学技士
レコーディングエンジニア
臨床心理士
レーシングドライバー
レースクイーン
レスリング選手
労働基準監督官
ワイン醸造家
和菓子職人
私立大学職員
国立大学職員
衆議院事務局
参議院事務局
国会図書館職員
防衛省専門職員
国会職員
東宝
豆腐屋（とうふや）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/07/20170708_salary-bank/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[サーバーエンジニアがデザインを勉強してみた。HTML5・CSS3モダンコーディング]]></title><description><![CDATA[普段仕事では
サーバーサイドエンジニア
をやっていますが、
趣味で自分でもアプリケーションなんかを
作ります。   もちろん、
htmlやcss…]]></description><link>https://ver-1-0.net/blog/2017/07/03/server-enginner-learn-design</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/07/03/server-enginner-learn-design</guid><pubDate>Mon, 03 Jul 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;普段仕事では
サーバーサイドエンジニア
をやっていますが、
趣味で自分でもアプリケーションなんかを
作ります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;もちろん、
htmlやcssの最低限の知識とかはあって、
簡単なレイアウトくらいなできます。&lt;/p&gt;
&lt;p&gt;が・・・&lt;/p&gt;
&lt;p&gt;なぜか自分でサイトをデザインすると
すごい野暮ったいというか
イケてないデザインになります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;という訳で本を買って勉強しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://amzn.to/2tHWHET&quot;&gt;HTML5/CSS3モダンコーディング フロントエンドエンジニアが教える3つの本格レイアウト スタンダード・グリッド・シングルページレイアウトの作り方 (WEB Engineer’s Books)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まだまだイケてるデザイン
とまではいかないものの
この本のサンプルを写経したら
ちょっと垢抜けたデザインができるようになりました！！&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;個人的にかなり感激です。
ここに成果を記しておきます。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/07/20170703_server-enginner-learn-design/site-design.png&quot; alt=&quot;site-design.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そんな訳で結論から言うと、
すごい為になりました！！&lt;/p&gt;
&lt;p&gt;と言うことでオススメします。&lt;/p&gt;
&lt;p&gt;どうでしょう？？
個人的にかなり進歩したと思いますが (^ ^;)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;実例を使ってモダンなデザインを体感できる&lt;/h2&gt;
本書は、
以下３つのレイアウトのパターンを
&lt;ul&gt;
 	&lt;li&gt;スタンダードレイアウト・・・ブログなどでよくある。ヘッダー・サイドバー・メインコンテンツのレイアウト&lt;/li&gt;
 	&lt;li&gt;グリッドレイアウト・・・画面のサイズにより表示されるカラムの数が変わるレスポンシブなレイアウト&lt;/li&gt;
 	&lt;li&gt;シングルページレイアウト・・・個人のポートフォリオサイトや商用のランディングページで見られる一枚構成のレイアウト&lt;/li&gt;
&lt;/ul&gt;
サンプルとして
コーディングを進めながら
解説をはさみ進んでいきます。
&lt;p&gt;本書全体を通して、
読むだけではあまり身にならないので、
実際に自分でコードを打って見て、
都度表示を確認しながら読み進めて行くというのが
一番身になるかと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以下は本書での気づきを記しておきます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;リセットcssを利用する。&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;お恥ずかしい話知らなかったのですが、
htmlにはデフォルトのスタイルが指定してあるようで、
一行のcssでも装飾されていないhtmlがある程度見やすく
表示されるようになっているいるようです。&lt;/p&gt;
&lt;p&gt;しかし、
実際にcssでコーディングして行く時にこれらのデフォルトのスタイル指定
が邪魔になる時があります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;h1タグは文字サイズが大きくて太字pタグの上下には必ずパディングが入るなどなど。&lt;/p&gt;
&lt;p&gt;そのため、現場でよく使われるのが
リセットCSSと呼ばれるものでこれらの
デフォルトのスタイルをリセットする機能を持っています。&lt;/p&gt;
&lt;p&gt;実際は自分でどのリセットCSSを使うかなど
決める必要がありますが
本書では、webサイトからダウンロードしたものを使用して
スタイルしていきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;確かに言われてみれば、
h1タグとか、pとかいちいちスタイルを打ち消す
属性を渡すの面倒臭いですよね。&lt;/p&gt;
&lt;p&gt;上にも書いたようにリセットCSSをあらかじめ読み込んでいれば
これらの手間が省けます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;html要素にフォントのサイズを指定する。&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;次にhtml要素のフォントサイズを指定するですが、
これが今まで自分のデザインした
（デザインと言うとかっこ良さげですが）
サイトが野暮ったくなる一番の理由だったのでは
と思っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;HTMLのデフォルトでは
文字サイズは通常皆が見ているサイトより大分大きく設定
されています。&lt;/p&gt;
&lt;p&gt;そんな中でそのままの文字サイズで
サイトをデザインしようとするとかなり
文字が大きくなり、
野暮ったいサイトができ上がります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;しかし、
html要素に
次のように指定すると
サイト全体のフォントサイズが
ちょうど良い感じになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;css&quot;&gt;&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;html&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 62.5%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ぜひお試しください。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;配色パターンを意識する。&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;直接本の中に書かれている訳ではないのですが、
自分がこの本を
読んで実践（先ほど見せた成果のサイトです。）した
際に気づいたことです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;なんか自分が色選ぶとちぐはぐに
なるよなというのは常日頃感じていて
「何か基本を外しているのだろうな」
と言う思いにかられていました。&lt;/p&gt;
&lt;p&gt;しょうがないの検索をかけてみると
こんなサイトが見つかりました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://colorhunt.co/&quot;&gt;&lt;a href=&quot;http://colorhunt.co/&quot;&gt;http://colorhunt.co/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ここでは様々な色の組み合わせが紹介
されているので、
自分の使いたい配色パターンを選んで
サイトに反映させてみると
実にしっくり来ると思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以上、
自分の気づきをまとめてみました。
本当にお世辞抜きでこの本きっかけで
垢抜けたサイトが作ることが
できるようになったと思います。&lt;/p&gt;
&lt;p&gt;今までサーバサイドばかり触っていたけれど、
俺も！私も！フロントとかデザインとか
勉強してイケてるアプリ作りたい！！
とか言う人の最初のきっかけにはとても良い本だと思います。&lt;/p&gt;
&lt;p&gt;オススメです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;cstmreba&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798141577/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/51R4sqEpwAL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798141577/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;HTML5/CSS3モダンコーディング フロントエンドエンジニアが教える3つの本格レイアウト スタンダード・グリッド・シングルページレイアウトの作り方 (WEB Engineer’s Books)&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;吉田 真麻 翔泳社 2015-11-03    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4798141577/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B0176GNY26/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F13401310%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-79-814157-2%252520%25257C%2525204-798-14157-2%252520%25257C%2525204-7981-4157-2%252520%25257C%2525204-79814-157-2%252520%25257C%2525204-798141-57-2%252520%25257C%2525204-7981415-7-2&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&amp;nbsp;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/07/20170703_server-enginner-learn-design/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Kotlin + SpringBoot のhtml、css変更後の再起動が面倒臭い。。の対処法]]></title><description><![CDATA[先日休日に
Kotlin+SpringBootを
いじっていたら ある問題でストレスが溜まったのでこんなツイートをしてみました。       そしたら、
世の中良い人はやっぱりいて、
解決策を教えてくださる人が現れました。   教えてくださったのが、
SpringBoot…]]></description><link>https://ver-1-0.net/blog/2017/06/24/problem-boot-server-in-spring</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/06/24/problem-boot-server-in-spring</guid><pubDate>Sat, 24 Jun 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;先日休日に
Kotlin+SpringBootを
いじっていたら&lt;/p&gt;
&lt;p&gt;ある問題でストレスが溜まったのでこんなツイートをしてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/06/20170624_problem-boot-server-in-spring/springboot.png&quot; alt=&quot;springboot-tweet&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そしたら、
世の中良い人はやっぱりいて、
解決策を教えてくださる人が現れました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;「spring-boot-devtoolsを
入れてくださいと。」&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;教えてくださったのが、
SpringBootに関して著書のある
槇 俊明さんだったので、
（感謝の返信をしてから気づきました汗）
迷うことなく、&lt;/p&gt;
&lt;p&gt;gradleのdependenciesに追加しました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;groovy&quot;&gt;&lt;pre class=&quot;language-groovy&quot;&gt;&lt;code class=&quot;language-groovy&quot;&gt;&lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.springframework.boot:spring-boot-devtools&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;しかし、
これを追加してみただけではダメ
だったようで、
さらに調べたら
以下のようなページを見つけました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dzone.com/articles/continuous-auto-restart-with-spring-boot-devtools&quot;&gt;&lt;a href=&quot;https://dzone.com/articles/continuous-auto-restart-with-spring-boot-devtools&quot;&gt;https://dzone.com/articles/continuous-auto-restart-with-spring-boot-devtools&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;方法としては、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;あるウィンドウでgradle build --continuousで継続的にビルド&lt;/li&gt;
&lt;li&gt;別のウィンドウでgradle bootRunしてアプリケーションを動かす。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;になります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これをすると
①がファイルの変更を検知してビルド、
②で起動したアプリケーションの再起動が
自動で行われるので、
いちいちウィンドウを切り替えて手動でSpringを再起動させる手間が省けます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;twitterで教えを受けて、
自分で調べてやってみましたが、
これでいいんですかね。&lt;/p&gt;
&lt;p&gt;とりあえず手動でSpringを再起動する手間が省けるので、
状況は改善されました。
ご報告まで&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://amzn.to/2t1j6fm&quot;&gt;はじめてのSpring Boot―「Spring Framework」で簡単Javaアプリ開発 (I・O BOOKS)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AESpring-Boot%E2%80%95%E3%80%8CSpring-Framework%E3%80%8D%E3%81%A7%E7%B0%A1%E5%8D%98Java%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-I%E3%83%BB-BOOKS/dp/4777518655/ref=as_li_ss_il?ie=UTF8&amp;amp;linkCode=li2&amp;amp;tag=llg01-22&amp;amp;linkId=cb2f914bd2edcfe09725b49c16ffc363&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4777518655&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=llg01-22&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;img style=&quot;border: none !important; margin: 0px !important;&quot; src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=llg01-22&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4777518655&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/06/20170624_problem-boot-server-in-spring/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CakePHP3 twitteroauthを使って、tweetする( composer install )]]></title><description><![CDATA[今回はtwitterで
CapkePHP3からtweetする方法を紹介します。 このtwitteroauthというライブラリを使います。
https://github.com/abraham/twitteroauth 流れは以下のようになります。 witter App…]]></description><link>https://ver-1-0.net/blog/2017/06/17/cakephp3-twitteroauth</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/06/17/cakephp3-twitteroauth</guid><pubDate>Sat, 17 Jun 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回はtwitterで
CapkePHP3からtweetする方法を紹介します。&lt;/p&gt;
&lt;p&gt;このtwitteroauthというライブラリを使います。
&lt;a href=&quot;https://github.com/abraham/twitteroauth&quot;&gt;&lt;a href=&quot;https://github.com/abraham/twitteroauth&quot;&gt;https://github.com/abraham/twitteroauth&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;流れは以下のようになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;witter Appを作成し、アクセストークンを取得&lt;/li&gt;
&lt;li&gt;twitteroauthをcomposerでインストール&lt;/li&gt;
&lt;li&gt;Controllerからtweet&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Twitter Appを作成し、アクセストークンを取得&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;このリンクから
&lt;a href=&quot;https://apps.twitter.com/&quot;&gt;&lt;a href=&quot;https://apps.twitter.com/&quot;&gt;https://apps.twitter.com/&lt;/a&gt;&lt;/a&gt;
twitter Appを作成すると、&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;Consumer Key&lt;/li&gt;
 	&lt;li&gt;Consumer Secret&lt;/li&gt;
 	&lt;li&gt;Access Token&lt;/li&gt;
 	&lt;li&gt;Access Token　Secret&lt;/li&gt;
&lt;/ul&gt;
を取得できます。
（後の手順で使用します。)
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;1.Create Newをクリック&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/06/20170617_cakephp3-twitteroauth/twitter1.png&quot; alt=&quot;twitter&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;2.必要な情報を入力&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; 
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/06/20170617_cakephp3-twitteroauth/twitter2.png&quot; alt=&quot;twitter&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;3.トークンの確認&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;作成が完了すると、
以下のような画面になるので、
Keys and access Tokenタブを選択し、&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;Consumer Key&lt;/li&gt;
 	&lt;li&gt;Consumer Secret&lt;/li&gt;
 	&lt;li&gt;Access Token&lt;/li&gt;
 	&lt;li&gt;Access Token　Secret&lt;/li&gt;
&lt;/ul&gt;
が表示されていることを確認します。
（アクセストークンがない場合は、Token Actionsあたりにあるボタンを押して作成する。)
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/06/20170617_cakephp3-twitteroauth/twitter3.png&quot; alt=&quot;twitter&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;②twitteroauthをcomposerでインストール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;compserを使って、
twitteroauthをダウンロードします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; require abraham/twitteroauth&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Controllerからtweet&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;実際にtweetするコードは以下になります。&lt;/p&gt;
&lt;p&gt;実際は、
トークンは定数ファイルなどで外だしした方が良いかもしれません。&lt;/p&gt;
&lt;p&gt;また、
今回は、Controllerにtweetの処理を記述しましたが、
tweet,create_twitter_oauthあたりのメソッドは、
モジュールにまとめて他のコントローラからも使えるようにすると
再利用できて良いと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TwitterController&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;App&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;Abraham&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;TwitterOAuth&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;TwitterOAuth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name-definition class-name&quot;&gt;TweetController&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;AppController&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
　　&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;postTweet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
　　　&lt;span class=&quot;token comment&quot;&gt;// Hello Worldと呟く&lt;/span&gt;
　　　&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;tweet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;Hello World!!!!!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;
 　&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 　　
　　&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;tweet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$text&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
         &lt;span class=&quot;token variable&quot;&gt;$oauth&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create_twitter_oauth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
         &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$oauth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;statuses/update&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$text&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
     &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 　&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

　　&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt;　&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;create_twitter_oauth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
　　　　&lt;span class=&quot;token comment&quot;&gt;// ①で入手したトークンを引数に渡し,TwitterOAuthオブジェクトを生成する。&lt;/span&gt;
　　　　&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TwitterOAuth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
　　　　　　　　　　　　　&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;Your TWETTER_CONSUMER_KEY&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
　　　　　　　　　　　　　&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;Your TWETTER_CONSUMER_SECRET&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
　　　　　　　　　　　　　&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;Your TWETTER_ACCESS_TOKEN&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
　　　　　　　　　　　　　&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;Your TWETTER_ACCESS_TOKEN_SECRET&quot;&lt;/span&gt;
　　　　　　　　　　　　　&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
　　　　&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/06/20170617_cakephp3-twitteroauth/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Kotlin + Spring Boot でログイン認証を実装]]></title><description><![CDATA[webアプリには、
だいたいログイン機能を
実装する必要がありますよね。 なので、
今回はKotlin + Spring Boot での
ログイン機能を
実装します。 ソースはgithubにあげているので、
cloneしていただければ試運転できます。  Spring…]]></description><link>https://ver-1-0.net/blog/2017/06/05/kotlin-spring-boot-authentication</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/06/05/kotlin-spring-boot-authentication</guid><pubDate>Mon, 05 Jun 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;webアプリには、
だいたいログイン機能を
実装する必要がありますよね。&lt;/p&gt;
&lt;p&gt;なので、
今回はKotlin + Spring Boot での
ログイン機能を
実装します。&lt;/p&gt;
&lt;p&gt;ソースはgithubにあげているので、
cloneしていただければ試運転できます。&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://statics.ver-1-0.xyz/uploads/2017/06/20170605_kotlin-spring-boot-authentication/kotlin-auth.png&quot; poster=&quot;https://statics.ver-1-0.xyz/uploads/2017/06/20170605_kotlin-spring-boot-authentication/kotlin-auth.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Springには、
SpringSecurityという認証管理を行う
フレームワークがあるので、
そういう便利なものを
使って実装していきます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;構成&lt;/h2&gt;
構成はざっくり書くと、
フレームワーク: Spring
言語: Kotlin
DB: Mysql
ビルド: Gradle
&lt;p&gt;です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Gradleへの依存性追加&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;&lt;a href=&quot;https://gradle.org/&quot;&gt;Gradle&lt;/a&gt;はjavaのビルドツールで、
アプリケーションのライブラリの依存性管理を行うツールです。&lt;/p&gt;
&lt;p&gt;まずは、spring-securityの依存性を追加します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-auth-sample/blob/master/build.gradle&quot;&gt;build.gradle&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;groovy&quot;&gt;&lt;pre class=&quot;language-groovy&quot;&gt;&lt;code class=&quot;language-groovy&quot;&gt;dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    compile &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-stdlib:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlin_version&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-reflect:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlin_version&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter-web&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    compile &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.springframework.boot:spring-boot-starter-thymeleaf:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;springBootVersion&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter-data-jpa&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter-security&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    compile &lt;span class=&quot;token string&quot;&gt;&apos;mysql:mysql-connector-java:5.1.6&apos;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;testCompile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter-test&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    testCompile &lt;span class=&quot;token string&quot;&gt;&apos;io.kotlintest:kotlintest:1.3.6&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;groovy&quot;&gt;&lt;pre class=&quot;language-groovy&quot;&gt;&lt;code class=&quot;language-groovy&quot;&gt;&lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter-security&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これがspring-securityの部分です。
これを追加して、gradle buildすれば準備は完了です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;DBの準備&lt;/h2&gt;
DBは以下のように、schema.sqlに書いて用意します。
今回はpasswordを平文で保存してますが、
実運用する際は、変換して保存するなどが必要です。
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;drop&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;table&lt;/span&gt; users&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;exists&lt;/span&gt; users &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  id &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  name &lt;span class=&quot;token keyword&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  email &lt;span class=&quot;token keyword&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  encrypted_password &lt;span class=&quot;token keyword&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  age &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  sex &lt;span class=&quot;token keyword&quot;&gt;tinyint&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  created_at &lt;span class=&quot;token keyword&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  updated_at &lt;span class=&quot;token keyword&quot;&gt;datetime&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; users&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;insert&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;into&lt;/span&gt; users
&lt;span class=&quot;token keyword&quot;&gt;VALUES&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;John&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;john@example.com&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Bob&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;bob@example.com&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;40&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Michael&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;michael@example.com&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Mary&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;mary@example.com&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;NOW&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; 
 
 &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;設定クラスの実装&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-auth-sample/blob/master/src/main/kotlin/auth/SecurityConfig.kt&quot;&gt;SecurityConfig.kt&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; kintai

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by admin on 2017/05/26.
 */&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AuthenticationFailureHandler
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;service&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserDetailsServiceImpl

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;beans&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;factory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Autowired
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;context&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Configuration
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;authentication&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;builders&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AuthenticationManagerBuilder
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;authentication&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;configurers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GlobalAuthenticationConfigurerAdapter
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;builders&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HttpSecurity
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;builders&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;WebSecurity
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;configuration&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;EnableWebSecurity
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;config&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;configuration&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;WebSecurityConfigurerAdapter
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;crypto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bcrypt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;BCryptPasswordEncoder
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;util&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;matcher&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AntPathRequestMatcher
&lt;span class=&quot;token comment&quot;&gt;/**
 * Spring Security設定クラス.
 */&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Configuration&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@EnableWebSecurity&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// Spring Securityの基本設定&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; SecurityConfig &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;WebSecurityConfigurerAdapter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;configure&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;web &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; WebSecurity &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// ここに設定したものはセキュリティ設定を無視&lt;/span&gt;
        web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ignoring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;antMatchers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                            &quot;&lt;span class=&quot;token comment&quot;&gt;/**/&lt;/span&gt;favicon&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ico&quot;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                            &quot;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;images&lt;span class=&quot;token comment&quot;&gt;/**&quot;,
                            &quot;/css/**&quot;,
                            &quot;/javascript/**&quot;,
                            &quot;/webjars/**&quot;)
    }

    override fun configure(http : HttpSecurity )  {
        // 認可の設定
        http.authorizeRequests()
            .antMatchers(&quot;/&quot;, &quot;/index&quot;).permitAll() // indexは全ユーザーアクセス許可
            .anyRequest().authenticated()  // それ以外は全て認証無しの場合アクセス不許可

        // ログイン設定
        http.formLogin()
            .loginProcessingUrl(&quot;/users/login&quot;)   // 認証処理のパス
            .loginPage(&quot;/index&quot;)            // ログインフォームのパス
            .failureHandler(AuthenticationFailureHandler())       // 認証失敗時に呼ばれるハンドラクラス
            .defaultSuccessUrl(&quot;/login/success&quot;)     // 認証成功時の遷移先
            .usernameParameter(&quot;email&quot;).passwordParameter(&quot;encrypted_password&quot;)  // ユーザー名、パスワードのパラメータ名
            .and()

        // ログアウト
        http.logout()
            .logoutRequestMatcher(AntPathRequestMatcher(&quot;/logout**&quot;))
            .logoutSuccessUrl(&quot;/index&quot;)

    }

    @Configuration
    open class AuthenticationConfiguration : GlobalAuthenticationConfigurerAdapter() {
        @Autowired var userDetailsService : UserDetailsServiceImpl = UserDetailsServiceImpl() ;

        override fun init( auth : AuthenticationManagerBuilder) {
            // 認証するユーザーの設定
            auth.userDetailsService(userDetailsService)


        }
    }
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コメントに書いているようにこのクラスで
ログインなしでアクセスできるURLや認証後の遷移先などを設定できます。&lt;/p&gt;
&lt;p&gt;ちなみにログイン失敗したときに定義している
AuthenticationFailureHandler
は以下のような感じ。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-auth-sample/blob/master/src/main/kotlin/auth/AuthenticationFailureHandler.kt&quot;&gt;AuthenticationFailureHandler&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; kintai

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by admin on 2017/05/26.
 */&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; java&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;io&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IOException

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; javax&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;servlet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ServletException
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; javax&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;servlet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;http&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HttpServletRequest
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; javax&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;servlet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;http&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HttpServletResponse


&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;authentication&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;BadCredentialsException
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;core&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AuthenticationException
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;authentication&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AuthenticationFailureHandler

&lt;span class=&quot;token comment&quot;&gt;/**
 * Spring Securityの認証失敗時に呼ばれるハンドラクラス
 */&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; AuthenticationFailureHandler &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; AuthenticationFailureHandler &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Throws&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;IOException&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ServletException&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;onAuthenticationFailure&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            httpServletRequest&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; HttpServletRequest&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            httpServletResponse&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; HttpServletResponse&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            authenticationException&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; AuthenticationException&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; errorId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// ExceptionからエラーIDをセットする&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;authenticationException &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; BadCredentialsException&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            errorId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ERR-0001&quot;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// ログイン画面にリダイレクト&lt;/span&gt;
        httpServletResponse&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sendRedirect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;httpServletRequest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;contextPath &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/index?error=&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; errorId&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;mid-article&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;画面テンプレートの作成&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ページは二つだけで、
ログインフォームのあるページとログイン成功ページだけです。&lt;/p&gt;
&lt;p&gt;index.html&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ja&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;xmlns:&lt;/span&gt;th&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;http://www.thymeleaf.org&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;UTF-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;トップページ&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token style&quot;&gt;&lt;span class=&quot;token language-css&quot;&gt;
        &lt;span class=&quot;token selector&quot;&gt;table,tr,td&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token property&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px solid lightgray&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;トップページ&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;form&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;loginForm&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;th:&lt;/span&gt;action&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;@{/users/login}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;password&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;encrypted_password&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;submit&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ログイン&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;login/success.html&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;en&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;UTF-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Login Sucess&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; Successfully Login !!!!!!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/logout&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;ログアウト&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;コントローラの作成&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;controller

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by version1 on 2017/02/11.
 */&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;beans&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;factory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Autowired
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stereotype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Controller
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bind&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RequestMapping
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;servlet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ModelAndView
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;service&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserService


&lt;span class=&quot;token annotation builtin&quot;&gt;@Controller&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; LoginController &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; userService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; UserService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ModelAndView&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ModelAndView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/index&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/index&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ModelAndView&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ModelAndView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/index&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/login/success&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ModelAndView &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ModelAndView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/login/success&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コントローラでルーティングを定義しています。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Serviceの定義&lt;/h2&gt;
認証するユーザの取得する部分を書いています。
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-auth-sample/blob/master/src/main/kotlin/auth/service/UserDetailsServiceImpl.kt&quot;&gt;UserDetailsServiceImpl&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;service

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by version1 on 2017/05/26.
 */&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;LoginUser
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;beans&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;factory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Autowired

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;core&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;userdetails&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserDetails&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;core&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;userdetails&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserDetailsService&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;core&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;userdetails&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UsernameNotFoundException&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stereotype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Component&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/**
 * UserDetailsServiceの実装クラス
 * Spring Securityでのユーザー認証に使用する
 */&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Component&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; UserDetailsServiceImpl &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;UserDetailsService &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;lateinit&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; userService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; UserService

    &lt;span class=&quot;token keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;loadUserByUsername&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;username &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; UserDetails&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// 認証を行うユーザー情報を格納する&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; user &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// 入力したユーザーIDから認証を行うユーザー情報を取得する&lt;/span&gt;
            user &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; userService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findByEmail&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;username&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;Exception &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// 取得時にExceptionが発生した場合&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;UsernameNotFoundException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;It can not be acquired User&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// ユーザー情報を取得できなかった場合&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;user &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;UsernameNotFoundException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;User not found for login id: &quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; username&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// ユーザー情報が取得できたらSpring Securityで認証できる形で戻す&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;LoginUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;返却するLoginUserクラスはこれ
 
 &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; auth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by admin on 2017/05/26.
 */&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; auth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;core&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;authority&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AuthorityUtils&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/**
 * 認証ユーザーの情報を格納するクラス
 */&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;LoginUser&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;user&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;security&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;core&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;userdetails&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; user&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; user&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;encrypted_password&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        AuthorityUtils&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;createAuthorityList&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ROLE_USER&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;/**
     * ログインユーザー
     */&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; loginUser&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; User&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// スーパークラスのユーザーID、パスワードに値をセットする&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// 実際の認証はスーパークラスのユーザーID、パスワードで行われる&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;loginUser &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; user
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ユーザをemailで引っ張ってくるのはこれ&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-auth-sample/blob/master/src/main/kotlin/auth/service/UserService.kt&quot;&gt;UserService&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; auth&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;service

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by version1 on 2017/02/11.
 */&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;beans&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;factory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Autowired
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stereotype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Service
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; kintai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;repository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserRepository

&lt;span class=&quot;token comment&quot;&gt;/**
 * DBからのデータ取得と加工を行う.
 */&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Service&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; UserService &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; userRepository&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; UserRepository&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/**
     * 全ユーザリストの取得
     * @return ユーザリスト
     */&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;findAllUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableList &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; userRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;findByEmail&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;email&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;String&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; User &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; userRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findByEmail&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; 
こんな感じです。
解説少ないですが、
コードが語ってくれるかと思います。（丸投げ笑）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-auth-sample&quot;&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-auth-sample&quot;&gt;https://github.com/version-1/kotlin-auth-sample&lt;/a&gt;&lt;/a&gt;
 &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/06/20170605_kotlin-spring-boot-authentication/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[「多動力」を読んでみた感想]]></title><description><![CDATA[昨日からKindle…]]></description><link>https://ver-1-0.net/blog/2017/05/28/tado-ryoku</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/05/28/tado-ryoku</guid><pubDate>Sun, 28 May 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;昨日からKindleで
配信された堀江貴文さんの&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「多動力」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;を読んでみました。&lt;/p&gt;
&lt;p&gt;「ゼロ」から始まり、堀江さんの本は何冊か読ませて頂いていますが、&lt;/p&gt;
&lt;p&gt;「結局これまで堀江さんが発信してきたことがまとめて書かれているだけなんだろうなぁ」ということを考え、買うかどうか迷いましたが結局配信初日に買ってしまいました。&lt;/p&gt;
&lt;p&gt;印象に残った点を何点か&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;三つの肩書きをもてばあなたの価値は1万倍になる&lt;/h2&gt;
この章では、一つの肩書きで終わる人生を否定し、三つ以上の肩書きを持つことを勧めています。
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;元リクルートの藤原和博さんの「レアカードになる方法」を引用し、一つ一つの肩書きを掛け算し、レアな人材になることを説いています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私も「エンジニア×英語」は意識してきましたがまだまだみたいですね笑。&lt;/p&gt;
&lt;p&gt;また本文には、似通った分野よりもかけ離れた分野を掛け合わせることがポイントでもありそれをすることで希少性も増すというのもあるようですね。&lt;/p&gt;
&lt;p&gt;休日にやっている好きなことをもっと突き詰めてみると良いかもしれないですね。日本酒とか製造方法とかを歴史から一度しっかり勉強してみるとか&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;世の中には2種類の人間がいる。それは「原液」を作る者と「原液」を薄める者だ。&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;堀江さんは、本の中で自分にしかできないアイデアや自分にしかできない発言をすることで「原液」を作れるということを言っていて、それを作ることに集中すれば、フォロワーやメディアが自分の分身となり情報を広めてくれ、想像もつかない仕事量を可能にしてくれると言っていました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;「原液」という表現がいまいちハラオチしなかったのですが
章末のJust Do It（章末のチェックリスト）に
&lt;strong&gt;「一番わかりやすいのは、あなたが会議でした発言が一人歩きして、多くの人間を動かしているか？」ということだ」&lt;/strong&gt;
というとてもわかりやすい表現がありました。&lt;/p&gt;
&lt;p&gt;また、この「原液」を作るには「教養」が必要で、「教養」とは歴史などを辿ることで得られる知識で、そのシステムの本質や歴史の変遷に関する理解のことであるとされています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;自分にしかできない発言、自分にしかできない仕事というのは上に書いた
「レアカード」になっておくとよりやりやすく、というか自然に出てくるような気がしています。&lt;/p&gt;
&lt;p&gt;というか、この記事を書いている時点で今絶賛カルピス薄め中ですね笑&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;資産が人をダメにする&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;本章ポイントに&lt;/p&gt;
&lt;blockquote&gt;手持ちのカードを捨て「やりたいこと」に最短距離で行こう。&lt;/blockquote&gt;
とある。
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;やはり、この「今自分にあるもの」は多動力の足かせになるよう。&lt;/p&gt;
&lt;p&gt;確かに、どうしても「今の資格を生かして」「経験を生かして」とかすると
自分の陣地の近場からしか攻めれなそうで、目的地にいかにはものすごい時間が要りそう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;まとめ&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;本書は、ちょうど良い長さで最後まで飽きずに読み終えられました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;「君の名は。。」ヒットの要因を語るパートで、今の若者はスマホ世代で空き時間の単位が時間単位から分単位になっていると指摘されていますが、それと同様本書も無駄な部分がなく飽きずに読み進められました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;印象に残った点をあげさせてもらいましたが、他の部分も堀江さん独自の考えが書かれていて読んで面白いものだと思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;「多動力」をテーマにこれまでの堀江さんの発言を無駄なくまとめた本になっていると思います。&lt;/p&gt;
&lt;p&gt;興味があればどうぞ。&lt;/p&gt;
&lt;div class=&quot;cstmreba&quot; style=&quot;width: 30%&quot;&gt;&lt;div class=&quot;booklink-box&quot;&gt;&lt;div class=&quot;booklink-image&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4344031156/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://images-fe.ssl-images-amazon.com/images/I/51of-IcKWRL._SL320_.jpg&quot; style=&quot;border: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;booklink-info&quot;&gt;&lt;div class=&quot;booklink-name&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4344031156/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;多動力 (NewsPicks Book)&lt;/a&gt;&lt;div class=&quot;booklink-powered-date&quot;&gt;posted with &lt;a href=&quot;https://yomereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ヨメレバ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-detail&quot;&gt;堀江 貴文 幻冬舎 2017-05-27    &lt;/div&gt;&lt;div class=&quot;booklink-link2&quot;&gt;&lt;div class=&quot;shoplinkamazon&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/asin/4344031156/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Amazonで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkkindle&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B072HVZ9RF/llg01-22/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Kindleで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkrakuten&quot;&gt;&lt;a href=&quot;https://hb.afl.rakuten.co.jp/hgc/163854b7.d97e8d5b.163854b8.3c41ae34/?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F14918400%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;楽天ブックスで購入&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;shoplinkseven&quot;&gt;&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&amp;amp;a8ejpredirect=http%3A%2F%2F7af-ent.omni7.jp%2Frelay%2Faffiliate%2FentranceProcess.do%3Furl%3Dhttp%253A%252F%252F7net.omni7.jp%252Fsearch%252F%253FsearchKeywordFlg%253D1%2526keyword%253D4-34-403115-9%252520%25257C%2525204-344-03115-9%252520%25257C%2525204-3440-3115-9%252520%25257C%2525204-34403-115-9%252520%25257C%2525204-344031-15-9%252520%25257C%2525204-3440311-5-9&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;7netで購入&lt;/a&gt;&lt;img border=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://www17.a8.net/0.gif?a8mat=2TXHHI+FDP7OQ+2N1Y+BW8O2&quot; alt=&quot;&quot;&gt;&lt;/div&gt;            	  	  	  	&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;booklink-footer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/05/20170528_tado-ryoku/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Mac の簡単設定で作業を高速化。カーソルとポインタのスピードをあげて作業高速化]]></title><description><![CDATA[今回は
簡単な設定で仕事の効率をUP
する方法をUPします。 それは、
Mac…]]></description><link>https://ver-1-0.net/blog/2017/05/25/be-faster-on-mac</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/05/25/be-faster-on-mac</guid><pubDate>Thu, 25 May 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は
簡単な設定で仕事の効率をUP
する方法をUPします。&lt;/p&gt;
&lt;p&gt;それは、
&lt;strong&gt;Macのカーソルのスピードとマウスポインタのスピードをあげる&lt;/strong&gt;
です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;よく、
文字を入力している時などに、
間違いに気づきカーソルを移動
させることがあると思うのですが、
文字数が多いと地味に待ち時間が
発生します。&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そこで、
今回の方法では、
カーソルのスピードをMAXにします。&lt;/p&gt;
&lt;p&gt;設定方法は簡単、
&lt;strong&gt;「Appleマーク」→「システム環境設定」→「キーボード」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;実際の手順は下記動画をご覧ください。&lt;/p&gt;
&lt;p&gt;※音は出ませんので安心してご視聴ください。&lt;/p&gt;
&lt;p&gt;&lt;video poster=&quot;https://statics.ver-1-0.xyz/uploads/2017/05/20170525_be-faster-on-mac/quicker-cursor.png&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/05/20170525_be-faster-on-mac/quicker-cursor.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、
マウスのポインタの移動スピードも
「Appleマーク」→「システム環境設定」→「トラックパッド」から
設定できます。&lt;/p&gt;
&lt;p&gt;写真のように軌跡の速さをMAXにします。&lt;/p&gt;
&lt;img class=&quot;post-image almost-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/05/20170525_be-faster-on-mac/スクリーンショット-2017-05-25-10.53.04-1024x791.png&quot; alt=&quot;スクリーンショット-2017-05-25-10.53.04-1024x791.png&quot;&gt;
&lt;p&gt;スピードを最大にすると、マウスポインタが軽くなった感じになります。
（最初慣れないと行き過ぎてしまうのですが。。）
より、少ない手の動きでそうさできるので、長時間PCを触る人には役に立つと思います。&lt;/p&gt;
&lt;p&gt;Macではこのような簡単な設定をすることで、
日々の作業の効率を変更できます。ぜひ試してみてください！！&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/05/20170525_be-faster-on-mac/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Macは海外で使える？海外にPCを持っていくときの素朴な疑問]]></title><description><![CDATA[題名の通りですが、
Macは海外で使えるのでしょうか？ 早速回答ですが、**使えます！**はい、以上。   とこれではさすがに不親切なので、、、 お気に入りのMac…]]></description><link>https://ver-1-0.net/blog/2017/05/18/take-mac-to-abroad</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/05/18/take-mac-to-abroad</guid><pubDate>Thu, 18 May 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;題名の通りですが、
Macは海外で使えるのでしょうか？&lt;/p&gt;
&lt;p&gt;早速回答ですが、**使えます！**はい、以上。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;とこれではさすがに不親切なので、、、&lt;/p&gt;
&lt;p&gt;お気に入りのMacが
海外の旅行先、出張先で大破みたいな
のは避けたいですよね。&lt;/p&gt;
&lt;p&gt;大破までいかなくとも、充電できず、ただの荷物になるというのも避けたいですよね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私の経験上には、
なりますがモンゴル、インドネシアで普通に
電源を繋げて使えているので、
だいたいどこの国でも使えるのではないでしょうか。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;また、経験談だけでは信用できないと思うのでちょっと調べてみると&lt;/p&gt;
&lt;p&gt;こちらAppleのサイトより&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.apple.com/jp/macbook-pro/specs/&quot;&gt;https://www.apple.com/jp/macbook-pro/specs/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;MacBookPro&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;電力条件と動作環境
電源電圧：100V～240V AC
電源周波数：50Hz〜60Hz
動作時温度：10°〜35°C
保管時温度：–25°〜45°C
相対湿度：0%〜90%（結露しないこと）
動作高度：3,048 mまでテスト済み
最高保管高度：4,572 m
最高輸送高度：10,668 m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;MacBookAir&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;電源電圧：100〜240V AC
電源周波数：50Hz〜60Hz
動作時温度：10°〜35°C
保管時温度：-25°〜45°C
相対湿度：0%〜90%（結露しないこと）
動作高度：3,048 mまでテスト済み
最高保管高度：4,572 m
最高輸送高度：10,668 m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;MackBook&lt;&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;電源電圧：100V〜240V AC
電源周波数：50Hz〜60Hz
動作時温度：10°〜35°C
保管時温度：-25°〜45°C
相対湿度：0%〜90%（結露しないこと）
動作高度：3,048 mまでテスト済み
最高保管高度：4,572 m
最高輸送高度：10,668 m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;MacBook,MacBook Air, MakBookどれも同じですね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; 
ポイントは電源電圧で、
どのモデルも&lt;strong&gt;100 ~ 240V&lt;/strong&gt; となっていることです。
世界の国のほとんどが
この範囲内におさまるためだいたい
どこの国でも使用可となるようです。&lt;/p&gt;
&lt;p&gt;ちなみに,
iPhoneも付属している充電器が
100-240Vの電圧に対応しているため。
海外でもコンセントの差込口が合えば、
問題なく使えるようです。&lt;/p&gt;
&lt;p&gt;以上、さすがMac。
海外どこでも変圧器など利用せずに使用できるようです！&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/05/20170518_take-mac-to-abroad/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Rails で Ajaxかどうかを見分ける方法 ( Ajaxで .html.erbが読み込まれるのを防ぐ）]]></title><description><![CDATA[Railsでajax送信でポップアップを表示する場合、 通常は、*.js.erb などが読み込まれるのですが、
ページ内のリンクやボタンではなく、
URLを直打ちなどした場合にControllerが通常のリクエスト通り、
*.html.rb…]]></description><link>https://ver-1-0.net/blog/2017/05/11/how-to-check-if-ajax</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/05/11/how-to-check-if-ajax</guid><pubDate>Thu, 11 May 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Railsでajax送信でポップアップを表示する場合、&lt;/p&gt;
&lt;p&gt;通常は、*.js.erb などが読み込まれるのですが、
ページ内のリンクやボタンではなく、
URLを直打ちなどした場合にControllerが通常のリクエスト通り、
*.html.rbファイルを読み込んでしまい
MissingTemplateになってしまうといった場合があると思います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&amp;nbsp;
&lt;p&gt;これを避けるには
Ajaxのリクエスト　→ 通常通り
それ以外 → 元のページにリダイレクト
のようにするのが有効です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ExamplesController&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; ApplicationController

  &lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token method-definition&quot;&gt;&lt;span class=&quot;token function&quot;&gt;index&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;unless&lt;/span&gt; request&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;xhr&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;
         redirect_to &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; 元のページ　&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;コードでは、
以下でAjaxリクエストかどうか判定しています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;request.xhr?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; 
ちなみにPOST/GETの判定は&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;request.get?
request.post?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;でできます。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/05/20170511_how-to-check-if-ajax/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[個人的RubyMineからAtomに切り替えた人おすすめパッケージ]]></title><description><![CDATA[最近開発のエディタで Atom を使うようになりました。 仕事での開発は Ruby が主で今までは、RubyMine や PHPStorm など
IntelliJ 製品 IDE を使っていたのですが、
「30 日で無料で使えなくなる」や、
「EAP…]]></description><link>https://ver-1-0.net/blog/2017/04/30/advice-for-rubymine-to-atom</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/04/30/advice-for-rubymine-to-atom</guid><pubDate>Sun, 30 Apr 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;最近開発のエディタで Atom を使うようになりました。&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;
&lt;p&gt;仕事での開発は Ruby が主で今までは、RubyMine や PHPStorm など
IntelliJ 製品 IDE を使っていたのですが、
「30 日で無料で使えなくなる」や、
「EAP なら使える」や
「しょうがない買うか！いやどうしようか。。」
などなど、迷うのが煩わしくなってきたので、Atom を使うようにしました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;RubyMine などは結構好きで使ってたのですが、
よくよく考えると IDE の機能を隅から隅まで
使っている訳ではないので、
よく使う機能が Atom で実現できればいいっしょ。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ということで Atom に乗り換えました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;だいたい開発のときに使うのは以下の機能ですね。&lt;/p&gt;
&lt;ul class=&quot;cool-list&quot;&gt;
 	&lt;li&gt;
シンタックスハイライト
&lt;/li&gt;
 	&lt;li&gt;
プロジェクト管理
&lt;/li&gt;
 	&lt;li&gt;
宣言先にジャンプ
&lt;/li&gt;
 	&lt;li&gt;
Console ( コード書きながらrails実行したりするので )
&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;なので、これらに関連してオススメのパッケージを下にまとめておきます。&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;シンタックスハイライト　&lt;a href=&quot;https://atom.io/packages/linter&quot;&gt;Linter&lt;/a&gt;&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;今利用しているのが linter 　というパッケージ
インストールの仕方は簡単 Command + ,で　設定を開いて[ Install ] を選択
Linter で検索して、出てきたものをクリックです。&lt;/p&gt;
&lt;img class=&quot;post-image almost-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170430_advice-for-rubymine-to-atom/スクリーンショット-2017-04-29-22.59.17-1024x900.png&quot; alt=&quot;スクリーンショット-2017-04-29-22.59.17-1024x900.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これをいれた後に自分が使いたい言語のパッケージを同様の手順でインストールしていきます。
ちなみに私がいれているのは
linter-csslint
linter-htmllint
linter-jshlint ( javascript 用 )
linter-ruby
linter-php&lt;/p&gt;
&lt;p&gt;ですね。
これらでだいたい自分が開発するものの
シンタックスハイライトを網羅できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;お次は、&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2 class=&quot;chapter&quot;&gt;パッケージ管理 &lt;a href=&quot;https://atom.io/packages/project-manager&quot;&gt;Project-Manger&lt;/a&gt;&lt;/h2&gt;
&amp;nbsp;
&lt;img class=&quot;post-image almost-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170430_advice-for-rubymine-to-atom/スクリーンショット-2017-04-30-12.11.34-897x1024.png&quot; alt=&quot;スクリーンショット-2017-04-30-12.11.34-897x1024.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;IDE だと一度開いたディレクトリを保存してくれたりするのですが、
テキストエディタだとデフォルトで
そういったことはしてくれません。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そこで、使うのが
project-manager というものです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;使い方は
① プロジェクトとして管理したいディレクトリを「File」 -&gt; 「Open...」で開く。
② ディレクトリを開いたら
「Packages」 -&gt; 「Project Manager」 -&gt; 「Save Project」&lt;/p&gt;
&lt;img class=&quot;post-image almost-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170430_advice-for-rubymine-to-atom/スクリーンショット-2017-04-30-11.58.58-1024x491.png&quot; alt=&quot;スクリーンショット-2017-04-30-11.58.58-1024x491.png&quot;&gt;
&lt;p&gt;③ 別のプロジェクトを開きたいときは Cmd + Ctrl + P
でプロジェクトの一覧を表示して選択。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;プロジェクトを頻繁に切り替えるという人は、
Cmd + Shift + N で新しいタブを作って、
それぞれでプロジェクトを開いておくというのもありですね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;宣言先にジャンプ &lt;a href=&quot;https://atom.io/packages/goto-definition&quot;&gt;Goto Definition&lt;/a&gt;&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;これは、
RubyMine の奴が便利でしたねー。
Cmd ＋ Click で define している所に飛べるという。&lt;/p&gt;
&lt;p&gt;Atom でこれをやるなら
&lt;a href=&quot;https://atom.io/packages/goto-definition&quot;&gt;Go To Definition&lt;/a&gt;
が使えます。&lt;/p&gt;
&lt;p&gt;これも使い方が簡単 パッケージ検索で名前を検索して、
インストールすればすぐ使えます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Console &lt;a href=&quot;https://atom.io/packages/platformio-ide-terminal&quot;&gt;Platoform-Ide-Terminal&lt;/a&gt;&lt;/h2&gt;
&lt;img class=&quot;post-image almost-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170430_advice-for-rubymine-to-atom/スクリーンショット-2017-04-30-12.07.08-1024x625.png&quot; alt=&quot;スクリーンショット-2017-04-30-12.07.08-1024x625.png&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これは使う人が多いのかわからないのですが、
(パッケージあるということはいるんだろう）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私が RubyMine を使っていた頃は、
エディタでコードをガリガリしつつ、
Console 画面を立ち上げて、
rails を起動していたり,
migration をしたりしていました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;全部を一画面でできるので重宝していたのですが、
Atom デフォルトでそれらしき機能は見つかりませんでしので、
いれたのが。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://atom.io/packages/platformio-ide-terminal&quot;&gt;Platoform-Ide-Terminal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;操作感も普通のターミナルと同じように使えるので
問題ないです。
快適です。&lt;/p&gt;
&lt;p&gt;以上!!
どれもオススメのパッケージです。&lt;/p&gt;
&lt;div class=&quot;adsense-double-rect&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/04/20170430_advice-for-rubymine-to-atom/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Node.js ビットコインの価格をBitFlyer APIを使ってリアルタイムにDBに保存する。]]></title><description><![CDATA[今回は徐々に浸透しつつあるビットコインの（個人的な見解ですが）
価格を取得する方法を紹介します！！
お使いのPCにNode.jsがインストールされていれば
すぐにリアルタイムに価格を取得できます。   APIの情報はこちらからみれます。
https://bitflyer.jp…]]></description><link>https://ver-1-0.net/blog/2017/04/28/node-js-realtime</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/04/28/node-js-realtime</guid><pubDate>Fri, 28 Apr 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は徐々に浸透しつつあるビットコインの（個人的な見解ですが）
価格を取得する方法を紹介します！！
お使いのPCにNode.jsがインストールされていれば
すぐにリアルタイムに価格を取得できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;BitFlyerのAPIを使って価格取得&lt;/h2&gt;
価格の取得には&lt;a href=&quot;https://bitflyer.jp?bf=rorqosjz&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ビットフライヤー&lt;/a&gt;のAPIを利用します。&lt;a href=&quot;https://px.a8.net/svt/ejp?a8mat=2TAGV9+1IRYQY+3JJ4+62U35&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;
&lt;/a&gt;
&lt;img src=&quot;https://www12.a8.net/0.gif?a8mat=2TAGV9+1IRYQY+3JJ4+62U35&quot; alt=&quot;&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;&gt;
&lt;p&gt;APIの情報はこちらからみれます。
&lt;a href=&quot;https://bitflyer.jp/ja/api&quot;&gt;&lt;a href=&quot;https://bitflyer.jp/ja/api&quot;&gt;https://bitflyer.jp/ja/api&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;こちらのAPIでは、&lt;a href=&quot;https://www.pubnub.com/&quot;&gt;PubNub&lt;/a&gt;
というサービスを使って
リアルタイムにAPIを取得してきます。&lt;/p&gt;
&lt;p&gt;ベースとなるのは、
&lt;a href=&quot;https://lightning.bitflyer.jp/docs?lang=ja#realtime-api&quot;&gt;こちら&lt;/a&gt;にも
記載されたコードです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;これで1ティックごとに価格を取得できます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Node.js のサンプル&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; PubNub &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;pubnub&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; pubnub &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PubNub&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;subscribeKey&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
pubnub&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function-variable function&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;message&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;channel&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; message&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
pubnub&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;channels&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;lightning_ticker_BTC_JPY&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これをindex.js などとして
適当なディレクトリに置いて以下コマンドでpubnubモジュール取得&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; pubnub --save-dev
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;node&lt;/span&gt; index.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;で実行。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;実行例&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;こう言った感じで、価格を表示し続ける
サーバの完成です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$node&lt;/span&gt; index.js
lightning_ticker_BTC_JPY &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; product_code: &lt;span class=&quot;token string&quot;&gt;&apos;BTC_JPY&apos;&lt;/span&gt;,
  timestamp: &lt;span class=&quot;token string&quot;&gt;&apos;2017-04-28T14:10:50.8892719Z&apos;&lt;/span&gt;,
  tick_id: &lt;span class=&quot;token number&quot;&gt;77957&lt;/span&gt;,
  best_bid: &lt;span class=&quot;token number&quot;&gt;147600&lt;/span&gt;,
  best_ask: &lt;span class=&quot;token number&quot;&gt;147799&lt;/span&gt;,
  best_bid_size: &lt;span class=&quot;token number&quot;&gt;0.53973796&lt;/span&gt;,
  best_ask_size: &lt;span class=&quot;token number&quot;&gt;2.35196282&lt;/span&gt;,
  total_bid_depth: &lt;span class=&quot;token number&quot;&gt;8602.3910664&lt;/span&gt;,
  total_ask_depth: &lt;span class=&quot;token number&quot;&gt;1527.97714433&lt;/span&gt;,
  ltp: &lt;span class=&quot;token number&quot;&gt;147600&lt;/span&gt;,
  volume: &lt;span class=&quot;token number&quot;&gt;11264.84506998&lt;/span&gt;,
  volume_by_product: &lt;span class=&quot;token number&quot;&gt;11264.84506998&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
lightning_ticker_BTC_JPY &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; product_code: &lt;span class=&quot;token string&quot;&gt;&apos;BTC_JPY&apos;&lt;/span&gt;,
  timestamp: &lt;span class=&quot;token string&quot;&gt;&apos;2017-04-28T14:10:51.0298905Z&apos;&lt;/span&gt;,
  tick_id: &lt;span class=&quot;token number&quot;&gt;77958&lt;/span&gt;,
  best_bid: &lt;span class=&quot;token number&quot;&gt;147600&lt;/span&gt;,
  best_ask: &lt;span class=&quot;token number&quot;&gt;147799&lt;/span&gt;,
  best_bid_size: &lt;span class=&quot;token number&quot;&gt;0.53973796&lt;/span&gt;,
  best_ask_size: &lt;span class=&quot;token number&quot;&gt;2.35196282&lt;/span&gt;,
  total_bid_depth: &lt;span class=&quot;token number&quot;&gt;8602.4940664&lt;/span&gt;,
  total_ask_depth: &lt;span class=&quot;token number&quot;&gt;1527.97714433&lt;/span&gt;,
  ltp: &lt;span class=&quot;token number&quot;&gt;147600&lt;/span&gt;,
  volume: &lt;span class=&quot;token number&quot;&gt;11264.84506998&lt;/span&gt;,
  volume_by_product: &lt;span class=&quot;token number&quot;&gt;11264.84506998&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
lightning_ticker_BTC_JPY &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; product_code: &lt;span class=&quot;token string&quot;&gt;&apos;BTC_JPY&apos;&lt;/span&gt;,
  timestamp: &lt;span class=&quot;token string&quot;&gt;&apos;2017-04-28T14:10:51.1705529Z&apos;&lt;/span&gt;,
  tick_id: &lt;span class=&quot;token number&quot;&gt;77960&lt;/span&gt;,
  best_bid: &lt;span class=&quot;token number&quot;&gt;147600&lt;/span&gt;,
  best_ask: &lt;span class=&quot;token number&quot;&gt;147799&lt;/span&gt;,
  best_bid_size: &lt;span class=&quot;token number&quot;&gt;0.53973796&lt;/span&gt;,
  best_ask_size: &lt;span class=&quot;token number&quot;&gt;2.35196282&lt;/span&gt;,
  total_bid_depth: &lt;span class=&quot;token number&quot;&gt;8619.3160664&lt;/span&gt;,
  total_ask_depth: &lt;span class=&quot;token number&quot;&gt;1527.97714433&lt;/span&gt;,
  ltp: &lt;span class=&quot;token number&quot;&gt;147600&lt;/span&gt;,
  volume: &lt;span class=&quot;token number&quot;&gt;11264.84506998&lt;/span&gt;,
  volume_by_product: &lt;span class=&quot;token number&quot;&gt;11264.84506998&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
lightning_ticker_BTC_JPY &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; product_code: &lt;span class=&quot;token string&quot;&gt;&apos;BTC_JPY&apos;&lt;/span&gt;,
  timestamp: &lt;span class=&quot;token string&quot;&gt;&apos;2017-04-28T14:10:51.3267675Z&apos;&lt;/span&gt;,
  tick_id: &lt;span class=&quot;token number&quot;&gt;77961&lt;/span&gt;,
  best_bid: &lt;span class=&quot;token number&quot;&gt;147600&lt;/span&gt;,
・
・
・
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上です！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ビットコインってどうやって買えるの？&lt;/strong&gt;
という方はこちらの記事&lt;/p&gt;
&lt;p&gt;まだ知らない？仮想通貨の買い方　ビットコイン、イーサリアム、ネム、リップルetc…&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ビットコインを使うとどうなるの？&lt;/strong&gt;
という方はこちらの記事&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2017/05/21/illustration-merit-bitcoin/&quot;&gt;ビットコイン急騰中!! ビットコインのメリットまとめてみた&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ブロックチェーンの仕組みに興味がある&lt;/strong&gt;方はこちらの記事&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/10/18/how-does-blockchain-really-work-i-built-an-app-to-show-you-translate-ja/&quot;&gt;マイニングとは？ブロックチェーンの仕組みを解説する記事”How does blockchain really work? I built an app to show you.”を訳してみた&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;が参考になるかと思います。
よろしければ覗いて見てください！！&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/04/20170428_node-js-realtime/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CakePHP3 でJSONレスンポンスを返すAPIを作成]]></title><description><![CDATA[私の運営しているサイトで
APIが必要になったので、
作り方を調べつつ
JSONレスポンスを返却するAPIを開発してみました。       まずは楽曲の一覧を通常通り画面で表示させますと
以下の通りになります。
   これらの楽曲をJSON形式で取得するAPI…]]></description><link>https://ver-1-0.net/blog/2017/04/24/cakephp3-json-response</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/04/24/cakephp3-json-response</guid><pubDate>Mon, 24 Apr 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私の運営しているサイトで
APIが必要になったので、
作り方を調べつつ
JSONレスポンスを返却するAPIを開発してみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;DBの準備&lt;/h2&gt;
下のものは、説明用のアプリです。DBは以下のようなものを用意しました。
&lt;p&gt; &lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;id&lt;/th&gt;
&lt;th&gt;title&lt;/th&gt;
&lt;th&gt;artist&lt;/th&gt;
&lt;th&gt;lyric&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;崖の上のポニョ&lt;/td&gt;
&lt;td&gt;藤岡藤巻と大橋のぞみ&lt;/td&gt;
&lt;td&gt;ポーニョポーニョポニョ...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;だんご三兄弟&lt;/td&gt;
&lt;td&gt;速水けんたろう&lt;/td&gt;
&lt;td&gt;くしにささって だんご だんご...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;およげ!たいやきくん&lt;/td&gt;
&lt;td&gt;子門真人&lt;/td&gt;
&lt;td&gt;まいにち まいにち ぼくらは てっぱんの...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&amp;nbsp;
&lt;h2 class=&quot;chapter&quot;&gt;APIを作っていく&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;まずは楽曲の一覧を通常通り画面で表示させますと
以下の通りになります。
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170424_cakephp3-json-response/スクリーンショット-2017-04-24-0.02.48-1024x450.png&quot; alt=&quot;スクリーンショット-2017-04-24-0.02.48-1024x450.png&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これらの楽曲をJSON形式で取得するAPIを作成します。&lt;/p&gt;
&lt;p&gt;JSON形式のレスポンスを返す際のコードのポイントは3つで&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;
画面の表示はいらないのでオートレンダリングをOFFにする。・・・①
&lt;/li&gt;
 	&lt;li&gt;
レスポンスオブジェクトにレスポンス形式をセットする。・・・②
&lt;/li&gt;
 	&lt;li&gt;
レスポンスBodyにJSONデータを格納する。・・・③
&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;
&lt;p&gt;になります。&lt;/p&gt;
&lt;p&gt;以下、コードです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token function&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;BAD_REQUEST_CODE&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;NORMAL_REQUEST_CODE&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;AUTHORIZED_API_TOKEN&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;authorized_key_string&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name-definition class-name&quot;&gt;SongsController&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;AppController&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
　　　　　　　　&lt;span class=&quot;token comment&quot;&gt;// index , view などのメソッドは割愛&lt;/span&gt;
　　　　　　　　・
　　　　　　　　・
　　　　　　　　・
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;getSongs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// ①HTMLの表示はいらないため自動レンダリングをOFFにする&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;autoRender&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// レスポンスの形式をJSONで指定&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;application/json&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// 認証キーを取得&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$key&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get_query_parmas&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$auth&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// 認証キーと合わない場合&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$key&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;AUTHORIZED_API_TOKEN&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// レスポンス用JSONを生成するための連想配列を生成&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create_response_data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;BAD_REQUEST_CODE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;bad request&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// ③レスポンスのBodyにjsonをセット&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json_encode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$auth&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// 認証成功の場合&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$auth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// Tableから楽曲の一覧を取得&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$records&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;Songs&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;all&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toArray&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// レスポンス用JSONを生成するための連想配列を生成&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create_response_data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;NORMAL_REQUEST_CODE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;success&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$records&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json_encode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;LOG_DEBUG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// ③レスポンスのBodyにjsonをセット&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json_encode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;JSON_UNESCAPED_UNICODE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;create_response_data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$message&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$status&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;NORMAL_REQUEST_CODE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;parmas&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;[MASK]&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;result&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;status&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;message&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$message&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;data&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;parmas&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;key&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;result&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;status&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;message&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$message&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これで、簡単にCakeでJSONを返すAPIを作成できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;APIを使用する場合は、
普通リクエストに含まれる認証キーと照合してデータを
返すので、
そこも実装しています。
不正な場合は不正な旨の結果を返してあげると良いかと思います。
（ちゃんとやるならStatusCodeを変えてやるんだと思います。）&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以下、実行結果です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token comment&quot;&gt;#　失敗パターン&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$curl&lt;/span&gt; http://localhost:8765/Songs/getSongs?key&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hogehoge
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;parmas&quot;&lt;/span&gt;:&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;hogehoge&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;,&lt;span class=&quot;token string&quot;&gt;&quot;result&quot;&lt;/span&gt;:&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;status&quot;&lt;/span&gt;:400,&lt;span class=&quot;token string&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;bad request&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
$&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;$#　成功パターン
$curl http://localhost:8765/Songs/getSongs?key=authorized_key_string
{&quot;parmas&quot;:{&quot;key&quot;:&quot;[MASK]&quot;},&quot;result&quot;:{&quot;status&quot;:200,&quot;message&quot;:&quot;success&quot;},&quot;data&quot;:[{&quot;id&quot;:1,&quot;title&quot;:&quot;崖の上のポニョ&quot;,&quot;artist&quot;:&quot;藤岡藤巻と大橋のぞみ&quot;,&quot;lyric&quot;:&quot;ポーニョポーニョポニョ...&quot;},{&quot;id&quot;:2速水けんたろう&quot;,&quot;lyric&quot;:&quot;くしにささって だんご だんご...&quot;},{&quot;id&quot;:3,&quot;title&quot;:&quot;およげ!たいやきくん&quot;,&quot;artist&quot;:&quot;子門真人&quot;,&quot;lyric&quot;:&quot;まいにち まいにち ぼくらは てっぱんの...&quot;}]}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以上です！！&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/04/20170424_cakephp3-json-response/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Electron の勉強がてら電卓を作ってみた~その② - 実装編- ~]]></title><description><![CDATA[前回
の記事では、
Electronのインストールまでやりました。 今回は実際にElectronで電卓を作って行きます。
今回肝となるのは、
IPC通信というものです。     Webの世界だと、
Httpを使って、サーバとクライアント間で通信を行うのですが、
Electron…]]></description><link>https://ver-1-0.net/blog/2017/04/10/electron-calculator-2</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/04/10/electron-calculator-2</guid><pubDate>Mon, 10 Apr 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ver-1-0.net/2017/04/09/electron-calculator-1/&quot;&gt;前回&lt;/a&gt;
の記事では、
Electronのインストールまでやりました。&lt;/p&gt;
&lt;p&gt;今回は実際にElectronで電卓を作って行きます。
今回肝となるのは、
&lt;strong&gt;IPC通信&lt;/strong&gt;というものです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Webの世界だと、
Httpを使って、サーバとクライアント間で通信を行うのですが、
ElectronはこのIPC通信というものでデータのやりとりを
行うようです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;なんか難しいことを
言っている気がするのですが、
百聞は一件にしかずで
実際にコードをみてみましょう。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&amp;nbsp;
&amp;nbsp;
&lt;h2 class=&quot;chapter&quot;&gt;計算機の完成系&lt;/h2&gt;
&lt;p&gt;画面はこんな感じ&lt;/p&gt;
&lt;img class=&quot;post-image half-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170410_electron-calculator-2/calculator.png&quot; alt=&quot;calculator&quot;&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;それでは実装&lt;/h2&gt;
&lt;p&gt;今回のディレクトリ構成は以下の通り&lt;/p&gt;
&lt;img class=&quot;post-image half-width&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170410_electron-calculator-2/dir-structure.png&quot; alt=&quot;directory structure&quot;&gt;
&lt;p&gt;※今回はjqueryも使用しています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;起動ポイントであるmain.jsがメインプロセス、
app以下のファイルがそれぞれレンダラプロセスや画面表示の変更を行います。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まず、main.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;use strict&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; electron &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; app &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; electron&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;app&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; BrowserWindow &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; electron&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;BrowserWindow&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; mainWindow &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; calc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;./app/calculate.js&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;window-all-closed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;platform &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;darwin&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;quit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;ready&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// bootChronium&lt;/span&gt;
    mainWindow &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BrowserWindow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;250&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;310&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    mainWindow&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setResizable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    mainWindow&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;loadURL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;file://&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; __dirname &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;/public/index.html&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// mainWindow.openDevTools();&lt;/span&gt;
    mainWindow&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;closed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        mainWindow &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;ipcMain&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;token comment&quot;&gt;// IPC通信のレンダラープロセスからのリクエストに対してレスポンスを返す。&lt;/span&gt;
ipcMain&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;push-num-button&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;event&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;ac&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;reverse&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;//ACや +/- が押された場合&lt;/span&gt;
        arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; calc&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;append&apos;&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// 数字が押された場合&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_append&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;is_append &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;input&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;input &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;.&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// 小数点が押された場合&lt;/span&gt;
            arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;point&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// 数字以外が押された場合&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// (AllClear や +/- 以外)&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
                 &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;reserve&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
                 &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;reverse&apos;&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;token comment&quot;&gt;//計算を実行&lt;/span&gt;
                calc&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

            arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;//電卓のディスプレイに表示&lt;/span&gt;
            calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arg&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;//演算子を保存&lt;/span&gt;
            calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;reserve &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;token comment&quot;&gt;//これまでの計算結果を保持&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;operand &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;equal&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                calc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calc&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;returnValue &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arg&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そして、こちらがメインプロセスにリクエストを送る
function.js&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;use strict&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; $ &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;jquery&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;ipcRenderer&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;//electron によりhtmlが描画されてから実行&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ready&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;button&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;click&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; num &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;#result&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;val&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; operand &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;class&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    operand &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; operand &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;num&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;append&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; operand&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;pushNumButton&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;num &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;operand&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;pushNumButton&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;input &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; result &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;operand&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// json形式でリクエストを送信&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; input &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; result &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;operand&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; operand&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ipcRenderer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sendSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;push-num-button&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// レスポンス結果を元にディスプレイに変更。&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;#result&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;val&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;説明すると、
function.jsに
ボタンが押された時にイベントが発生すると
&lt;strong&gt;pushNumButton&lt;/strong&gt;というfunctionが呼ばれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そして、その&lt;strong&gt;pushNumButton&lt;/strong&gt;がメインプロセスに
&lt;strong&gt;&apos;push-num-button&apos;&lt;/strong&gt;というイベントを発生させ、
メインプロセス(&lt;strong&gt;main.js&lt;/strong&gt;)の対応する関数が
そのリクエストに対してレスポンスを返すというような構造になっています。&lt;/p&gt;
&lt;p&gt;処理の順番としては、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;画面でボタンが押される(&lt;strong&gt;index.html&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;function.jsに書かれたclickイベントが発火しメインプロセスにリクエストを送る。&lt;/li&gt;
&lt;li&gt;main.jsに書かれたプログラムが&lt;strong&gt;&apos;push-num-button&apos;&lt;/strong&gt;イベントをキャッチし、そのリクエストに対してレスポンスを返す。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;もっと具体的にすると。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;1のボタンが押される&lt;/li&gt;
&lt;li&gt;1という数字が押されたことをメインプロセスに送信&lt;/li&gt;
&lt;li&gt;メインプロセスに保持されたデータに1を加え、電卓に表示すべき数字を返す。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というような流れになります。&lt;/p&gt;
&lt;p&gt;この基本的な流れを抑えたらあとは、
試行錯誤を繰り返し電卓を作るのみです。
（丸投げw）&lt;/p&gt;
&lt;p&gt;ソースはここに置いたので、
もしよければ試してみてください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/calculator&quot;&gt;&lt;a href=&quot;https://github.com/version-1/calculator&quot;&gt;https://github.com/version-1/calculator&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;cloneしてきて、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; calculator
electron src
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;で起動できます。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/04/20170410_electron-calculator-2/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Electron の勉強がてら電卓を作ってみた~その① - インストール編 -~]]></title><description><![CDATA[今回はWebの技術でデスクトップアプリが作れると噂のElectron…]]></description><link>https://ver-1-0.net/blog/2017/04/09/electron-calculator-1</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/04/09/electron-calculator-1</guid><pubDate>Sun, 09 Apr 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回はWebの技術でデスクトップアプリが作れると噂のElectron
に関する記事です。&lt;/p&gt;
&lt;p&gt;こんなツールないかなぁと思って、
探すしてダウンロードして使ってみたり
するのですが、
「イマイチイメージと違うな」
ということが常日頃からあり、
自分で作れたらなぁと思い前々から気になっているのが、
このElectronでした。&lt;/p&gt;
&lt;p&gt;せっかく紹介するので、少しElectronについて調べてみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&amp;nbsp;
&lt;h2 class=&quot;chapter&quot;&gt;Electronについて&lt;/h2&gt;
&lt;p&gt;開発元:ソースコード管理サービスでおなじみ&lt;a href=&quot;https://github.com/&quot;&gt;gitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Runtime:Node.js , Chronium&lt;/p&gt;
&lt;p&gt;これが基本情報。
情報不足感は否めませんが、
Slack,AtomなどもこのElectronで作られていて、
今熱い技術のようです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://electron.atom.io/&quot;&gt;&lt;a href=&quot;https://electron.atom.io/&quot;&gt;https://electron.atom.io/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これがelectronのサイトです。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170409_electron-calculator-1/electron-site.png&quot; alt=&quot;electron-site.png&quot;&gt;
引用元: https://electron.atom.io/
&lt;p&gt;はい、英語です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;何が書かれているかというと、&lt;/p&gt;
&lt;p&gt;思ったより簡単。
Webサイトを作るのと同じ要領で、Desktopアプリも作れます。
Electronはそのためのフレームワークで、
JavaScript, HTML, CSSなどで実装できます。
しかもElectronがhard partsをうまいことしてくれるので
開発者はアプリケーション開発に集中できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;と書いてあります。&lt;/p&gt;
&lt;p&gt;と、まあ調査はこれくらいにして、
題にもあるようにまずはインストール。
OSはMacです。&lt;/p&gt;
&lt;p&gt;手順は難しくなく、
①node.jsのインストール
②electronのインストール
でインストールは完了ですが、
今回は動作確認もHello Wordlまでは行きましょうか。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;インストール ( For Mac )&lt;/h2&gt;
&lt;p&gt;それでは早速、インストールから、
この手順ではあとあと、
nodeのバージョンを変更できるように、
nvmもインスートールします。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;①nvmインストール&lt;/h4&gt;
&lt;p&gt;インストール&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;インストールできたらバージョン確認&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$nvm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--version&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;0.33&lt;/span&gt;.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;①Node.jsインストール&lt;/h4&gt;
&lt;p&gt;先ほどインストールしたnvmでnodeをインストール
&lt;a href=&quot;https://nodejs.org/ja/&quot;&gt;&lt;a href=&quot;https://nodejs.org/ja/&quot;&gt;https://nodejs.org/ja/&lt;/a&gt;&lt;/a&gt;
このサイトによると、現在の推奨バージョンが6.10.2だそうなので、
それをインストール&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;nvm &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6.10&lt;/span&gt;.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;②Electronインストール&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; electron-prebuilt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;npm はnode.jsパッケージ管理ツールですので、
それを使ってElelctronをインストールします。
これだけでElectronを起動できるので、&lt;/p&gt;
&lt;p&gt;特に自分で作成したプロダクトをパッケージングする必要がないのであれば、
これだけでOK。&lt;/p&gt;
&lt;p&gt;ですが、
このあと作ったアプリをパッケージしたいので、
そちらのツールもインストール。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; electron-packager&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;③HelloWorld!!&lt;/h4&gt;
&lt;p&gt;インストールも完了したので、
早速動かしてみましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; sample
&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; init &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これをすると下のようなpackage.jsonファイルが出来上がります。
デフォルトだと下記のようにindex.jsが起動時に
実行されるファイルになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;sample&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;1.0.0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;description&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;main&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;index.js&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;echo \&quot;Error: no test specified\&quot; &amp;amp;&amp;amp; exit 1&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;keywords&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;license&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ISC&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;まだ、index.jsがないので
作成しましょう。&lt;/p&gt;
&lt;p&gt;index.jsはコチラを参考に作成
&lt;a href=&quot;https://electron.atom.io/docs/tutorial/quick-start/&quot;&gt;https://electron.atom.io/docs/tutorial/quick-start/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;app&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; BrowserWindow&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;electron&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; path &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;path&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; url &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;url&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; win

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createWindow&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  win &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BrowserWindow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;800&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;600&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;


  win&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;loadURL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;url&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;pathname&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;index.html&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;file:&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;slashes&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;//　とりあえずデベロッパーツールはいらない、メニューからでも起動できるので&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;//win.webContents.openDevTools()&lt;/span&gt;

  win&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;closed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    win &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;ready&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; createWindow&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;


app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;window-all-closed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;platform &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;darwin&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;quit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;activate&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;win &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;createWindow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;一緒にindex.htmlも作成&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markup&quot;&gt;&lt;pre class=&quot;language-markup&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;UTF-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Hello World!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Hello World!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    We are using node &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;versions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;,
    Chrome &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;versions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;chrome&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;,
    and Electron &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;versions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;electron&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;.
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;それでは、起動&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;electron &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/04/20170409_electron-calculator-1/electron-helloworld.png&quot; alt=&quot;electron hello world&quot;&gt;
&lt;p&gt;&lt;strong&gt;無事起動できました！！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;無事インストール＆動作確認済んだので次は
実際に電卓を作ります。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/04/20170409_electron-calculator-1/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Rails  migration |  通らないmigration をスキップする | down upの変更方法]]></title><description><![CDATA[rails ではマイグレーションコードを
gitで保管して、DBの変更履歴を残していたり
するのですが、
たまーーに
migrationコードを実行せずにSQLで直接
DBを変更する輩がいます。   そんな時に としようものなら、
「そんなカラムはalready…]]></description><link>https://ver-1-0.net/blog/2017/03/11/migration-matome</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/03/11/migration-matome</guid><pubDate>Sat, 11 Mar 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;rails ではマイグレーションコードを
gitで保管して、DBの変更履歴を残していたり
するのですが、
たまーーに
migrationコードを実行せずにSQLで直接
DBを変更する輩がいます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そんな時に&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;rails db&lt;span class=&quot;token symbol&quot;&gt;:migrate&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;としようものなら、
&lt;strong&gt;「そんなカラムはalreadyで存在するぜ」&lt;/strong&gt;
とか
&lt;strong&gt;「そんなカラムないけどちゃんと確認して」&lt;/strong&gt;
と怒られることがあります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;いらないマイグレーションコードだとわかっていれば
すぐにファイルを削除してしまえばいいのですが、
そうもできない時があります。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そんな時に、実際は実行してないけど
スキップする方法を探していたのですが。。。
&lt;strong&gt;ありました&lt;/strong&gt;方法は簡単です。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;スキップしたいバージョン番号のレコード
をschema_migrationテーブルに追加する&lt;/h2&gt;
&lt;p&gt;です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これで、&lt;strong&gt;migrateがupの状態&lt;/strong&gt;になり、
次から実行されることはありません。&lt;/p&gt;
&lt;p&gt;railsのマイグレーションはどうやら、
&lt;strong&gt;schema_migration&lt;/strong&gt;というテーブルで
migrationの実行有無( rake db:migrate:statusで見れるやつ )
を管理しているようですね。&lt;/p&gt;
&lt;p&gt;バージョン番号というのは
rails gすると勝手に先頭に付加される数字です&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt; 例 &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 20170310XXXXXX_create_user.rb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;また逆も然りで、
再度migrationコードを実行したい場合は
対象のレコードを削除してあげます。&lt;/p&gt;
&lt;p&gt;試してみてください!!&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/03/20170311_migration-matome/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[(Mac)Ansible を使ってみる]]></title><description><![CDATA[以前に以下のような
Ansible Install for Mac | Macのための Ansible Install
記事を書いていましたが、
しばらく勉強が止まってしまっていました。     今回は、
自分のPC上にVagrantで仮想環境を作成し、
それをAnsible…]]></description><link>https://ver-1-0.net/blog/2017/03/05/mac-ansible-ping</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/03/05/mac-ansible-ping</guid><pubDate>Sun, 05 Mar 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以前に以下のような
&lt;a href=&quot;https://ver-1-0.net/2017/01/12/ansible-for-mac/&quot;&gt;Ansible Install for Mac | Macのための Ansible Install&lt;/a&gt;
記事を書いていましたが、
しばらく勉強が止まってしまっていました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;今回は、
自分のPC上にVagrantで仮想環境を作成し、
それをAnsibleで操作するための接続設定・接続確認
というのをやりたいと思います。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;まずは、操作するサーバ(Vagrantの構築から)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant init ubuntu/xenial64
vagrant up
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$vagrant&lt;/span&gt; up
Bringing machine &lt;span class=&quot;token string&quot;&gt;&apos;default&apos;&lt;/span&gt; up with &lt;span class=&quot;token string&quot;&gt;&apos;virtualbox&apos;&lt;/span&gt; provider&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Importing base box &lt;span class=&quot;token string&quot;&gt;&apos;ubuntu/xenial64&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Matching MAC address &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; NAT networking&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Checking &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; box &lt;span class=&quot;token string&quot;&gt;&apos;ubuntu/xenial64&apos;&lt;/span&gt; is up to date&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: A newer version of the box &lt;span class=&quot;token string&quot;&gt;&apos;ubuntu/xenial64&apos;&lt;/span&gt; is available&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; You currently
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: have version &lt;span class=&quot;token string&quot;&gt;&apos;20170104.0.0&apos;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; The latest is version &lt;span class=&quot;token string&quot;&gt;&apos;20170303.1.0&apos;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; Run
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;vagrant box update&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;&lt;/span&gt; to update.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Setting the name of the VM: test_default_1488712807930_72913
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Fixed port collision &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;22&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2222&lt;/span&gt;. Now on port &lt;span class=&quot;token number&quot;&gt;2200&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Clearing any previously &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; network interfaces&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Preparing network interfaces based on configuration&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: Adapter &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;: nat
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Forwarding ports&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: &lt;span class=&quot;token number&quot;&gt;22&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;guest&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2200&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;host&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;adapter &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Running &lt;span class=&quot;token string&quot;&gt;&apos;pre-boot&apos;&lt;/span&gt; VM customizations&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Booting VM&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Waiting &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; machine to boot. This may take a few minutes&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: SSH address: &lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1:2200
    default: SSH username: ubuntu
    default: SSH auth method: password
    default: Warning: Remote connection disconnect. Retrying&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: Warning: Remote connection disconnect. Retrying&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: Warning: Authentication failure. Retrying&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: Warning: Authentication failure. Retrying&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: Warning: Authentication failure. Retrying&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: Warning: Remote connection disconnect. Retrying&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default:
    default: Inserting generated public key within guest&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: Removing insecure key from the guest &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; it&apos;s present&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: Key inserted&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; Disconnecting and reconnecting using new SSH key&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Machine booted and ready&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Checking &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; guest additions &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; VM&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: The guest additions on this VM &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; not match the installed version of
    default: VirtualBox&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; In &lt;span class=&quot;token function&quot;&gt;most&lt;/span&gt; cases this is fine, but &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please &lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt; sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your &lt;span class=&quot;token function&quot;&gt;host&lt;/span&gt; and reload your VM.
    default:
    default: Guest Additions Version: &lt;span class=&quot;token number&quot;&gt;5.0&lt;/span&gt;.24
    default: VirtualBox Version: &lt;span class=&quot;token number&quot;&gt;5.1&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; default: Mounting shared folders&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    default: /vagrant &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; /Users/jo/Vagrant/test
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これでAnsibleで操作するサーバの準備はOK&lt;/p&gt;
&lt;p&gt;次にAnsibleの準備。
管理人の場合は~/Ansibleというディレクトリを作って、
そこの下に接続に必要なファイルを置きます。&lt;/p&gt;
&lt;p&gt;デフォルトでは、
&lt;strong&gt;/etc/ansible/hosts&lt;/strong&gt;
というファイルが作られるので、
いちいちオプションを指定するのが面倒な人は
こちらにホストの定義を行うと良いかと思います。&lt;/pre&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; Ansible &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;touch&lt;/span&gt; inventory/host
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このhostファイルに接続設定を書き込みます。
が、その前に先ほど作成したVagrantイメージの
SSH接続情報を調べて置きましょう。&lt;/p&gt;
&lt;p&gt;調べ方は以下、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;/Vagrant/test/
&lt;span class=&quot;token variable&quot;&gt;$vagrant&lt;/span&gt; ssh-config
Host default
  HostName &lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1
  User ubuntu
  Port &lt;span class=&quot;token number&quot;&gt;2200&lt;/span&gt;
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/version1/Vagrant/test/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly &lt;span class=&quot;token function&quot;&gt;yes&lt;/span&gt;
  LogLevel FATAL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、秘密鍵の場所とport番号,User名などがわかりました。
ではそれを設定に書き込みましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ini&quot;&gt;&lt;pre class=&quot;language-ini&quot;&gt;&lt;code class=&quot;language-ini&quot;&gt;&lt;span class=&quot;token section&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token section-name selector&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token section&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token section-name selector&quot;&gt;targets&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token key attr-name&quot;&gt;127.0.0.1 ansible_user&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token value attr-value&quot;&gt;ubuntu ansible_port=2200 ansible_ssh_private_key_file=/Users/jo/Vagrant/t    est/.vagrant/machines/default/virtualbox/private_key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接続する際の情報が
以下にそれぞれ書き込めば完了です。&lt;/p&gt;
&lt;p&gt;ユーザ名: ansible_user
ポート番号: ansible_port
秘密鍵:ansible_ssh_private_key_file&lt;/p&gt;
&lt;p&gt;これで準備完了したので、
早速ansibleを動かして疎通確認を行いましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ansible all &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; inventory/hosts &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ping&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これでpingというModuleを使い疎通確認を行います。&lt;/p&gt;
&lt;p&gt;それでは実行&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$ansible&lt;/span&gt; all &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; inventory/hosts &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ping&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1 &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; FAILED&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;changed&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; false,
    &lt;span class=&quot;token string&quot;&gt;&quot;failed&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; true,
    &lt;span class=&quot;token string&quot;&gt;&quot;module_stderr&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Shared connection to 127.0.0.1 closed.&lt;span class=&quot;token entity&quot; title=&quot;\r&quot;&gt;\r&lt;/span&gt;&lt;span class=&quot;token entity&quot; title=&quot;\n&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;,
    &lt;span class=&quot;token string&quot;&gt;&quot;module_stdout&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/bin/sh: 1: /usr/bin/python: not found&lt;span class=&quot;token entity&quot; title=&quot;\r&quot;&gt;\r&lt;/span&gt;&lt;span class=&quot;token entity&quot; title=&quot;\n&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;,
    &lt;span class=&quot;token string&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;MODULE FAILURE&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;おっと失敗、メッセージを見るからに
&lt;strong&gt;/usr/bin/python&lt;/strong&gt;が
ないと言われているのでvagrant にSSHで接続してシンボリックリンク作成。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ln&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; /usr/bin/python3 /usr/bin/python
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これでAnsibleさんがリモートホストの
pythonを使ってリモート操作ができるはず。&lt;/p&gt;
&lt;p&gt;実行。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$ansible&lt;/span&gt; all &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; inventory/hosts &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ping&lt;/span&gt;
The authenticity of &lt;span class=&quot;token function&quot;&gt;host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;[127.0.0.1]:2200 ([127.0.0.1]:2200)&apos;&lt;/span&gt; can&apos;t be established.
ECDSA key fingerprint is SHA256:KjjtevSpvebZmVWHpc9nASxWwoD2fMPAy9a61i+6Nac.
Are you sure you want to &lt;span class=&quot;token builtin class-name&quot;&gt;continue&lt;/span&gt; connecting &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;yes/no&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;? &lt;span class=&quot;token function&quot;&gt;yes&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1 &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; SUCCESS &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;changed&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; false,
    &lt;span class=&quot;token string&quot;&gt;&quot;ping&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;pong&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;見事成功しました。
これで疎通の確認は終わったので、&lt;/p&gt;
&lt;p&gt;次回以降Playbookなどを使って
さらに実践的な内容を使っていきたです。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/03/20170305_mac-ansible-ping/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Vagrant コマンドまとめ（前半戦) | vagrant command line interface]]></title><description><![CDATA[ある日vagrantコマンドを引数なしで
叩いてしまったことが
ありました。   そうするとvagrant…]]></description><link>https://ver-1-0.net/blog/2017/03/05/vagrant-commands-summary</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/03/05/vagrant-commands-summary</guid><pubDate>Sun, 05 Mar 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ある日vagrantコマンドを引数なしで
叩いてしまったことが
ありました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;そうするとvagrantコマンドの一覧が出てきました。
コマンドではままあることなので、
驚きはしなかったのですが、
知らないコマンドがままあったので、
調べてまとめてみました。&lt;/p&gt;
&lt;p&gt;と思いましたが、
途中で息切れしたので、前半戦だけ。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markdown&quot;&gt;&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;box             manages boxes: installation, removal, etc.
connect         connect to a remotely shared Vagrant environment
destroy         stops and deletes all traces of the vagrant machine
global-status   outputs status Vagrant environments for this user
halt            stops the vagrant machine
help            shows the help for a subcommand
init            initializes a new Vagrant environment by creating a Vagrantfile
login           log in to HashiCorp&apos;s Atlas
package         packages a running vagrant environment into a box
plugin          manages plugins: install, uninstall, update, etc.
port            displays information about guest port mappings
powershell      connects to machine via powershell remoting
provision       provisions the vagrant machine
push            deploys code in this environment to a configured destination
rdp             connects to machine via RDP
reload          restarts vagrant machine, loads new Vagrantfile configuration
resume          resume a suspended vagrant machine
share           share your Vagrant environment with anyone in the world
snapshot        manages snapshots: saving, restoring, etc.
ssh             connects to machine via SSH
ssh-config      outputs OpenSSH valid configuration to connect to the machine
status          outputs status of the vagrant machine
suspend         suspends the machine
up              starts and provisions the vagrant environment
version         prints current and latest Vagrant version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;全部で25個です。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;1. vagrant up&lt;/h2&gt;
&lt;p&gt;まずは簡単なところから,
vagrantのイメージを起動します。
さらに起動後にprovisionも実行してくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;2. vagrant halt&lt;/h2&gt;
&lt;p&gt;イメージの停止。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;3. vagrant reload&lt;/h2&gt;
&lt;p&gt;イメージの再起動。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;4. vagrant version&lt;/h2&gt;
&lt;p&gt;vagrantのバージョンを標準出力に出力。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$vagrant&lt;/span&gt; version
Installed Version: &lt;span class=&quot;token number&quot;&gt;1.9&lt;/span&gt;.1
Latest Version: &lt;span class=&quot;token number&quot;&gt;1.9&lt;/span&gt;.2

To upgrade to the latest version, visit the downloads page and
download and &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; the latest version of Vagrant from the URL
below:

  https://www.vagrantup.com/downloads.html

If you&apos;re curious what changed &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; the latest release, view the
CHANGELOG below:

  https://github.com/mitchellh/vagrant/blob/v1.9.2/CHANGELOG.md
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;5. vagrant status&lt;/h2&gt;
&lt;p&gt;vagrantイメージの状態（起動/停止)を表示。&lt;/p&gt;
&lt;h2&gt;6. vagrant destroy&lt;/h2&gt;
&lt;p&gt;イメージの削除。
こうやってサーバを簡単に作ったり、消したり
できるのが良いところですよね。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;7. vagrant init&lt;/h2&gt;
&lt;p&gt;vagrant の初期化。
vagrant init で初期化ファイルを作成してくれる。
ubuntu 16を使いたい時は、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant init ubuntu/xenial64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第一引数にをconfig.vm.boxに設定してVagrantfile
を作成してくれる。&lt;/p&gt;
&lt;p&gt;--minimalオプションをつけると
最小限の記述のVagrantファイルを作成してくれる。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;Vagrant.configure&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;config&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
  config.vm.box &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;base&quot;&lt;/span&gt;
end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;urlからboxを作成する場合は、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ vagrant init my-company-box https://boxes.company.com/my-company.box
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のようにする。&lt;/p&gt;
&lt;h2&gt;8. vagrant ssh&lt;/h2&gt;
&lt;p&gt;ゲストOSにssh接続。
-cオプションをつけると,ssh接続してコマンドを投げられる。&lt;/p&gt;
&lt;h2&gt;9. vagrant ssh-config&lt;/h2&gt;
&lt;p&gt;vagrant sshする時のsshの設定を出力。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$vagrant&lt;/span&gt; ssh-config
Host default
  HostName &lt;span class=&quot;token number&quot;&gt;127.0&lt;/span&gt;.0.1
  User ubuntu
  Port &lt;span class=&quot;token number&quot;&gt;2222&lt;/span&gt;
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/jo/Vagrant/node/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly &lt;span class=&quot;token function&quot;&gt;yes&lt;/span&gt;
  LogLevel FATAL&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;10. vagrant suspend&lt;/h2&gt;
&lt;p&gt;イメージの一時停止。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;11. vagrant resume&lt;/h2&gt;
&lt;p&gt;一時停止されたイメージの再起動。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;12. vagrant box&lt;/h2&gt;
&lt;p&gt;vagrant boxの管理。
box とは、vagrantイメージにインストールする際の
OSのスナップショットのようなもの。&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;list　・・・ Vagrant Box の表示。&lt;/li&gt;
 	&lt;li&gt;add　・・・ Vagrant Box の追加。&lt;/li&gt;
 	&lt;li&gt;remove ・・・ Vagrant Box の削除。&lt;/li&gt;
 	&lt;li&gt;outdated ・・・ Vagrant Box が最新かどうか確認。&lt;/li&gt;
 	&lt;li&gt;update ・・・ Vagrant Boxを最新にアップデート。&lt;/li&gt;
 	&lt;li&gt;repackage ・・・ 指定したイメージをboxにパッケージする。&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;
&lt;h2&gt;13. vagrant global-status&lt;/h2&gt;
&lt;p&gt;ホストマシーンのvagrantイメージの状態を確認できます。
runningなbox2を停止させたい場合は、
&lt;strong&gt;vagrant halt a8f6bbc&lt;/strong&gt;で停止できる。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant global-status
&lt;span class=&quot;token function&quot;&gt;id&lt;/span&gt;       name    provider   state    directory
-------------------------------------------------------------------------
4a9f8c4  default virtualbox poweroff /Users/version1/Vagrant/box1
a8f6bbc  default virtualbox running  /Users/version1/Vagrant/box2
a08e8e9  default virtualbox running  /Users/version1/Vagrant/box3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;14. vagrant port&lt;/h2&gt;
&lt;p&gt;こんな感じで、
ゲストマシーンのホストマシーンにマッピングされた
ポートを確認できる。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$vagrant&lt;/span&gt; port
The forwarded ports &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; the machine are listed below. Please note that
these values may differ from values configured &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; the Vagrantfile &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; the
provider supports automatic port collision detection and resolution.

    &lt;span class=&quot;token number&quot;&gt;22&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;guest&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2222&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;host&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;15. vagrant powershell&lt;/h2&gt;
&lt;p&gt;powershellを起動できる模様。
macでやって見たけど、普通にwindowsじゃないとねと言われる。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;全部まとめようとしましたが、
息切れしてきたので、
前半として一旦区切ります。&lt;/p&gt;
&lt;p&gt;調子の良い時に後半戦まとめます。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/03/20170305_vagrant-commands-summary/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[画面分割で作業捗る!!Mac OS Xに標準搭載 Split View]]></title><description><![CDATA[Mac OS Xに標準搭載 Split Viewという機能
ご存知ですか？ この機能を使うと全画面表示したWindow二つを一つの画面に並べて表示できます。
私はこないだはじめって知って「もっと早く知っていれば・・・」
という情報だったので共有させて頂きます。   Mac…]]></description><link>https://ver-1-0.net/blog/2017/02/20/mac-os-x-split-view</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/02/20/mac-os-x-split-view</guid><pubDate>Mon, 20 Feb 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Mac OS Xに標準搭載 Split Viewという機能
ご存知ですか？&lt;/p&gt;
&lt;p&gt;この機能を使うと全画面表示したWindow二つを一つの画面に並べて表示できます。
私はこないだはじめって知って&lt;strong&gt;「もっと早く知っていれば・・・」&lt;/strong&gt;
という情報だったので共有させて頂きます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Macが仮想デスクトップというものを持っていて、
デスクトップを切り替えて使えて、
複数の全画面表示のWindowの間を
移動できるというのは知っている方もいるかもしれないですが
画面分割できるというのは、
意識して調べないと厳しいですよね！！&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ということで早速
やり方の動画です。&lt;/p&gt;
&lt;p&gt;&lt;video poster=&quot;https://statics.ver-1-0.xyz/uploads/2017/02/20170220_mac-os-x-split-view/split-view.png&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/02/20170220_mac-os-x-split-view/split-view.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;やり方は簡単&lt;/p&gt;
&lt;ol&gt;
 	&lt;li&gt;画面分割したいWindow A と B を用意
Aを全画面表示&lt;/li&gt;
 	&lt;li&gt;&lt;strong&gt;Ctrl + ↑&lt;/strong&gt; を押すと仮想デスクトップ全体が見れるので押す。&lt;/li&gt;
 	&lt;li&gt;BのWindowをAのWindowの上にドラッグ&amp;amp;ドロップ&lt;/li&gt;
&lt;/ol&gt;
&amp;nbsp;
&lt;p&gt;たったこれだけです。
これまでは、いちいち&lt;strong&gt;Command + Tab&lt;/strong&gt; とかで
切り替えていた画面が一度に表示できてしまいます!!&lt;/p&gt;
&lt;p&gt;これで作業効率UP間違いなしですね。
以上です!!&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/02/20170220_mac-os-x-split-view/thumbnail.jpg</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CakePHPでテスト PHPUnitを使ったテスト]]></title><description><![CDATA[さて今回は PHPUnitを使ったテストです。 自分の運営しているサイトに修正が必要 だったので、
修正がてらテストコードも書いて見ました。   CakePHPではPHPUnitの使用が想定されているので、
Composerで簡単に導入できます。   早速ですが、composer…]]></description><link>https://ver-1-0.net/blog/2017/02/17/cakephp-phpunit</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/02/17/cakephp-phpunit</guid><pubDate>Fri, 17 Feb 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;さて今回は PHPUnitを使ったテストです。&lt;/p&gt;
&lt;p&gt;自分の&lt;a href=&quot;http://kabu-ka.net/&quot;&gt;運営しているサイト&lt;/a&gt;に修正が必要&lt;/p&gt;
&lt;p&gt;だったので、
修正がてらテストコードも書いて見ました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&amp;nbsp;
&lt;h2 class=&quot;chapter&quot;&gt;CakePHP で PHPUnitを使う。&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;CakePHPではPHPUnitの使用が想定されているので、
Composerで簡単に導入できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;早速ですが、composerで依存性を追加&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;$ php composer&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;phar &lt;span class=&quot;token keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;dev phpunit&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;phpunit&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&amp;lt;6.0&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Fixturesで使用するDBの設定&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;test&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;datasource&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Cake\Database\Driver\Mysql&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;persistent&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token constant boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;host&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;dbhost&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;username&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;dblogin&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;password&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;dbpassword&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;database&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;test_database&apos;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; 
 &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;早速テストの実行&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;テストの実行は以下のコマンドで&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vendor/bin/phpunit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まずはなにも書かず実行してみます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$vendor&lt;/span&gt;/bin/phpunit
PHPUnit &lt;span class=&quot;token number&quot;&gt;5.7&lt;/span&gt;.13 by Sebastian Bergmann and contributors.

.IIIII&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;IIIIIII.                                                &lt;span class=&quot;token number&quot;&gt;18&lt;/span&gt; / &lt;span class=&quot;token number&quot;&gt;18&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

Time: &lt;span class=&quot;token number&quot;&gt;506&lt;/span&gt; ms, Memory: &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;.25MB

OK, but incomplete, skipped, or risky tests&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
Tests: &lt;span class=&quot;token number&quot;&gt;18&lt;/span&gt;, Assertions: &lt;span class=&quot;token number&quot;&gt;24&lt;/span&gt;, Incomplete: &lt;span class=&quot;token number&quot;&gt;12&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こうやって実行すると、
tests/TestCase の下のテストコードたちが
実行されます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;細かい規約は以下 CakePHPの&lt;a href=&quot;https://book.cakephp.org/3.0/ja/development/testing.html&quot;&gt;CookBook&lt;/a&gt;から引用&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;テストを含むPHPファイルは、 tests/TestCase/[Type] ディレクトリに置きます。&lt;/li&gt;
&lt;li&gt;ファイル名の最後は必ずただ .php とだけ書くのではなく Test.php とします。&lt;/li&gt;
&lt;li&gt;テストを含むクラスは &lt;code class=&quot;language-text&quot;&gt;Cake\TestSuite\TestCase&lt;/code&gt; 、 &lt;code class=&quot;language-text&quot;&gt;Cake\TestSuite\IntegrationTestCase&lt;/code&gt; または &lt;code class=&quot;language-text&quot;&gt;\PHPUnit_Framework_TestCase&lt;/code&gt; を継承する必要があります。&lt;/li&gt;
&lt;li&gt;他のクラス名と同様に、テストケースのクラス名はファイル名と一致する必要があります。 RouterTest.php は、 class RouterTest extends TestCase が含まれている 必要があります。&lt;/li&gt;
&lt;li&gt;テストを含むメソッド (つまり、アサーションを含むメソッド) の名前は testPublished() のように test で始める必要があります。 @test というアノテーションをメソッドに マークすることでテストメソッドとすることもできます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;これだけではなにもわからないので、
実際にサイトで使われているコードのテストの一部を
書いて見ました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;テストをするのはCommonServiceの
&lt;strong&gt;getLatestDate&lt;/strong&gt;というメソッドで、&lt;/p&gt;
&lt;p&gt;現在取得している株価の中で&lt;strong&gt;最新日付&lt;/strong&gt;を
返してくれます。
具体的にいうと
今日が2017年の2月17日だとして、
17日の株価がまだ取得できていない時は、
2月の16日の日付を返してくれるというようなものです。
そしてもし、データ自体がない場合はNullを返します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以下、実際のコードです&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;Cake&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;TestSuite&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;IntegrationTestCase&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;App&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Service&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;CommonService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token package&quot;&gt;Cake&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;ORM&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;TableRegistry&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by PhpStorm.
 * User: version1
 * Date: 2017/02/17
 * Time: 20:26
 */&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name-definition class-name&quot;&gt;RankingsServiceTest&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IntegrationTestCase&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$common&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$kabukaTbl&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$fixtures&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;app.Commons/normal&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;app.Commons/empty&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;setUp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;common&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CommonService&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;kabukaTbl&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name static-context&quot;&gt;TableRegistry&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;KabukaTbl&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/** getLatestDate is expected to return null
     *  when the result of select is empty.
     */&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;testGetLatestDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// load fixture&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;loadFixtures&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Normal&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;common&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getLatestDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;assert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;2017-02-17&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/** getLatestDate is expected to return null
     *  when the result of select is empty.
     */&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;testGetLatestDateError&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// load fixture&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;loadFixtures&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;Empty&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;common&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getLatestDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword static-context&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;assertNull&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コードはだいぶ端折っていて、
正常に日付が返るケースとデータがないケース
のみのテストになります。&lt;/p&gt;
&lt;p&gt;その中でもポイントはいくつかあって&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;1.テスト前の準備メソッド&lt;strong&gt;setUp()&lt;/strong&gt;&lt;/li&gt;
 	&lt;li&gt;2.Fixtureの読み込み&lt;/li&gt;
&lt;/ul&gt;
の二つがポイントです。
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;テスト前の準備メソッドsetUp&lt;/h2&gt;
&lt;p&gt;テストクラスに&lt;strong&gt;setUp()&lt;/strong&gt;メソッドを実装すると
クラス単位でのテストが始まる前に何らかの処理
例えば、テスト用のインスタンスの生成などを行えます。&lt;/p&gt;
&lt;p&gt;また上では使っていませんが、
全テストの終了後の処理は、
&lt;strong&gt;tearDown()&lt;/strong&gt;メソッドで実装できます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;Fixturesの読み込み&lt;/h2&gt;
&lt;p&gt;Fixtureとはテストを行う際に
自動でデータベースにあらかじめ用意したデータを挿入し、
テスト後に削除するという形になります。&lt;/p&gt;
&lt;p&gt;コードを見るとわかるのですが、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;public &lt;span class=&quot;token variable&quot;&gt;$fixtures&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;app.Commons/normal&apos;&lt;/span&gt;,&lt;span class=&quot;token string&quot;&gt;&apos;app.Commons/empty&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;で使用するFixtureを選択し、&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;$this-&gt;loadFixtures(&apos;Normal&apos;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;のような形でテストケースごとに使用するFixtureを分けています。&lt;/p&gt;
&lt;p&gt;また、
最初に読み込む時に &apos;app.commons&apos; とすれば
tests/Fixtures/CommonsFixture.phpのような
Fixtures直下のものを読み込むことができます。&lt;/p&gt;
&lt;p&gt;ただ、
１クラスにより複数種のデータを扱うテストがあることも考えると
一段Directoryを切って、
Fixturesをグループ化するということも大切です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;以上、自分のサイトのソースを使い、
CakePHPで
テストコードを書いてみました。&lt;/p&gt;
&lt;p&gt;実際のサイトにはここで書いた以上のテストを書く必要がありそうです。。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kabu-ka.net&quot;&gt;&lt;a href=&quot;http://kabu-ka.net&quot;&gt;http://kabu-ka.net&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;私が去年から始めた株価データベースサイトです。
興味がおありでしたら覗いて見てください。。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/02/20170217_cakephp-phpunit/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Kotlin + Spring boot で DBからデータ取得して画面に表示]]></title><description><![CDATA[はい、
kotlinシリーズ
今回はいよいよSpring Bootと合わせてみて
DBのデータをViewに表示するまでを
やってみました。     この記事を書くにあたり以下のリンクを
大変参考にさせて頂きました。 a fledgling
駆け出しが駆け出してみる
Kotlin…]]></description><link>https://ver-1-0.net/blog/2017/02/13/kotlin-spring-boot</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/02/13/kotlin-spring-boot</guid><pubDate>Mon, 13 Feb 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;はい、
kotlinシリーズ
今回はいよいよSpring Bootと合わせてみて
DBのデータをViewに表示するまでを
やってみました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;この記事を書くにあたり以下のリンクを
大変参考にさせて頂きました。&lt;/p&gt;
&lt;p&gt;a fledgling
駆け出しが駆け出してみる
Kotlin+SpringBootでWebアプリを作ってみる その1&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kissybnts.hatenablog.com/entry/2016/03/29/002331&quot;&gt;http://kissybnts.hatenablog.com/entry/2016/03/29/002331&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;h2 class=&quot;chapter&quot;&gt;構成&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;構成は以下のような形です。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;言語 : Kotlin
フレームワーク : Spring Boot
テンプレートエンジン : Thymeleaf
DB : MySQL
ビルドツール: Gradle&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;では、まずは build.gradle から&lt;/p&gt;
&lt;h4&gt;build.gradle&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;groovy&quot;&gt;&lt;pre class=&quot;language-groovy&quot;&gt;&lt;code class=&quot;language-groovy&quot;&gt;buildscript &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    ext &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        springBootVersion &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1.5.1.RELEASE&apos;&lt;/span&gt;
        ext&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;kotlin_version &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1.0.5&apos;&lt;/span&gt;
        ext&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;kotlinx_html_version &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;0.5.12&apos;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    repositories &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;jcenter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;mavenCentral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        maven &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;setUrl&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;http://dl.bintray.com/kotlin/kotlin-eap-1.1&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;classpath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.springframework.boot:spring-boot-gradle-plugin:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;springBootVersion&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;classpath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.springframework:springloaded:1.2.4.RELEASE&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        classpath &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-gradle-plugin:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlin_version&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

apply plugin&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;java&apos;&lt;/span&gt;
apply plugin&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;kotlin&apos;&lt;/span&gt;
apply plugin&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;eclipse&apos;&lt;/span&gt;
apply plugin&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot&apos;&lt;/span&gt;

jar &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    baseName &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;kotlin-web-app-sample&apos;&lt;/span&gt;

    version &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;0.0.1-SNAPSHOT&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

repositories &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;jcenter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;mavenCentral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;


dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    compile &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-stdlib:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlin_version&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-reflect:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlin_version&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter-web&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    compile &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.springframework.boot:spring-boot-starter-thymeleaf:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;springBootVersion&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter-data-jpa&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    compile &lt;span class=&quot;token string&quot;&gt;&apos;mysql:mysql-connector-java:5.1.6&apos;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;testCompile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;org.springframework.boot:spring-boot-starter-test&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    testCompile &lt;span class=&quot;token string&quot;&gt;&apos;io.kotlintest:kotlintest:1.3.6&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;当初は、
kotlinx.htmlやexposedあたりを使おうかと
画策していたのですが、
習得などWebアプリケーションとして体をなすのに
時間がかかりそうでしたので
上記のような構成になっています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ディレクトリ構成は以下のようにしてみました。
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/02/20170213_kotlin-spring-boot/dir-structure.png&quot; alt=&quot;dirstructure.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;各ソースはgitHubにあげたのでよかったらどうぞ&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-web-app-sample&quot;&gt;&lt;a href=&quot;https://github.com/version-1/kotlin-web-app-sample&quot;&gt;https://github.com/version-1/kotlin-web-app-sample&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;起動時に実行される
schema.sqlは以下のようにして&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;exists&lt;/span&gt; users &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  id &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  name &lt;span class=&quot;token keyword&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  age &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  sex &lt;span class=&quot;token keyword&quot;&gt;tinyint&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; users&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;insert&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;into&lt;/span&gt; users
&lt;span class=&quot;token keyword&quot;&gt;VALUES&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;John&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Bob&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;40&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Michael&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Mary&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ターミナルから、gradle bootRun としてから
&lt;a href=&quot;http://localhost&quot;&gt;http://localhost&lt;/a&gt;
に接続すると以下のような画面が見れます。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/02/20170213_kotlin-spring-boot/user-list.png&quot; alt=&quot;user-list&quot;&gt;
&lt;p&gt;MVCあたりのソースも載せておきます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;UserController.kt&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; samples&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;controller

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by version1 on 2017/02/11.
 */&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;beans&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;factory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Autowired
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stereotype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Controller
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bind&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RequestMapping
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;web&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;servlet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ModelAndView
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; samples&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;service&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserService


&lt;span class=&quot;token annotation builtin&quot;&gt;@Controller&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; UserController &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; userService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; UserService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ModelAndView&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token annotation builtin&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/users&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ModelAndView &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ModelAndView&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/user&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;apply&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;addObject&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;users&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; userService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAllUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;User.kt&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; samples&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by version1 on 2017/02/11.
 */&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; javax&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;persistence&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Column
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; javax&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;persistence&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Entity
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; javax&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;persistence&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GeneratedValue
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; javax&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;persistence&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Id
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; javax&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;persistence&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Table

&lt;span class=&quot;token comment&quot;&gt;/**
 * userテーブルのEntity.
 * @param id 主キー
 * @param name 名前
 * @param age 年齢
 * @param sex 性別 ( 0・・・ 女  1・・・男)
 */&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Entity&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;users&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token annotation builtin&quot;&gt;@Id&lt;/span&gt; &lt;span class=&quot;token annotation builtin&quot;&gt;@GeneratedValue&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token annotation builtin&quot;&gt;@Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nullable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token annotation builtin&quot;&gt;@Column&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; age&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token annotation builtin&quot;&gt;@Column&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nullable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; sex&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Int &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;UserRepository&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; samples&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;repository

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by version1 on 2017/02/11.
 */&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; samples&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;jpa&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;repository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;JpaRepository
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stereotype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Repository

&lt;span class=&quot;token comment&quot;&gt;/**
 * usersテーブルのRepository.
 */&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Repository&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; UserRepository &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JpaRepository&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;User&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Long&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;UserService&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; samples&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;service

&lt;span class=&quot;token comment&quot;&gt;/**
 * Created by version1 on 2017/02/11.
 */&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;beans&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;factory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;annotation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Autowired
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;springframework&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stereotype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Service
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; samples&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;User
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; samples&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;repository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UserRepository

&lt;span class=&quot;token comment&quot;&gt;/**
 * DBからのデータ取得と加工を行う.
 */&lt;/span&gt;
&lt;span class=&quot;token annotation builtin&quot;&gt;@Service&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; UserService &lt;span class=&quot;token annotation builtin&quot;&gt;@Autowired&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; userRepository&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; UserRepository&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/**
     * 全ユーザリストの取得
     * @return ユーザリスト
     */&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;findAllUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MutableList &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; userRepository&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;今回学んだこと&lt;/h2&gt;
Springの経験がある方はなんてことのない
ことかもしれませんが
&lt;ul&gt;
 	&lt;li&gt;Springは起動時にクラスパス内の&lt;strong&gt;schema.sql&lt;/strong&gt;を実行する。&lt;/li&gt;
 	&lt;li&gt;データベースなどの接続情報はクラスパス内に&lt;strong&gt;application.yml&lt;/strong&gt;を配置して、それに書く&lt;/li&gt;
 	&lt;li&gt;Thymeleafは標準で、&lt;strong&gt;&quot;classpath:/templates/返却された文字列（あるいはメソッド名).html&quot;&lt;/strong&gt; をレンダリングする。&lt;/li&gt;
&lt;/ul&gt;
ということを知りました。
Springには他にも色々と機能があるそなので
Kotlinと合わせて知識を深めていく必要がありそうですね。
&lt;p&gt;これで無事Webアプリの骨組みみたいなものは
できたと思うので、
これを自分が作りたいものに合わせて
変えていければいいですね^^
次回は、Kotlinでテストコードを書いてみたいです!!
以上です。&lt;/p&gt;
&lt;p&gt;テストコードの記事はまだ書いていませんが。。。
他にもKoltinの記事追加しました。
ご興味あればどうぞ^^&lt;/p&gt;
&lt;p&gt;・&lt;a href=&quot;/2017/09/18/kotlin-spring-api-1/&quot;&gt;Kotlin + Spring Boot で Web APIを作成してみる。 &lt;del&gt;その①&lt;/del&gt;&lt;/a&gt;
・&lt;a href=&quot;/2017/06/05/kotlin-spring-boot-authentication/&quot;&gt;Kotlin + Spring Boot でログイン認証を実装&lt;/a&gt;&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/02/20170213_kotlin-spring-boot/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[エンジニアを助けるノート(メモ帳)アプリ Boostnote が快適]]></title><description><![CDATA[…]]></description><link>https://ver-1-0.net/blog/2017/02/08/bootsnote</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/02/08/bootsnote</guid><pubDate>Wed, 08 Feb 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;社会に出てエンジニアとして役に立った助言&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;私が
エンジニアとして社会に出て
最も役に立った助言の
一つに、
「リンクやよく使うコマンドを取っておいて、いざという時に簡単に
引き出せるというのが大事だよ」
というものがありました。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;確かに、
その助言の通りエクセルやテキストエディタに
メモをしておくと
よく使うんだけどなかなか覚えられないコマンドやワンライナー
よく使うリンクなど、
探したり思い出したりする手間を省くと
だいぶ業務を効率化できました。&lt;/p&gt;
&lt;p&gt;以来、
そのアドバイスを頂いてから
都度使うコマンドやリンクはメモ帳
するという習慣が付いてはいました。&lt;/p&gt;
&lt;p&gt;ただ、
如何せん見づらかったり、
グルーピングできなかったりで
うまく整理できず丁度良いツールを探していたところ&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ついに見つけました。
その待望のツールとはこちら、
 &lt;/p&gt;
&lt;h2&gt;&lt;del datetime=&quot;2017-11-15T02:22:20+00:00&quot;&gt;bootsnote&lt;/del&gt;　boostnote　（すみません、スペルミスしてました。。）&lt;/h2&gt;
です。
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/02/20170208_bootsnote/スクリーンショット-2017-02-08-22.47.51-1024x482.png&quot; alt=&quot;スクリーンショット-2017-02-08-22.47.51-1024x482.png&quot;&gt;
&lt;p&gt;なにやらgoogle先生にお伺いを立ててみると
&lt;strong&gt;100種類のプログラミング言語に対応&lt;/strong&gt;
&lt;strong&gt;180カ国に展開&lt;/strong&gt;
などなど
評判のツールであることも伺えます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;感想&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt;ダウンロードして見て使ってみると
Markdownでメモ書きができたり、
SQLや簡単なコード、コマンドなどをスニペットとして
保存できるなどかなりいい感じです。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;さらにはアプリを起動したままにしておけば
&lt;strong&gt;「あぁ〜コピペしたい」「あぁ〜あのコマンドってどうだっけ？」&lt;/strong&gt;
というときにショートカットキーで呼び出して
目当てのコマンドやプログラムをコピーできます。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/02/20170208_bootsnote/スクリーンショット-2017-02-08-22.57.43-1024x657.png&quot; alt=&quot;スクリーンショット-2017-02-08-22.57.43-1024x657.png&quot;&gt;
&lt;p&gt;こういう形で左上のメニューボタンを押すと
設定ができるので、
そこで任意のショートカットキーに割り当てることができます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;デフォルトでは Cmd + Alt + L ( Mac ) ですが、
InteliJ形のIDEだとこれをオートインデントで使っているので
私の場合は Cmd + P でウィンドウが表示されるように設定しています。&lt;/p&gt;
&lt;p&gt;これでメモもコピペも簡単です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;繰り返しにはなりますが、&lt;/p&gt;
&lt;h2&gt;&lt;del datetime=&quot;2017-11-15T02:22:20+00:00&quot;&gt;bootsnote&lt;/del&gt;&lt;/h2&gt;
&lt;h2&gt;boostnote&lt;/h2&gt;
※こちらの綴りが正しいです。
&lt;p&gt;おすすめです。
まだ使い始めなので、
さらに便利な機能等あればこちらで紹介していきたいと
思っています!!&lt;/p&gt;
&lt;p&gt;以上です!!&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/02/20170208_bootsnote/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[kotlin SQL Framework Exposed を使ってDB接続してみた]]></title><description><![CDATA[前回のkotlinシリーズに引き続き
今回は、DB接続です。   本題に入る前にちょっと宣伝。
よかったらどうぞ     ということで、早速build.gradleを公開   build.gradle   特に難しいことはないですが、
exposedとmysql…]]></description><link>https://ver-1-0.net/blog/2017/02/08/kotlin-db-connect-by-exposed</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/02/08/kotlin-db-connect-by-exposed</guid><pubDate>Wed, 08 Feb 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;前回のkotlinシリーズに引き続き
今回は、DB接続です。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;本題に入る前にちょっと宣伝。
よかったらどうぞ&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kotlinでhttpリクエストを投げてみる。&lt;a href=&quot;http://ver-1-0.net/2017/02/05/kotlin-http-request-khttp/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://ver-1-0.net/2017/02/05/kotlin-http-request-khttp/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;KotolinでHelloworld &lt;a href=&quot;http://ver-1-0.net/2017/01/02/kotlin-hello-world/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;http://ver-1-0.net/2017/01/02/kotlin-hello-world/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;ということで、早速build.gradleを公開&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;build.gradle&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;groovy&quot;&gt;&lt;pre class=&quot;language-groovy&quot;&gt;&lt;code class=&quot;language-groovy&quot;&gt;version &lt;span class=&quot;token string&quot;&gt;&apos;1.0-SNAPSHOT&apos;&lt;/span&gt;

buildscript &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    ext &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        kotlinVersion &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1.0.2&apos;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    repositories &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;mavenCentral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;classpath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-gradle-plugin:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlinVersion&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

apply plugin&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;kotlin&apos;&lt;/span&gt;
apply plugin&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;application&apos;&lt;/span&gt;

mainClassName &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;samples.HelloWorldKt&quot;&lt;/span&gt;&lt;/span&gt;


repositories &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;mavenCentral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    maven &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;https://dl.bintray.com/kotlin/exposed/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    compile &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;org.jetbrains.kotlin:kotlin-stdlib:&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token expression&quot;&gt;kotlinVersion&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    compile &lt;span class=&quot;token string&quot;&gt;&apos;org.jetbrains.exposed:exposed:0.7.6&apos;&lt;/span&gt;
    compile &lt;span class=&quot;token string&quot;&gt;&apos;mysql:mysql-connector-java:5.1.6&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;特に難しいことはないですが、
exposedとmysqlの依存性を記載しています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;メインクラスはこういった感じで記載。&lt;/p&gt;
&lt;p&gt;src/main/kotlin/samples/HelloWorld.kt&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; samples

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;jetbrains&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exposed&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sql&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;jetbrains&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exposed&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sql&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;transactions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;transaction
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; org&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;jetbrains&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exposed&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sql&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;SchemaUtils&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;create

&lt;span class=&quot;token keyword&quot;&gt;object&lt;/span&gt; Student &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Table&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;student&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;student_id&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;autoIncrement&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;primaryKey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;val&lt;/span&gt; grade &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;grade&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;args&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Array&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Database&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;jdbc:mysql://localhost/sample&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;com.mysql.jdbc.Driver&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    transaction &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
       &lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Student&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;今回はデータベースに接続して、Student テーブルを作るまで。
CRUDとかはもう少し時間のあるときに勉強します。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;では ./gradlew run で実行してみましょう.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ ./gradlew run
:compileKotlin UP-TO-DATE
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:run

BUILD SUCCESSFUL

Total time: &lt;span class=&quot;token number&quot;&gt;5.092&lt;/span&gt; secs

This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.10/userguide/gradle_daemon.html

$ mysql &lt;span class=&quot;token parameter variable&quot;&gt;-u&lt;/span&gt; user &lt;span class=&quot;token parameter variable&quot;&gt;-ppassword&lt;/span&gt; sample &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;show tables; show columns from student&quot;&lt;/span&gt;
mysql: &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Warning&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; Using a password on the &lt;span class=&quot;token builtin class-name&quot;&gt;command&lt;/span&gt; line interface can be insecure.
+------------------+
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Tables_in_sample &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
+------------------+
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; student          &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
+------------------+
+------------+-------------+------+-----+---------+----------------+
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Field      &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Type        &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Null &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Key &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Default &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; Extra          &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
+------------+-------------+------+-----+---------+----------------+
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; student_id &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; int&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;     &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; NO   &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; PRI &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; NULL    &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; auto_increment &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; name       &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; varchar&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; NO   &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;     &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; NULL    &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;                &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; grade      &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; int&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;     &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; NO   &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;     &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; NULL    &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;                &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
+------------+-------------+------+-----+---------+----------------+

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;はい!!
確かにstudentテーブルが作成されています。&lt;/p&gt;
&lt;p&gt;CRUDとかDAOとかもっともっとできることはあるんだろうけど、
今回はとりあえずここまで。&lt;/p&gt;
&lt;h4&gt;参考URL&lt;/h4&gt;
&lt;p&gt;Javaビーム研究所 Exposedの使い方&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.orekyuu.net/?p=484&quot;&gt;http://blog.orekyuu.net/?p=484&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;算譜王におれはなる!!!! KotlinでDBアクセスしてみた(原始的な方法、標準ライブラリ、3rdパーティライブラリ)
&lt;a href=&quot;http://taro.hatenablog.jp/entry/2013/08/06/214702&quot;&gt;http://taro.hatenablog.jp/entry/2013/08/06/214702&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/JetBrains/Exposed/blob/master/src/main/kotlin/org/jetbrains/exposed/sql/Database.kt&quot;&gt;https://github.com/JetBrains/Exposed/blob/master/src/main/kotlin/org/jetbrains/exposed/sql/Database.kt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/02/20170208_kotlin-db-connect-by-exposed/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Kotlinでhttpリクエストを投げてみる。 (khttp)]]></title><description><![CDATA[さて、今回はkotlinでHTTPリクエストを送ってみます。   今回使用するライブラリは、
khttp です
https://github.com/jkcclemens/khttp ライブラリは
ここ
から見つけてきました。 使い方はkhttp…]]></description><link>https://ver-1-0.net/blog/2017/02/05/kotlin-http-request-khttp</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/02/05/kotlin-http-request-khttp</guid><pubDate>Sun, 05 Feb 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;さて、今回は&lt;strong&gt;kotlinでHTTPリクエスト&lt;/strong&gt;を送ってみます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;khttpを使ってみる&lt;/h2&gt;
&lt;p&gt;今回使用するライブラリは、
&lt;strong&gt;khttp です&lt;/strong&gt;
&lt;a href=&quot;https://github.com/jkcclemens/khttp&quot;&gt;&lt;a href=&quot;https://github.com/jkcclemens/khttp&quot;&gt;https://github.com/jkcclemens/khttp&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ライブラリは
&lt;a href=&quot;https://kotlinlang.org/docs/resources.html&quot;&gt;ここ&lt;/a&gt;
から見つけてきました。&lt;/p&gt;
&lt;p&gt;使い方は&lt;strong&gt;khttp&lt;/strong&gt;の上記リンク先に書いています。&lt;/p&gt;
&lt;p&gt;ひとまず build.gradle.ktsは&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;groovy&quot;&gt;&lt;pre class=&quot;language-groovy&quot;&gt;&lt;code class=&quot;language-groovy&quot;&gt;buildscript &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    repositories &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;gradleScriptKotlin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;classpath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;kotlinModule&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;gradle-plugin&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

plugins &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    application
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

apply &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;plugin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;kotlin&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

configure &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    mainClassName &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;samples.HelloWorldKt&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

repositories &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;gradleScriptKotlin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;jcenter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

dependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;kotlinModule&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;stdlib&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;compile&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;khttp:khttp:0.1.0&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こんな感じで
メインの処理は以下です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;package&lt;/span&gt; samples

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; khttp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get

&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;args&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Array&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; url &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; String &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://lightning.bitflyer.jp/v1/getboard&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// bitFlyerのAPI URL&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Get our IP&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;url&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;jsonObject&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getInt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;mid_price&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;リクエストの送信先はなんでもいいのですが
今回は私の最近気になる、
&lt;strong&gt;bitFlyer&lt;/strong&gt;さんの&lt;strong&gt;API&lt;/strong&gt;を利用して、
&lt;strong&gt;ビットコイン&lt;/strong&gt;の現在価格を取得してきます。&lt;/p&gt;
&lt;p&gt;ちなみにjson はこんな形でレスポンスを返します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;mid_price&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;116884.0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&quot;bids&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;price&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;116867.0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2.346&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;price&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;116853.0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;price&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;116850.0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10.18&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;price&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;116845.0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04046836&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        ・
        ・
        ・
        （略)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;では、実際に動かしてみます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ ./gradlew run
:compileKotlin
w: The &lt;span class=&quot;token string&quot;&gt;&apos;-d&apos;&lt;/span&gt; option with a directory destination is ignored because &lt;span class=&quot;token string&quot;&gt;&apos;-module&apos;&lt;/span&gt; is specified
:compileJava NO-SOURCE
:copyMainKotlinClasses
:processResources NO-SOURCE
:classes UP-TO-DATE
:run
&lt;span class=&quot;token number&quot;&gt;116840&lt;/span&gt;
BUILD SUCCESSFUL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ちなみに余計な出力を消すときは
&lt;strong&gt;-q オプション&lt;/strong&gt;
をつけてあげてください。&lt;/p&gt;
&lt;p&gt;見事 1BTCあたりの日本円価格の取得に成功しています。
以上です!!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;after-article&quot;&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/02/20170205_kotlin-http-request-khttp/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[一段上のエンジニアに。Rails でテストコードを書く ( RSpec )]]></title><description><![CDATA[昨今TDD…]]></description><link>https://ver-1-0.net/blog/2017/02/04/rails-rspec</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/02/04/rails-rspec</guid><pubDate>Sat, 04 Feb 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;昨今TDDなどもあり、
テストコードについての話題がありますが、&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;個人的にテストコードが書ける人
= 初級者を脱した中級者 のようなイメージを持っています。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;打たれる前に打てというような
考えもあるかと思いますが、
打たれても大丈夫なように体を作ることも大事です。&lt;/p&gt;
&lt;p&gt;ちょっと何を言いたいのかわかりませんが
野球もサッカーも守りが強いという土台の上でこそ
攻撃力や創造性が発揮されるということです。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;ということで脱線しましたが、
簡単な導入から行きましょう。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;まずはアプリはこんな感じです。&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/02/20170204_rails-rspec/calculator.png&quot; alt=&quot;calculator.png&quot;&gt;
&lt;p&gt;はい、簡単な足し算をするアプリです。
viewのコードは以下です。
&lt;img class=&quot;post-image&quot; width=&quot;100%&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/02/20170204_rails-rspec/viewcode.png&quot; alt=&quot;viewcode.png&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://getbootstrap.com/&quot;&gt;bootstarap&lt;/a&gt;
で多少装飾していますが、
今回はここで呼んでいる addというメソッドのテストを書いてみます。&lt;/p&gt;
&lt;p&gt;まずはインストールから
方法はここにあります。
&lt;a href=&quot;https://github.com/rspec/rspec-rails&quot;&gt;&lt;a href=&quot;https://github.com/rspec/rspec-rails&quot;&gt;https://github.com/rspec/rspec-rails&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ということで&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;gem &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;rspec-rails&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;~&gt; 3.5&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;を追記してからbundle installします。&lt;/p&gt;
&lt;p&gt;インストールできたら初期化&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;rails generate rspec:install&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;テストの実行方法は以下です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# モジュール単位&lt;/span&gt;
bundle &lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; rspec spec/&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; models / helpers / controller / &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# ファイル単位&lt;/span&gt;
bundle &lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; rspec spec/helpers/homes_helper_rspec.rb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;テストコードは以下の通り&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;rails_helper&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;HomesHelper&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

RSpec&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;describe HomesHelper&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token symbol&quot;&gt;:helper&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# pending &quot;add some examples to (or delete) #{__FILE__}&quot;&lt;/span&gt;

  describe &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;GET /homes&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
    it &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;about add method&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;# normal case&lt;/span&gt;
      sum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; HomesHelper&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      expect&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to eq&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;# either nil&lt;/span&gt;
      sum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; HomesHelper&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      expect&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to eq&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;# either nil&lt;/span&gt;
      sum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; HomesHelper&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      expect&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to eq&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;# both nil&lt;/span&gt;
      sum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; HomesHelper&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      expect&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to eq&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;it から end までがテストの一単位ですね。
実行してみます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ rspec spec/helpers
Please report a bug &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; this causes problems.
&lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;

Finished &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.02032&lt;/span&gt; seconds &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;files took &lt;span class=&quot;token number&quot;&gt;4.38&lt;/span&gt; seconds to load&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; example, &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; failures
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;はい成功です。
今回は一発目で成功しましたが、
失敗すると&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ rspec spec/helpers
WARN: Unresolved specs during Gem::Specification.reset:
      diff-lcs &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2.0&lt;/span&gt;, &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1.2&lt;/span&gt;.0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
WARN: Clearing out unresolved specs.
Please report a bug &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; this causes problems.
&lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;

Finished &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.02032&lt;/span&gt; seconds &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;files took &lt;span class=&quot;token number&quot;&gt;4.38&lt;/span&gt; seconds to load&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; example, &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; failures
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こういう感じになります。
今回はシンプルなパターンだったので、
もう少し複雑なパターンを試してみたいです。&lt;/p&gt;
&lt;p&gt;試したらまたこのブログで紹介します。&lt;/p&gt;
&lt;p&gt;rspecは他にもcontrollerやmodel,routingもテストできます。&lt;/p&gt;
&lt;p&gt;はい!今回はここまで。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/02/20170204_rails-rspec/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CakePHP3でSQLをログに吐き出す方法]]></title><description><![CDATA[CakePHP3でRailsのようにSQLを
ログに書き出すようにしたいなあと
思っていたので、
少し調べました。     調べたところ
ここに書いてありました。
https://book.cakephp.org/3.0/ja/orm/database-basics.html…]]></description><link>https://ver-1-0.net/blog/2017/01/29/cakephp3-sql-log</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/01/29/cakephp3-sql-log</guid><pubDate>Sun, 29 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;CakePHP3でRailsのようにSQLを
ログに書き出すようにしたいなあと
思っていたので、
少し調べました。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;調べたところ
ここに書いてありました。
&lt;a href=&quot;https://book.cakephp.org/3.0/ja/orm/database-basics.html#database-configuration&quot;&gt;&lt;a href=&quot;https://book.cakephp.org/3.0/ja/orm/database-basics.html#database-configuration&quot;&gt;https://book.cakephp.org/3.0/ja/orm/database-basics.html#database-configuration&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
logクエリログを有効にするには true をセットします。
有効なクエリで debug レベルの時に、 queriesLog スコープでログ出力されます。
&lt;/blockquote&gt;
&lt;p&gt;これでアプリケーションのdebug設定がtrueの時は,
SQLをapp/logs/*.logに吐いてくれます。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;デバック設定にする方法は以下の通り&lt;/p&gt;
&lt;p&gt;app/config/app.php 10~13行目あたり&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token constant boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Errors &lt;span class=&quot;token keyword&quot;&gt;and&lt;/span&gt; warnings shown&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;
&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;debug&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;filter_var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&apos;DEBUG&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;FILTER_VALIDATE_BOOLEAN&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/01/20170129_cakephp3-sql-log/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Vagrant ssh の設定の変更]]></title><description><![CDATA[今回はVagrant sshの話です。 Vagrant は vagrantでupした後に
vagrant ssh で 起動したvagrant boxにsshで接続できます。 Virtual Box とかだと、SSH server…]]></description><link>https://ver-1-0.net/blog/2017/01/26/vagrant-ssh</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/01/26/vagrant-ssh</guid><pubDate>Thu, 26 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回はVagrant sshの話です。&lt;/p&gt;
&lt;p&gt;Vagrant は vagrantでupした後に
vagrant ssh で 起動したvagrant boxにsshで接続できます。&lt;/p&gt;
&lt;p&gt;Virtual Box とかだと、SSH serverはもともとインストールされているので、
問題はないとしても ホストオンリーアダプタの設定とかは
結構面倒臭いですよね。&lt;/p&gt;
&lt;p&gt;vagrant だとサーバー起動してからsshでつなぐまで
設定が入りません。&lt;/p&gt;
&lt;p&gt;が、
vagrant ssh をrootでつなぎたい別のユーザでつなぎたいなど
あるかと思います。&lt;/p&gt;
&lt;p&gt;そんな時は、
Vagrantfile に設定を書くことで設定を変更することができます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;config.ssh.username &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;hoge&quot;&lt;/span&gt;
config.ssh.password &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;hoge&quot;&lt;/span&gt;
config.ssh.host &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
config.ssh.port &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
config.ssh.private_key_path &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで
vagrant reload で設定ファイルを読み込んで
vagrant ssh-config
すると設定が変わります。&lt;/p&gt;
&lt;p&gt;また、
&lt;code class=&quot;language-text&quot;&gt;vagrant ssh-config &gt;&gt; .ssh/config&lt;/code&gt;
として
ssh のconfigを設定してあげることもできます。&lt;/p&gt;
&lt;p&gt;vagrant は設定で色々できそうなので、
時間あるときにもう少し知識つけていきたいですね。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/01/20170126_vagrant-ssh/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Rubyのループ ( while, times ,for , each , step, upto などなど)]]></title><description><![CDATA[Rubyのループって便利ですよね!! timesとか簡単に回数指定してかけるし、
日付の配列を作ってループさせたりできるし。 というわけでRubyのループの構文に絞って紹介していきます。       いわゆるforeach…]]></description><link>https://ver-1-0.net/blog/2017/01/24/ruby-loop</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/01/24/ruby-loop</guid><pubDate>Tue, 24 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Rubyのループって便利ですよね!!&lt;/p&gt;
&lt;p&gt;timesとか簡単に回数指定してかけるし、
日付の配列を作ってループさせたりできるし。&lt;/p&gt;
&lt;p&gt;というわけでRubyのループの構文に絞って紹介していきます。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&amp;nbsp;
&lt;h3&gt;While 文&lt;/h3&gt;
while文。
条件式がTrueである限りループし続けます。
ある一定の条件で抜けたい場合は、breakを挿入します。
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;idx &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; idx &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  pp idx
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Times 文&lt;/h3&gt;
Times文。
指定した回数だけ処理を繰り返す事ができます。
下に紹介した例ではidxは 0,1,2,3・・・・108となります。
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;108.&lt;/span&gt;times &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
pp &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ボーン&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;for 文&lt;/h3&gt;
for文。
指定した回数だけ処理を繰り返す事ができます。
下に紹介した例ではidxは a,b,c~zとなります。
う〜ん便利。これでアルファベットを覚えずにすみますね。
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; alphabet &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;a&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&apos;z&apos;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  printf &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;token content&quot;&gt;alphabet&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;\n&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;each 文&lt;/h3&gt;
&lt;p&gt;いわゆるforeach文ですね。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;array &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;I&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Have&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Pen!!!&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
array&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; val &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
  p array
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ハッシュについて使ってあげると
添え字も取得できます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;h &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
 &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;セ・リーグ&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;巨人&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;阪神&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;中日&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ヤクルト&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;広島&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;横浜&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;パ・リーグ&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ソフトバンク&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ロッテ&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;日ハム&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;オリックス&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;西武&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;楽天&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
h&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; key &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; val &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
  p key
  p val
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$ruby&lt;/span&gt; test&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rb
&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;セ・リーグ&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;巨人&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;阪神&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;中日&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ヤクルト&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;広島&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;横浜&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;パ・リーグ&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;巨人&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;阪神&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;中日&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ヤクルト&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;広島&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;横浜&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;これは大分使います!!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;step , upto , downto&lt;/h3&gt;
upto は以下のように書くと20~30まで実行というようになります。
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;20.&lt;/span&gt;upto&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
   p idx
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;downto というのもある&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;20.&lt;/span&gt;upto&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
   p idx
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;さらに極め付けはstepです。
1から100までは2つずつカウントしてくれます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token number&quot;&gt;1.&lt;/span&gt;step&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;odd&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
   p odd
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;おまけ&lt;/h3&gt;
個人的にすごいなと思うのは
日付、時刻のカウントですかね。
&lt;p&gt;例) 1~3月の日付を全て表示&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;/span&gt;
jan &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;parse&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;2017/1/1&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
march_end &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;parse&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;2017/3/31&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;jan&lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;march_end&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; day &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
	  p day&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;strftime&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%Y/%m/%d&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例) 1日を30分単位で出力&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ruby&quot;&gt;&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;time&quot;&lt;/span&gt;&lt;/span&gt;
first &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;parse&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;2017/1/1 00:00:00&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
last &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;parse&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;2017/1/1  23:59:59&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;first&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to_i&lt;span class=&quot;token operator&quot;&gt;..&lt;/span&gt;last&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to_i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;step&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;60&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; t &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
          p &lt;span class=&quot;token builtin&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;at&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;t&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上!!&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/01/20170124_ruby-loop/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Mac たったの10分!! Vagrantで Ruby on Rails 5 を自動構築]]></title><description><![CDATA[Mac上にVagrantでUbuntuゲストOSを作成して、
その中にRuby on Rails 5を自動で構築します。 うまく行けば10分かからずに、
Rails5環境を構築できるかと思います。
（PCのスペック、ネット環境には依存します。） ちなみに構築した際のホストPC…]]></description><link>https://ver-1-0.net/blog/2017/01/14/vagrant-rails-5min</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/01/14/vagrant-rails-5min</guid><pubDate>Sat, 14 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Mac上にVagrantでUbuntuゲストOSを作成して、
その中にRuby on Rails 5を自動で構築します。&lt;/p&gt;
&lt;p&gt;うまく行けば&lt;strong&gt;10分かからず&lt;/strong&gt;に、
Rails5環境を構築できるかと思います。
（PCのスペック、ネット環境には依存します。）&lt;/p&gt;
&lt;p&gt;ちなみに構築した際のホストPCのスペックは
&lt;strong&gt;ホストOS: Mac OS X 10.12.2（メモリ8GB)&lt;/strong&gt;です。&lt;/p&gt;
&lt;h2 id=&quot;1Virtual-Boxインストール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1Virtual-Box%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; aria-label=&quot;1Virtual Boxインストール permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1.Virtual Boxインストール&lt;/h2&gt;
&lt;p&gt;ここからMac用のものをダウンロード&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp&quot;&gt;http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;2Vagrantインストール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2Vagrant%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; aria-label=&quot;2Vagrantインストール permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2.Vagrantインストール&lt;/h2&gt;
&lt;p&gt;インストールはこちらから&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.vagrantup.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;https://www.vagrantup.com/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Downloadをクリック&lt;/h4&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/01/20170114_vagrant-rails-5min/vagrant-top.png&quot; alt=&quot;vagrant-top&quot;&gt;
&lt;h4&gt;Macのリンクを選択&lt;/h4&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/01/20170114_vagrant-rails-5min/download-vagrant.png&quot; alt=&quot;download-vagrant.png&quot;&gt;
&lt;h4&gt;ターミナルでインストールされたか確認&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant &lt;span class=&quot;token parameter variable&quot;&gt;--version&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;エラーが出なければOK&lt;/p&gt;
&lt;h2 id=&quot;3Vagrant-Box作成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3Vagrant-Box%E4%BD%9C%E6%88%90&quot; aria-label=&quot;3Vagrant Box作成 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3.Vagrant Box作成&lt;/h2&gt;
&lt;p&gt;適当なフォルダにVagrantフォルダを作成&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; ~/Vagrant&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vagrant 初期化&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant init ubuntu/xenial64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;4Vagrantfile編集&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4Vagrantfile%E7%B7%A8%E9%9B%86&quot; aria-label=&quot;4Vagrantfile編集 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4.Vagrantfile編集&lt;/h2&gt;
&lt;p&gt;vagrant init の後に&lt;strong&gt;Vagrantfile&lt;/strong&gt;というのがあるので
それを編集
編集箇所は3箇所&lt;/p&gt;
&lt;h4&gt;プライベートアドレス設定&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;27行目あたり&lt;/strong&gt;
config.vm.networkのコメントアウトを外す&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Create a private network, which allows host-only access to the machine&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# using a specific IP.&lt;/span&gt;
 config.vm.network &lt;span class=&quot;token string&quot;&gt;&quot;private_network&quot;&lt;/span&gt;, ip: &lt;span class=&quot;token string&quot;&gt;&quot;192.168.33.10&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;メモリの割り当て設定&lt;/h4&gt;
&lt;p&gt;4GB程度に設定(お好みで)
あまり低いとインストールに時間がかかるかも&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;   config.vm.provider &lt;span class=&quot;token string&quot;&gt;&quot;virtualbox&quot;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;vb&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
     &lt;span class=&quot;token comment&quot;&gt;# Display the VirtualBox GUI when booting the machine&lt;/span&gt;
     &lt;span class=&quot;token comment&quot;&gt;#   vb.gui = true&lt;/span&gt;
     &lt;span class=&quot;token comment&quot;&gt;# Customize the amount of memory on the VM:&lt;/span&gt;
    vb.memory &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;4096&quot;&lt;/span&gt;
   end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5&gt;Rails インストールシェルの設定&lt;/h5&gt;
&lt;p&gt;ここにRailsをインストールするためのコマンドを書き込む
最後の方の&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;config.vm.provision &quot;shell&quot;, inline: &amp;lt;&amp;lt;-SHELL&lt;/code&gt;から
&lt;code class=&quot;language-text&quot;&gt;SHELL&lt;/code&gt;の間に以下を書き込む&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 必要なパッケージをインストール&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; build-essential zlib1g-dev libssl-dev
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; libreadline-dev libyaml-dev libxml2-dev libxslt-dev
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; ruby-dev nodejs
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; rbenv
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; libsqlite3-dev
&lt;span class=&quot;token comment&quot;&gt;# Railsインストール&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; gem &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; rails
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; gem &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; sqlite3 &lt;span class=&quot;token comment&quot;&gt;# SQLITE用にインストール&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; gem &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; therubyracer

&lt;span class=&quot;token comment&quot;&gt;# Railsアプリケーション作成&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; /vagrant  &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rails new myapp
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; chmwon &lt;span class=&quot;token parameter variable&quot;&gt;-R&lt;/span&gt; ubuntu:ubuntu /vagrant/myapp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;5Vagrant起動&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#5Vagrant%E8%B5%B7%E5%8B%95&quot; aria-label=&quot;5Vagrant起動 permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;5.Vagrant起動&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant up&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;初回起動時に上で書いたシェルを実行してくれる。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;できたか確認&lt;/h4&gt;
&lt;p&gt;仮想環境にログイン&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;vagrant &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Rails アプリをWebRickで動かす&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; /vagrant/myapp
rails s &lt;span class=&quot;token parameter variable&quot;&gt;-b&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;.0.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;エラーなく起動したら &lt;a href=&quot;http://192.168.33.10:3000&quot;&gt;http://192.168.33.10:3000&lt;/a&gt;
に接続してみる。&lt;/p&gt;
&lt;h2 id=&quot;6振り返り&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A&quot; aria-label=&quot;6振り返り permalink&quot; class=&quot;heading-link before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;6.振り返り&lt;/h2&gt;
&lt;p&gt;ここまでスムーズに行けば10分程度でRailsが動くサーバを作成できる。
環境構築は意外と時間がかかるので、
こういう形でどんどん自動化していきたい。&lt;/p&gt;
&lt;p&gt;ただ、いきなり環境構築のためのスクリプトを書くのは
不可能なので&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;①手動で試行錯誤しながら環境構築&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;②①の手順をVagrantのprovisonシェルに書く&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;という流れで自動化していくのが良さそう。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/01/20170114_vagrant-rails-5min/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[Ansible Install for Mac | Macのための Ansible Install]]></title><description><![CDATA[環境構築自動化、構成管理などのキーワードに惹かれ、
Ansible勉強のためインストールします。 以下手順です。 Mac OSXを前提としていますが、
Mac はpython2系がデフォルトで入っているようなのでまず
python3のインストールから。     python…]]></description><link>https://ver-1-0.net/blog/2017/01/12/ansible-for-mac</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/01/12/ansible-for-mac</guid><pubDate>Thu, 12 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;環境構築自動化、構成管理などのキーワードに惹かれ、
Ansible勉強のためインストールします。&lt;/p&gt;
&lt;p&gt;以下手順です。&lt;/p&gt;
&lt;p&gt;Mac OSXを前提としていますが、
Mac はpython2系がデフォルトで入っているようなのでまず
python3のインストールから。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;①python3インストール&lt;/h2&gt;
&amp;nbsp;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;pythonのバージョンの管理ができるpyenvをインストール&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; pyenv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;~/.bashrcにpyenvの環境変数等を設定&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;PYENV_ROOT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token environment constant&quot;&gt;$HOME&lt;/span&gt;/.pyenv&quot;&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$PYENV_ROOT&lt;/span&gt;/bin:&lt;span class=&quot;token environment constant&quot;&gt;$PATH&lt;/span&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;eval&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;pyenv init -&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;python3をインストール&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;pyenv &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3.5&lt;/span&gt;.0
pyenv global &lt;span class=&quot;token number&quot;&gt;3.5&lt;/span&gt;.0
pyenv rehash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;インストールされたことを確認&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$python&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--version&lt;/span&gt;
Python &lt;span class=&quot;token number&quot;&gt;3.5&lt;/span&gt;.0 &lt;span class=&quot;token comment&quot;&gt;# OK !!!&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;③パッケージ管理ツールpipをインストール&lt;/h2&gt;
&amp;nbsp;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;easy_install pip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;④Ansible をインストール&lt;/h2&gt;
&amp;nbsp;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; pip &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; ansible&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;正常にインストールされたことを確認&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$ansible&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--version&lt;/span&gt;
ansible &lt;span class=&quot;token number&quot;&gt;2.2&lt;/span&gt;.0.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;次以降は、
AnsibleとVagantを組み合わせて
CakePHP( or Rails)の環境を作れるように&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/01/20170112_ansible-for-mac/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CakePHP3 テンプレートを共通化。CakePHP部分テンプレート]]></title><description><![CDATA[Rails のようにCakePHPでもViewの共通化ができないか
調べた。 その結果。見つけた。 http://improve-future.com/cakephp3-how-to-use-partial-template-like-in-rails.html…]]></description><link>https://ver-1-0.net/blog/2017/01/04/cakephp3-partial</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/01/04/cakephp3-partial</guid><pubDate>Wed, 04 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Rails のようにCakePHPでもViewの共通化ができないか
調べた。&lt;/p&gt;
&lt;p&gt;その結果。見つけた。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://improve-future.com/cakephp3-how-to-use-partial-template-like-in-rails.html&quot;&gt;&lt;a href=&quot;http://improve-future.com/cakephp3-how-to-use-partial-template-like-in-rails.html&quot;&gt;http://improve-future.com/cakephp3-how-to-use-partial-template-like-in-rails.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;共通テンプレートをTemplate/Elementに切り出し&lt;/h2&gt;
共通化したい部分のビューを
Template/Element配下に~.ctpとして配置。
CakePHP2では、View/Elementだったそう。
&lt;p&gt;そして、本チャンのテンプレートから呼び出し&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;element&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;search_firm&apos;&lt;/span&gt;,&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;result&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$result_org&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; ?&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上の書き方だと
部分テンプレートでは $resultとして変数の値を引き継げる。&lt;/p&gt;
&lt;p&gt;どこからでもテンプレートが呼び出せて便利。
検索フォームなどで使えるかも
あとは表組みなど。&lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/01/20170104_cakephp3-partial/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[CakePHPをインストール]]></title><description><![CDATA[OSはLubuntu 16.0.4 https://book.cakephp.org/3.0/ja/installation.html       ここからダウンロード
https://getcomposer.org/download/
ダウンロードしたcomposer…]]></description><link>https://ver-1-0.net/blog/2017/01/03/cakephp-install</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/01/03/cakephp-install</guid><pubDate>Tue, 03 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;OSはLubuntu 16.0.4&lt;/p&gt;
&lt;h2 class=&quot;chapter&quot;&gt;PHPの7.0インストール&lt;/h2&gt;
まずはPHPをインストール
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; php7.0-cli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;php&quot;&gt;&lt;pre class=&quot;language-php&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;php &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;v
&lt;span class=&quot;token constant&quot;&gt;PHP&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;7.0&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.8&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;ubuntu3 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cli&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;NTS&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;Copyright&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1997&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt; The &lt;span class=&quot;token constant&quot;&gt;PHP&lt;/span&gt; Group
Zend Engine v3&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Copyright&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1998&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt; Zend Technologies
    with Zend OPcache v7&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;ubuntu3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Copyright&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1999&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; by Zend Technologies
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://book.cakephp.org/3.0/ja/installation.html&quot;&gt;&lt;a href=&quot;https://book.cakephp.org/3.0/ja/installation.html&quot;&gt;https://book.cakephp.org/3.0/ja/installation.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;CakePHPインストール&lt;/h2&gt;
&lt;h4&gt;CakePHP に必要なライブラリをインストール&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; php-mbstring php-intl php-mysqli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;composer のインストール&lt;/h4&gt;
&lt;p&gt;ここからダウンロード
&lt;a href=&quot;https://getcomposer.org/download/&quot;&gt;&lt;a href=&quot;https://getcomposer.org/download/&quot;&gt;https://getcomposer.org/download/&lt;/a&gt;&lt;/a&gt;
ダウンロードしたcomposerにパスが通るように移動&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mv&lt;/span&gt; composer.phar /usr/local/bin/composer&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; self-update &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; create-project --prefer-dist cakephp/app my_app_name&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; self-update &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; create-project --prefer-dist cakephp/app my_app_name
You are already using &lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; version &lt;span class=&quot;token number&quot;&gt;1.3&lt;/span&gt;.0 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;stable channel&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;.
Do not run Composer as root/super user&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; See https://getcomposer.org/root &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; details
Installing cakephp/app &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3.3&lt;/span&gt;.5&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  - Installing cakephp/app &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3.3&lt;/span&gt;.5&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
Created project &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; my_app_name
Loading &lt;span class=&quot;token function&quot;&gt;composer&lt;/span&gt; repositories with package information
Updating dependencies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;including require-dev&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
Package operations: &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; installs, &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; updates, &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; removals
  - Installing aura/installer-default &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.0&lt;/span&gt;.0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing cakephp/plugin-installer &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;.15&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing mobiledetect/mobiledetectlib &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2.8&lt;/span&gt;.24&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing psr/http-message &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.0&lt;/span&gt;.1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing zendframework/zend-diactoros &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.3&lt;/span&gt;.7&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing aura/intl &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.1&lt;/span&gt;.1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing cakephp/chronos &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.0&lt;/span&gt;.3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing psr/log &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.0&lt;/span&gt;.2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing cakephp/cakephp &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3.3&lt;/span&gt;.11&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing symfony/yaml &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v3.2.1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing symfony/debug &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v3.2.1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing symfony/polyfill-mbstring &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v1.3.0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing symfony/console &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v3.2.1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing symfony/filesystem &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v3.2.1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing symfony/config &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v3.2.1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing robmorgan/phinx &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v0.6.5&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing cakephp/migrations &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.6&lt;/span&gt;.6&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing jakub-onderka/php-console-color &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing jakub-onderka/php-console-highlighter &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v0.3.2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing dnoegel/php-xdg-base-dir &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing nikic/php-parser &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v3.0.2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing symfony/var-dumper &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v3.2.1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing psy/psysh &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v0.8.0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing jdorn/sql-formatter &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v1.2.17&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing cakephp/debug_kit &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3.5&lt;/span&gt;.0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
  - Installing cakephp/bake &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.2&lt;/span&gt;.10&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Downloading: &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;%
cakephp/app suggests installing markstory/asset_compress &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;An asset compression plugin &lt;span class=&quot;token function&quot;&gt;which&lt;/span&gt; provides &lt;span class=&quot;token function&quot;&gt;file&lt;/span&gt; concatenation and a flexible filter system &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; preprocessing and minification.&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
cakephp/app suggests installing phpunit/phpunit &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Allows automated tests to be run without system-wide install.&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
cakephp/app suggests installing cakephp/cakephp-codesniffer &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Allows to check the code against the coding standards used &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; CakePHP.&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
symfony/console suggests installing symfony/event-dispatcher &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
symfony/console suggests installing symfony/process &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
symfony/var-dumper suggests installing ext-symfony_debug &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
psy/psysh suggests installing ext-pdo-sqlite &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;The doc &lt;span class=&quot;token builtin class-name&quot;&gt;command&lt;/span&gt; requires SQLite to work.&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
psy/psysh suggests installing hoa/console &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;A pure PHP readline implementation. You&lt;span class=&quot;token string&quot;&gt;&apos;ll want this if your PHP install doesn&apos;&lt;/span&gt;t already support readline or libedit.&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
cakephp/debug_kit suggests installing ext-sqlite &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;DebugKit needs to store panel data &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; a database. SQLite is simple and easy to use.&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
Writing lock &lt;span class=&quot;token function&quot;&gt;file&lt;/span&gt;
Generating autoload files
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; Cake&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Composer&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Installer&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;PluginInstaller::postAutoloadDump
&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; App&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Console&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;Installer::postInstall
Created &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;config/app.php&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;file&lt;/span&gt;
Set Folder Permissions ? &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Default to Y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Y,n&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;? Y
Permissions &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; on /mnt/VBShare/projects/php/my_app_name/tmp/cache
Permissions &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; on /mnt/VBShare/projects/php/my_app_name/tmp/cache/models
Permissions &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; on /mnt/VBShare/projects/php/my_app_name/tmp/cache/persistent
Permissions &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; on /mnt/VBShare/projects/php/my_app_name/tmp/cache/views
Permissions &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; on /mnt/VBShare/projects/php/my_app_name/tmp/sessions
Permissions &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; on /mnt/VBShare/projects/php/my_app_name/tmp/tests
Permissions &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; on /mnt/VBShare/projects/php/my_app_name/tmp
Permissions &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; on /mnt/VBShare/projects/php/my_app_name/logs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;mysql をインストール&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; mysql-server&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;mysql を起動&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;service&lt;/span&gt; mysql start&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;アプリケーション用DBを作成&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;service&lt;/span&gt; mysql start
mysql &lt;span class=&quot;token parameter variable&quot;&gt;-u&lt;/span&gt; root &lt;span class=&quot;token parameter variable&quot;&gt;-pxxxxx&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;create database myapp&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;config/app.phpの220行あたりのデータベース接続情報を変更&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Datasources&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&apos;default&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;token string&quot;&gt;&apos;className&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Cake\Database\Connection&apos;&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;driver&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Cake\Database\Driver\Mysql&apos;&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;persistent&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; false,
            &lt;span class=&quot;token string&quot;&gt;&apos;host&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;localhost&apos;&lt;/span&gt;,
            /**
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port &lt;span class=&quot;token number&quot;&gt;8889&lt;/span&gt;, MAMP &lt;span class=&quot;token function&quot;&gt;users&lt;/span&gt; will want to uncomment
             * the following line and &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; the port accordingly
             */
            //&lt;span class=&quot;token string&quot;&gt;&apos;port&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;non_standard_port_number&apos;&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;username&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;user&apos;&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;password&apos;&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;database&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;myapp&apos;&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;encoding&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;utf8&apos;&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;timezone&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;UTC&apos;&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;flags&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;,
            &lt;span class=&quot;token string&quot;&gt;&apos;cacheMetadata&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; true,
            &lt;span class=&quot;token string&quot;&gt;&apos;log&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; false,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;サーバを起動して稼動確認&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$bin&lt;/span&gt;/cake server &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;.0.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ブラウザから接続下記画面で&lt;/p&gt;
&lt;img class=&quot;post-image&quot; src=&quot;https://statics.ver-1-0.xyz/uploads/2017/01/20170103_cakephp-install/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2017-01-03-18.52.23-300x274.png&quot;&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/01/20170103_cakephp-install/thumbnail.png</thumbnailUrl><language>ja</language></item><item><title><![CDATA[KotlinでHello world!!]]></title><description><![CDATA[KotlinでHello Worldしてみる。
OSは Mac OS 上に立てたゲストOS のLubuntu バージョンは16.10 ①とりあえずJavaをインストール
Oracle's PPAを追加してからapt-get 参考URL
http://kiy27…]]></description><link>https://ver-1-0.net/blog/2017/01/02/kotlin-hello-world</link><guid isPermaLink="false">https://ver-1-0.net/blog/2017/01/02/kotlin-hello-world</guid><pubDate>Mon, 02 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;KotlinでHello Worldしてみる。
OSは Mac OS 上に立てたゲストOS のLubuntu バージョンは16.10&lt;/p&gt;
&lt;p&gt;①とりあえずJavaをインストール
Oracle&apos;s PPAを追加してからapt-get&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; add-apt-repository ppa:webupd8team/java
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; oracle-java8-installer
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;参考URL
&lt;a href=&quot;http://kiy271.hatenablog.com/entry/2014/09/05/230624&quot;&gt;&lt;a href=&quot;http://kiy271.hatenablog.com/entry/2014/09/05/230624&quot;&gt;http://kiy271.hatenablog.com/entry/2014/09/05/230624&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt;②コンパイラをインストール
&lt;a href=&quot;https://kotlinlang.org/docs/tutorials/command-line.html&quot;&gt;&lt;a href=&quot;https://kotlinlang.org/docs/tutorials/command-line.html&quot;&gt;https://kotlinlang.org/docs/tutorials/command-line.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; https://get.sdkman.io &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;
ログアウトしてから
sdk &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; kotlin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;③Hello World!!&lt;/p&gt;
&lt;p&gt;まずは、Hello.ktを作って
&lt;strong&gt;hello.kt&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;kotlin&quot;&gt;&lt;pre class=&quot;language-kotlin&quot;&gt;&lt;code class=&quot;language-kotlin&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;args&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Array&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string-literal singleline&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コンパイルして実行。
jarファイルができるので、
いつものjavaコマンドで実行。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;kotlinc hello.kt -include-runtime &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; hello.jar
&lt;span class=&quot;token function&quot;&gt;java&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-jar&lt;/span&gt; hello.jar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;できた。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;java&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-jar&lt;/span&gt; hello.jar
Hello, World&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;sdkmanを使うとHelloWorldまでは、10分くらいでできてしまいますね。
この後はここのチュートリアルなどをして慣れる感じですかね。&lt;/p&gt;
&lt;div class=&quot;adsense&quot;&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;kotelin HelloWorld 補足1&lt;/h2&gt;
できたjarの中を見てみると
kotlin/~ というKotelinランタイムのクラスファイルが格納されている。
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;jar &lt;span class=&quot;token parameter variable&quot;&gt;-tvf&lt;/span&gt; hello.jar
    &lt;span class=&quot;token number&quot;&gt;76&lt;/span&gt; Tue Jan 03 &lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;:06:36 JST &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt; META-INF/MANIFEST.MF
   &lt;span class=&quot;token number&quot;&gt;953&lt;/span&gt; Tue Jan 03 &lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;:06:36 JST &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt; HelloKt.class
    &lt;span class=&quot;token number&quot;&gt;29&lt;/span&gt; Tue Jan 03 &lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;:06:36 JST &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt; META-INF/main.kotlin_module
   &lt;span class=&quot;token number&quot;&gt;767&lt;/span&gt; Mon Dec &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:28:40 JST &lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt; kotlin/ArrayIntrinsicsKt.class
  &lt;span class=&quot;token number&quot;&gt;1296&lt;/span&gt; Mon Dec &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:28:40 JST &lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt; kotlin/Deprecated.class
  &lt;span class=&quot;token number&quot;&gt;1249&lt;/span&gt; Mon Dec &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:28:40 JST &lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt; kotlin/DeprecationLevel.class
   &lt;span class=&quot;token number&quot;&gt;730&lt;/span&gt; Mon Dec &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:28:40 JST &lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt; kotlin/ExtensionFunctionType.class
   &lt;span class=&quot;token number&quot;&gt;405&lt;/span&gt; Mon Dec &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:28:40 JST &lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt; kotlin/Function.class
   &lt;span class=&quot;token number&quot;&gt;476&lt;/span&gt; Mon Dec &lt;span class=&quot;token number&quot;&gt;26&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;:28:44 JST &lt;span class=&quot;token number&quot;&gt;2016&lt;/span&gt; kotlin/KotlinNullPointerException.class
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これをjarに含めたくない場合は-include-runtimeのオプションを外してコンパイルする。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;kotlinc hello.kt &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; hello.jar
jar tvf hello.jar
    &lt;span class=&quot;token number&quot;&gt;76&lt;/span&gt; Tue Jan 03 &lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;:21:24 JST &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt; META-INF/MANIFEST.MF
   &lt;span class=&quot;token number&quot;&gt;953&lt;/span&gt; Tue Jan 03 &lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;:21:24 JST &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt; HelloKt.class
    &lt;span class=&quot;token number&quot;&gt;29&lt;/span&gt; Tue Jan 03 &lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;:21:24 JST &lt;span class=&quot;token number&quot;&gt;2017&lt;/span&gt; META-INF/main.kotlin_module
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;kotelin HelloWorld 補足2 Vimでkotlin&lt;/h2&gt;
vimのkotlin用プラグインをインストール
&lt;a href=&quot;https://github.com/udalov/kotlin-vim&quot;&gt;https://github.com/udalov/kotlin-vim&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded><thumbnailUrl>https://statics.ver-1-0.xyz/uploads/2017/01/20170102_kotlin-hello-world/thumbnail.png</thumbnailUrl><language>ja</language></item></channel></rss>