<?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[Honmushi blog]]></title><description><![CDATA[読書好きなエンジニアによる、WEB関連のテクニカルな情報やデザインのこと、お気に入りの本の書評や試してみたことなどを紹介するブログです。]]></description><link>https://honmushi.com</link><generator>GatsbyJS</generator><lastBuildDate>Wed, 09 Oct 2024 07:40:06 GMT</lastBuildDate><item><title><![CDATA[MagicaVoxel を起動したところ真っ暗で動作しない件の対応]]></title><description><![CDATA[「ボクセルアート」なるものを始めてみようと思い、「MagicaVoxel…]]></description><link>https://honmushi.com/2023/08/02/magicavoxel-start-on-mac/</link><guid isPermaLink="false">https://honmushi.com/2023/08/02/magicavoxel-start-on-mac/</guid><pubDate>Wed, 02 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「ボクセルアート」なるものを始めてみようと思い、「MagicaVoxel」というアプリをインストールして初めてみました。&lt;/p&gt;
&lt;p&gt;いきなり、アプリを起動しても真っ暗なウィンドウが表示されて動かない現象に遭遇しましたので、その時の解消方法を記録しておきます。&lt;/p&gt;
&lt;h2&gt;結論&lt;/h2&gt;
&lt;p&gt;アプリケーションディレクトリに移動して、.appファイルを一度取り出し、元に戻すことで、現象が解決できました。&lt;/p&gt;
&lt;h2&gt;インストールの手順&lt;/h2&gt;
&lt;p&gt;利用している環境は MacOS Monterey 12.6.3 です。&lt;/p&gt;
&lt;h3&gt;ダウンロード&lt;/h3&gt;
&lt;p&gt;以下のページからダウンロードします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ephtracy.github.io/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://ephtracy.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ページ内 Download の先で利用している OS に対応したバージョンが見つかりませんでした。&lt;/p&gt;
&lt;p&gt;その場合、Previous Versions から以前のバージョンのアプリケーションで OS に対応しているバージョンを探してダウンロードしましょう。&lt;/p&gt;
&lt;h3&gt;圧縮されているので解凍&lt;/h3&gt;
&lt;p&gt;ダウンロードすると「MagicaVoxel-0.99.6.2-macos-10.15.zip」というファイルになっています。
zip 圧縮されているので解凍します。&lt;/p&gt;
&lt;h3&gt;「このソフトウェアは開けません。」というメッセージが出て開けない&lt;/h3&gt;
&lt;p&gt;解凍したディレクトリの中に、MagicaVoxel.app というファイルがあるのでそれをクリックすれば起動できます。
しかし、以下のようなメッセージがでて実行できませんでした。OK ボタンを押すと閉じてしまいます。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“MagicaVoxel.app”が悪質なソフトウェアかどうかをAppleでは確認できないため、このソフトウェアは開けません。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MagiczVoxel.app に対して ctrl キーを押しながらクリックするか右クリックをして、メニューを表示して「開く」を選択して実行します。&lt;/p&gt;
&lt;p&gt;そうすると、上記と同じメッセージが表示されますが、今回は開くボタンを押すことで起動できます。&lt;/p&gt;
&lt;h2&gt;真っ暗なままで動かない現象が発生&lt;/h2&gt;
&lt;p&gt;私の環境では、上記まででアプリは立ち上がったのですが、ウィンドウの中が真っ暗でアプリは動きませんでした。&lt;/p&gt;
&lt;h2&gt;対応&lt;/h2&gt;
&lt;p&gt;上記現象の解決方法がありました。以下の手順でアプリの場所を変更すると起動できるようになりました。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;解凍したディレクトリをアプリケーションディレクトリへ移動する&lt;br&gt;
たとえば私のバージョンでは、解凍したディレクトリは「MagicaVoxel-0.99.6.2-macos-10.15」という名前です。
これをアプリケーションのディレクトリへ移動します。
ダウンロードディレクトリからドラッグドロップでアプリケーションへ移動しましょう。以下のようになります。&lt;/li&gt;
&lt;/ol&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;Applications/MagicaVoxel-0.99.6.2-macos-10.15/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;.app ファイルを取り出す&lt;br&gt;
上記の解凍したディレクトリの中にアプリケーションファイル「MagiczVoxel.app」があります。
これを一度ディレクトリから取り出し、アプリケーション直下に移動します。&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;Applications/MagicaVoxel-0.99.6.2-macos-10.15/MagicaVoxel.app
これを以下に移動する。
Applications/MagicaVoxel.app&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;.app ファイルを元に戻す&lt;br&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;Applications/MagicaVoxel.app
これを以下に戻す。
Applications/MagicaVoxel-0.99.6.2-macos-10.15/MagicaVoxel.app&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;意味があるのかわかりませんが、これで正しく起動できるようになりました。&lt;/p&gt;
&lt;h2&gt;結論&lt;/h2&gt;
&lt;p&gt;意気揚々と MagicaVoxel を使ってボクセルアートを作ってみようと思いましたが、いきなり躓きました。
解決方法はちょっと不思議ですが、問題なく起動できるようになったのでおまじないだと思っておきます。&lt;/p&gt;
&lt;p&gt;これからちょっとずつ時間を見つけてMagiczVoxelで遊んでみます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Android エミュレーターがインターネット接続できない時の対応]]></title><description><![CDATA[ReactNative でアプリを開発している際に、急に Android エミュレータがインターネットに繋がらなくなる現象が起きました。 この時の解決法を見つけたので記録します。 結論 エミュレータの設定にて、Use Android Studio http proxy…]]></description><link>https://honmushi.com/2023/04/05/android-simulator-net-disconnect/</link><guid isPermaLink="false">https://honmushi.com/2023/04/05/android-simulator-net-disconnect/</guid><pubDate>Wed, 05 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ReactNative でアプリを開発している際に、急に Android エミュレータがインターネットに繋がらなくなる現象が起きました。&lt;/p&gt;
&lt;p&gt;この時の解決法を見つけたので記録します。&lt;/p&gt;
&lt;h2&gt;結論&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;エミュレータの設定にて、Use Android Studio http proxy settings を有効にする&lt;/li&gt;
&lt;li&gt;Android OS の設定にて、IP設定を静的に変更してDNS設定を指定する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;現象&lt;/h2&gt;
&lt;p&gt;ふとした時に Android エミュレータがネットワークに繋がらなくなりました。
ブラウザでネットワークにアクセスできませんし、アプリ内の API へのリクエストなども通りません。困ります。&lt;/p&gt;
&lt;p&gt;PC は正常にネットワークにアクセスできていますので、ルータなどの問題ではなくエミュレータ側に問題があります。&lt;/p&gt;
&lt;p&gt;設定を確認すると、Wifi を使って AndroidWifi に接続してることがわかります。しかし、ネットワーク接続はできておらず未接続の状態になっていました。&lt;/p&gt;
&lt;h2&gt;対応&lt;/h2&gt;
&lt;h3&gt;1. エミュレータの設定&lt;/h3&gt;
&lt;p&gt;エミュレータの設定を開き、Settings の項目を選択します。
Proxy のタブを選択して、「Use Android Studio HTTP proxy settings」の項目にチェックをつけます。
その下のラジオボタンは「No proxy」のままで良いです。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/800a94fb1fa4440ffcb79b346f131635/6db71/emulator-setting.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 104.05405405405406%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC40lEQVQ4y42U227aUBRE/ZF9q9TPqtSn/kXSt6pSUhJSmqhRmnIRxvcbxja+gMEw3XOIiUmrNkhbB8Px8syefayNfk4xedQxfBjDMxz4povYizD3QsxdKcdHZPuyBojl2pmasCYzmGMd1ngGe2LAGE5lNRGaPjTTtmB7Hn7Jn0W1wrreoN5ssN/vwc92u8U8DOH7PgzHQRAECOU6yzKkWXpY0xSJFFft9vZWNnp4GBoKuFrXqlrgrmlgRiGmvgvDcxEKkHBCWXxAskgO0CSB9m0wgOsHyNIE1WqNUqDlaqWACtnscBM4uLZ0uDMD+mwG13XhiSuWZVmI4/gZOBh8hxeEuP9xj7yslLp6s0X7oeVCbHmicjyZwDAMzOdzpZLq0ierhCnLBPphBMs0keWFqFtjVdcnQPYnEnu6rsOQfY70kuAW3gKVwhuxbEoPXdm0yHJlmcF0gbwhXixg27ZSRkgURX/AFLB/eQFXFBLIUKr1GpvtqeV2M0Ng3wimym7vWuva9ZfPGM2sI5AKabmRdBl00zwDCWExFNZCVHcVUrV21btSlj3ZEKdLpZDBcN0JkeBWAUOgQl4vl8ujqhbKh2lfez3VdEdsEMIqquqYdNvDFkBVvJkre8hqFfI37fz8E1LZbMs8qYRFHdfdbncEElbJQwjkWhSFsjedTpWqk7EhMFvm0mhL0q1Vwhxwft93LHdLpS6B0D7BJ2NzdnYuZ3KpkjukfFDYjk63hy+HmMp5lttrBby4vMQiOfQwy8uj5aZjuQvs3txVfLTc7/cFmCiFKt3VIRQq+xvwf6Xd3d0p2ezHsijVDDLh6gm+kVdZmiavhmrj8VipYXNtL0A0l3GIE+RyrnNJk4m+DOVfpQ2HI2WLh9+fx8jXcpabDXby8mp2DWqZSz6ZLl5T2mh0AHJALVvecyMbqSlvZCNEmYnCslQn5LV1BGbFEs4vHb23HzB49xEXb97D6D0ir6vjG/k19RuiCDDHRbt4xQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;エミュレータの設定&quot;
        title=&quot;エミュレータの設定&quot;
        src=&quot;/static/800a94fb1fa4440ffcb79b346f131635/fcda8/emulator-setting.png&quot;
        srcset=&quot;/static/800a94fb1fa4440ffcb79b346f131635/12f09/emulator-setting.png 148w,
/static/800a94fb1fa4440ffcb79b346f131635/e4a3f/emulator-setting.png 295w,
/static/800a94fb1fa4440ffcb79b346f131635/fcda8/emulator-setting.png 590w,
/static/800a94fb1fa4440ffcb79b346f131635/6db71/emulator-setting.png 659w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;2. OS のネットワーク設定&lt;/h3&gt;
&lt;p&gt;OS の設定の画面から、ネットワークとインターネットの項目を選択します。
Wifi を選択して、AndroidWifi を確認して、詳細設定をタップして項目を開きます。&lt;/p&gt;
&lt;p&gt;DNS が「8.8.8.8」になっていない場合はこれを指定することで解決できるようです。
以下その手順です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IP アドレスとゲートウェイの設定値をメモする&lt;/li&gt;
&lt;li&gt;上部の編集マークをタップして AndroidWifi の設定を編集する&lt;/li&gt;
&lt;li&gt;IP 設定の項目を「静的」にする&lt;/li&gt;
&lt;li&gt;IP アドレスをメモした値にする&lt;/li&gt;
&lt;li&gt;ゲートウェイをメモした値にする&lt;/li&gt;
&lt;li&gt;DNS 1を「8.8.8.8」にする&lt;/li&gt;
&lt;li&gt;DNS 2を「8.8.4.4」にする&lt;/li&gt;
&lt;li&gt;保存を選択&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 364px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/9fa03ef20bf7bc4e38a6080746cd647b/e45a9/android-wifi-setting.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 195.94594594594594%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAnCAYAAAAPZ2gOAAAACXBIWXMAAAsTAAALEwEAmpwYAAADoUlEQVRIx6VWy04iQRTlO+cvXLDwG9yYKCJmFNGYzGrcTDKJC5mQIRoFjCAvQbB5v/sJiprcqVNQbQk0Ng7JSVU3Vafv49xb5VlbW6NQKETBYJAODw9t4B3Gg4ODT7G/v0/Hx8fk9XrJs7GxQfhpmsah6zqpqkrdbpc/v7y80Hg8XorRaMQ59vb2yLO5uUmmaVIkEqHz83MKh8N0dnZGp6endHV1xckHg4Ej8H+/3+fE8NKztbVFT09PdHd3R/F4nAqFAkc6nbatxKZFwH8g7XQ63JOjoyPybG9vc/ZUKkWJRIKKxSI9PDzweavV4tYjDItgGAYnxLq3t7cJISwEIRZgMxZZlsXjgrmI6zLA2tfXV54Ym7BarVK5XKZGo2G744ZMEMJlKIO7/Pz8TM1mk//hhmCWrNfrcY6dnZ0JIZKSzWapVqu5dlNAJAWEPp/v3WUhj1XIBLAHRn2wUFEUyufzVK/XV7ZyjhDmIilI/6oWYj2EPWchqgPi/koM2+32e1JkHYJMHr/uMnuoVio8y/iaLCE3esTaD4QWq4o6I4GeUL+QAUhMZunQMPmoOVk3S+hn2qnpKv3+E6b49TVvCtdsbLGKyVcU+hm7oAIbrSVh0FTJZR+z0GQW3iplSiqPdPtYolRVoSwj+R4N07dfPyh0EaFCo07pepUy9docsH5gGrTr90+7DctQg+kP7iJ+TSafPpsn7nMU/Bum2+I9GVI8tamr2vTdXAyRcmhJ9DnMIQcdm3t90tUVkgLZoFNcXl5SLBajm5sbXtdoYaptjTYhX5BxbREhdIjSQ/sCUDUi42IUcwAqkIEKGw6HH12G/uAqNgj1A9ggSBFf1PqslQtjKDaBBHNBBggLQQjxf0qIh2g0yjcjdqL8ZMjv5ApyzHIul+MWgFS46wRXMcTLr7Qv3SnLoh+uctrpTsIGCXohDnicz0iKOFLdYK59gRC3hmQyyUccpZCQrD0niO4kxXDispAHviiXnxuAGEbZMURSSqUSr5b/6dg+38whJXdrt/FzjCHih6aQyWQ4qVzDnwGG2DEUspE7iVOs+jPg75C82RiKm8OyOPHzhUnJYmfMZJzEeWRaZOkGb4G4HtsXTrnBzgK9sNnrUp61e6Xd4mOl0yZD0ynOjoxEufR+4YSZ+MFkJMcJOBm7BgsHs66psQ9ZJjs6xlRTB1Tt9zjHyckJeXBzDwQC/Oa0CPigGHEI+dkYmI54j/kum+PCvr6+Tv8Ah+IL/tVSr7YAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;AndroidWifiの設定&quot;
        title=&quot;AndroidWifiの設定&quot;
        src=&quot;/static/9fa03ef20bf7bc4e38a6080746cd647b/e45a9/android-wifi-setting.png&quot;
        srcset=&quot;/static/9fa03ef20bf7bc4e38a6080746cd647b/12f09/android-wifi-setting.png 148w,
/static/9fa03ef20bf7bc4e38a6080746cd647b/e4a3f/android-wifi-setting.png 295w,
/static/9fa03ef20bf7bc4e38a6080746cd647b/e45a9/android-wifi-setting.png 364w&quot;
        sizes=&quot;(max-width: 364px) 100vw, 364px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;特に何かを変更した記憶はないですが、急に Android エミュレータがネットワークに繋がらなくなってしまい困っていました。&lt;/p&gt;
&lt;p&gt;アプリ内の API リクエストなども動作しないので開発に影響があ離ますね。&lt;/p&gt;
&lt;p&gt;他にも解決方法はありそうですが、OS のネットワークの設定項目から解決できました。これでよしとします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ssh の秘密鍵を複数サイトに向けて設定する]]></title><description><![CDATA[ソースコードのバージョン管理のリモートリポジトリについて、ずっと Github のみを利用していました。 最近 Bitbucket も使う機会ができたので、そちらの設定をしていました。 どちらも ssh…]]></description><link>https://honmushi.com/2022/02/10/ssh-keys-setting/</link><guid isPermaLink="false">https://honmushi.com/2022/02/10/ssh-keys-setting/</guid><pubDate>Thu, 10 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ソースコードのバージョン管理のリモートリポジトリについて、ずっと Github のみを利用していました。&lt;/p&gt;
&lt;p&gt;最近 Bitbucket も使う機会ができたので、そちらの設定をしていました。&lt;/p&gt;
&lt;p&gt;どちらも ssh の公開鍵を登録して、秘密鍵を使ってアクセスできます。
こうすることで、リクエストのたびにパスワードを求められることを回避できるので、私は積極的に設定しています。&lt;/p&gt;
&lt;p&gt;これら2つのサイトに向けた秘密鍵を設定した時の手順についてのメモです。&lt;/p&gt;
&lt;h2&gt;結論&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ssh 秘密鍵と公開鍵の作成はいつも通り行います。&lt;/li&gt;
&lt;li&gt;.ssh/ に config というファイルを設置することでホスト・IPアドレスごとに使用する鍵の設定ができます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ssh 秘密鍵と公開鍵の作成&lt;/h2&gt;
&lt;p&gt;以下の記事参考に ssh-keygen で秘密鍵・公開鍵のペアを作ります。&lt;br&gt;
&lt;a href=&quot;/2020/01/14/github-ssh/&quot;&gt;Github にSSH公開鍵を登録&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;コマンド実行の際に、出力する場所を求められるので前回とは異なる場所で違いがわかるようにしましょう。&lt;/p&gt;
&lt;h2&gt;公開鍵をサービスに登録する&lt;/h2&gt;
&lt;p&gt;今回は Bitbucket に登録しました。
Github でも Bitbucket でも同じような設定方法ですので、それほど迷うことはありません。&lt;/p&gt;
&lt;p&gt;「.pub」の公開鍵の方をサービスに登録します。間違えないようにしましょう。&lt;/p&gt;
&lt;p&gt;Mac であれば以下のコマンドでクリップボードにコピーできます。&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;pbcopy &amp;lt; ~/.ssh/id_rsa.pub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;秘密鍵のパーミッションを変更しておく&lt;/h2&gt;
&lt;p&gt;秘密鍵の方は他ログインしたユーザーなどに read できないように、パーミッションを変更しておきましょう。&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;chmod 600 ~/.ssh/id_rsa&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ssh の設定ファイルにドメインごとの設定を記述する&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.ssh/&lt;/code&gt; に &lt;code&gt;config&lt;/code&gt; というファイルを作成し、ここに ssh の設定を記述します。&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;Host [ホスト名]
  User [ユーザー名: GitHubの場合は`git`]
  Port 22
  HostName [サービスのドメイン または IPアドレス]
  IdentityFile [秘密鍵のパス]
  IdentitiesOnly yes&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;たとえばこんな感じ、Github と Bitbucket にそれぞれ別の鍵を設置しました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;config&quot;&gt;&lt;pre class=&quot;language-config&quot;&gt;&lt;code class=&quot;language-config&quot;&gt;Host github.com
    User git
    Port 22
    HostName github.com
    identityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

Host bitbucket.org
    User git
    Port 22
    HostName bitbucket.org
    identityFile ~/.ssh/bitbucket/id_rsa_bb
    IdentitiesOnly yes&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;複数の鍵を登録できると便利ですね。
今回は Github と Bitbucket での使い分けでしたが、個人用とか仕事用とかで分ける必要がある時なども使える設定です。&lt;/p&gt;
&lt;p&gt;リクエストの都度パスワードを入力したりするのは手間なので、積極的に秘密鍵・公開鍵を設定しておくと快適なのでおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[掲載実績]]></title><description><![CDATA[このブログについて、以下のコンテンツにて紹介いただきました。 ありがとうございます！ 掲載実績 Freelance hub
フリーランスエンジニア・クリエイターの案件情報サイト「Freelance hub…]]></description><link>https://honmushi.com/publications/</link><guid isPermaLink="false">https://honmushi.com/publications/</guid><pubDate>Wed, 09 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このブログについて、以下のコンテンツにて紹介いただきました。&lt;br&gt;
ありがとうございます！&lt;/p&gt;
&lt;h2&gt;掲載実績&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Freelance hub
フリーランスエンジニア・クリエイターの案件情報サイト「&lt;a href=&quot;https://freelance-hub.jp/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Freelance hub&lt;/a&gt;」にて、
このブログ記事が紹介されました。
「&lt;a href=&quot;https://freelance-hub.jp/column/detail/424&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;どんなアプリを開発したい？理想を確実にカタチにするために読んでほしい記事まとめ&lt;/a&gt;」
興味のある方はぜひご覧ください。&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[React Native で jest を使う際の async-storage や safe-area-context のパッケージのモック]]></title><description><![CDATA[React Native でも jest…]]></description><link>https://honmushi.com/2022/01/05/react-native-jest-packages/</link><guid isPermaLink="false">https://honmushi.com/2022/01/05/react-native-jest-packages/</guid><pubDate>Wed, 05 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native でも jest を用いてテストを実装できます。&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;エラーになる例&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@react-native-async-storage/async-storage&lt;/code&gt; のエラーを回避する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;react-native-safe-area-context&lt;/code&gt; のエラーを回避する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;エラーになる例&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ロジックとしてデータを保存・取得するために &lt;code&gt;@react-native-async-storage/async-storage&lt;/code&gt; を使っている場合&lt;/li&gt;
&lt;li&gt;コンポーネントで &lt;code&gt;react-native-safe-area-context&lt;/code&gt; を使って、端末の画面の余白などを取得している場合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このような場合、そのままだとテスト時にエラーが発生してしまいます。
簡単な回避方法をそれぞれ紹介します。&lt;/p&gt;
&lt;p&gt;他のパッケージでも同様のやり方で回避できることがあるので、基本として知っておくと良いです。&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;@react-native-async-storage/async-storage&lt;/code&gt; のエラーを回避する&lt;/h2&gt;
&lt;p&gt;これは実機であればasync-storage でデータの読み書きができるのですが、jest 上ではそれが使えないためエラーになります。&lt;/p&gt;
&lt;p&gt;以下のようにパッケージをモック化してしまうのが簡単な回避方法です。jest の setup ファイルに書いておくのも良いです。&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;jest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mock&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;@react-native-async-storage/async-storage&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 operator&quot;&gt;=&gt;&lt;/span&gt; jest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fn&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&gt;&lt;code&gt;react-native-safe-area-context&lt;/code&gt; のエラーを回避する&lt;/h2&gt;
&lt;p&gt;こちらは使用の際に要素を &lt;code&gt;SafeAreaProvider&lt;/code&gt; で囲んでおく必要があります。&lt;/p&gt;
&lt;p&gt;以下のような &lt;code&gt;test-utils.tsx&lt;/code&gt; を用意しておきましょう。
&lt;code&gt;@testing-library/react-native&lt;/code&gt; の変わりにこれを import することで、Provider を用意してコンポーネントをレンダーできます。 もちろん、各テストで Provider を挟んで定義するのでも問題ないです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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;&quot;react&quot;&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; render &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;&quot;@testing-library/react-native&quot;&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; SafeAreaProvider &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;&quot;react-native-safe-area-context&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;TestSafeAreaProvider&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; children &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&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&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&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;SafeAreaProvider&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;      initialMetrics&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;gatsby-highlight-code-line&quot;&gt;        frame&lt;span class=&quot;token operator&quot;&gt;:&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;0&lt;/span&gt;&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;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; width&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; height&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&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        insets&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; top&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; left&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; right&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; bottom&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&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;      &lt;span class=&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&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;children&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&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;SafeAreaProvider&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;  &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;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;customRender&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;ui&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&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 function&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ui&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; wrapper&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; TestSafeAreaProvider&lt;span class=&quot;token punctuation&quot;&gt;,&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 punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&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;// re-export everything&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&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 string&quot;&gt;&quot;@testing-library/react-native&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// override render method&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; customRender &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; render &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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この &lt;code&gt;SafeAreaProvider&lt;/code&gt; に &lt;code&gt;initialMetrics&lt;/code&gt; を設定しないと、要素が何もレンダリングされない現象になるので注意しましょう。&lt;/p&gt;
&lt;p&gt;パッケージに用意されているデフォルト値を使った場合もレンダリングできない現象がおきました。適当な値でいいので自分でオブジェクトを用意して設定する必要があります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;React Native でも jest を使ったテストは快適に行えます。
ロジックの部分を切り分けることでテストが書きやすくなるのは間違いないので、まずはそれを検討しましょう。
今回のようにどうしてもコンポーネントから切り出せない場合や、ページ全体など大きな部分のテストになると、パッケージのモック化が必要になります。&lt;/p&gt;
&lt;p&gt;jest のモックはさまざまな使い方や定義が可能なので、時間がある時に知っておくとテスト実装が快適になるのでおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native と jest を使う際の react-navigation のテスト実装]]></title><description><![CDATA[React Native と jest でテストを実装する際の、react-navigation のテストの書き方の紹介です。 各コンポーネント単位でテストするように実装していれば、react-navigation…]]></description><link>https://honmushi.com/2022/01/05/react-native-jest-navigation/</link><guid isPermaLink="false">https://honmushi.com/2022/01/05/react-native-jest-navigation/</guid><pubDate>Wed, 05 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native と jest でテストを実装する際の、&lt;code&gt;react-navigation&lt;/code&gt; のテストの書き方の紹介です。&lt;/p&gt;
&lt;p&gt;各コンポーネント単位でテストするように実装していれば、&lt;code&gt;react-navigation&lt;/code&gt; を使わなくてもそれぞれのコンポーネントに対して描写やロジックのテストを書くことが可能です。&lt;/p&gt;
&lt;p&gt;screen をまるごと描写テストしたい時、ボタンタップ時のスクリーン移動のテスト、アプリ起動時のホーム画面のマウントのテストなどが必要な場合があります。
その場合、&lt;code&gt;react-navigation&lt;/code&gt; の&lt;code&gt;useNavigation&lt;/code&gt; や &lt;code&gt;useRoute&lt;/code&gt; が必要になるため、テストで動かせるようにする必要があります。&lt;/p&gt;
&lt;h2&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;li&gt;screen の遷移をテストする&lt;/li&gt;
&lt;li&gt;useRoute で遷移時に受け取るパラメータをモックする&lt;/li&gt;
&lt;li&gt;test-utils などに追加するか&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考リンク&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://callstack.github.io/react-native-testing-library/docs/react-navigation&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://callstack.github.io/react-native-testing-library/docs/react-navigation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@dariaruckaolszaska/testing-your-react-navigation-5-hooks-b8b8f745e5b6&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://medium.com/@dariaruckaolszaska/testing-your-react-navigation-5-hooks-b8b8f745e5b6&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;エラーになる場所&lt;/h2&gt;
&lt;p&gt;useNavigation や useRoute を使う場所にてエラーになります。&lt;/p&gt;
&lt;p&gt;画面遷移の際にパラメータとして受け取るデータなどを利用している場合も、パラメータがないためエラーになります。&lt;/p&gt;
&lt;h2&gt;ナビゲーションクリエイターで挟む&lt;/h2&gt;
&lt;p&gt;基本的には、実際のアプリの実装と同じようにするため &lt;code&gt;NavigationContainer&lt;/code&gt; でナビゲーションを作ります。stack であれば &lt;code&gt;createStackNavigator&lt;/code&gt; を使って Stack ナビゲーションを設定します。&lt;/p&gt;
&lt;p&gt;こうすることで useNavigation や useRoute が動作できるようになります。&lt;/p&gt;
&lt;p&gt;たとえば以下は &lt;code&gt;useNavigation&lt;/code&gt; を使っている &lt;code&gt;HomeScreen&lt;/code&gt; のテストのために、Stack ナビゲーションを用意しています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; NavigationContainer &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;&quot;@react-navigation/native&quot;&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; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@react-navigation/stack&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; Stack &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 punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;HomeScreen&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 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;it&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;初期データ取得処理 fetchMessage を実行する&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 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; params &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;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;          &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;NavigationContainer&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Navigator&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;              &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Screen&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;HomeScreen&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                component&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;HomeScreen&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                initialParams&lt;span class=&quot;token operator&quot;&gt;=&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;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&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&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&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;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Navigator&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&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;NavigationContainer&lt;span class=&quot;token operator&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 punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;screen の遷移をテストする&lt;/h2&gt;
&lt;p&gt;useNavigation のページ遷移をテストしたい場合は、必要になるスクリーンを Route として設定しておけば、テストが可能です。&lt;/p&gt;
&lt;p&gt;以下は &lt;code&gt;HomeScreen&lt;/code&gt; からボタンをタップして &lt;code&gt;DisplayScreen&lt;/code&gt; に遷移することをテストする例です。
Route の名前は実装で使っているものと同じでないと、遷移の際に移動先が見つからないエラーとなります。実装と同じ name を各スクリーンに設定しましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;it&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;ボタンを押すとupdateMessageを実行して、display screen に遷移する&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;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;const&lt;/span&gt; params &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;const&lt;/span&gt; component &lt;span class=&quot;token operator&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;NavigationContainer&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;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Navigator&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;              &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Screen&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                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&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                component&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;HomeScreen&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                initialParams&lt;span class=&quot;token operator&quot;&gt;=&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;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&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&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;              &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Screen&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Display&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                component&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;DisplayScreen&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                initialParams&lt;span class=&quot;token operator&quot;&gt;=&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;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&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&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;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Navigator&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;NavigationContainer&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;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; findByText&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; findByTestId &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&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;const&lt;/span&gt; button &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;findByTestId&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;navButton&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;fireEvent&lt;/span&gt;&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 string&quot;&gt;&quot;press&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; nextPage &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;findByTestId&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;displayScreen&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;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nextPage&lt;span class=&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;toBeTruthy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;useRoute で遷移時に受け取るパラメータをモックする&lt;/h2&gt;
&lt;p&gt;スクリーンによっては遷移の際に前の画面から受け取ったパラメータを使用する画面もあります。&lt;/p&gt;
&lt;p&gt;その場合はスクリーンに &lt;code&gt;initialParams&lt;/code&gt; としてテストデータを設定することで、仮のものとして受け取ることができます。&lt;/p&gt;
&lt;p&gt;以下はホーム画面からパラメータを受け取って表示する &lt;code&gt;DisplayScreen&lt;/code&gt; の表示テストです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;it&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;display screen を表示する&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;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;const&lt;/span&gt; params &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        text&lt;span class=&quot;token operator&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 punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; component &lt;span class=&quot;token operator&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;NavigationContainer&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;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Navigator&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;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Screen 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; component&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;HomeScreen&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Screen
                name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Display&quot;&lt;/span&gt;
                component&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;DisplayScreen&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                initialParams&lt;span class=&quot;token operator&quot;&gt;=&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;&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Stack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Navigator&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;NavigationContainer&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;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;test-utils などに追加するか&lt;/h2&gt;
&lt;p&gt;test-utils に &lt;code&gt;NavigationContainer&lt;/code&gt; を設定したカスタムレンダーを用意するのも便利です。しかし、ナビゲーションを設定するとヘッダーやボトムタブなどが描写されます。&lt;/p&gt;
&lt;p&gt;コンポーネントのテストなどではそれは不要なので、個人的には必要な pages のテストやアプリマウント時のテストなど、必要となるテストケースの中で都度ナビゲーションを設定するようにしています。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;screen 単位のテストについてはそもそも実装しないという方針もあります。
各コンポーネント単位でテストができていればいいですし、ロジックなどはなるべく切り出して screen に含まないように設計するのが望ましいです。&lt;/p&gt;
&lt;p&gt;表示のテストやアプリマウントのテストが必要な場合、今回紹介したよう方法でテストを書くのはお手軽でですが、Detox などを使ってE2Eテストで実装するのもおすすめです。
準備などは必要ですが、こちらも便利なので機会があれば設定して置けるとテストがもっと便利になります。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expo で絶対パスを使って import できるようにする]]></title><description><![CDATA[Expo を使って React Native アプリを作成する際に、コンポーネントの import…]]></description><link>https://honmushi.com/2021/11/17/expo-absolute-path/</link><guid isPermaLink="false">https://honmushi.com/2021/11/17/expo-absolute-path/</guid><pubDate>Wed, 17 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Expo を使って React Native アプリを作成する際に、コンポーネントの &lt;code&gt;import&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 keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Header &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;&quot;../../Header&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;通常の状態だと絶対パスを使って指定できないため相対パスで指定する必要があります。&lt;br&gt;
ディレクトリの階層が浅いとそれほど気にならないですが、大きなソースコードになった場合や、&lt;code&gt;import&lt;/code&gt; が増えてきた時に見通しがつきにくくなります。&lt;/p&gt;
&lt;p&gt;今回は Expo を使用した React Native アプリについて、&lt;code&gt;import&lt;/code&gt; の時に絶対パスを利用できるようにする方法を紹介します。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;babel のプラグインをインストール&lt;/li&gt;
&lt;li&gt;babel.config.js にパスの定義&lt;/li&gt;
&lt;li&gt;tsconfig.json にパスの定義&lt;/li&gt;
&lt;li&gt;応用: パスのエイリアスを複数登録&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;babel のプラグインをインストール&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;babel-plugin-module-resolver&lt;/code&gt; というプラグインをインストールします。いつも通り npm でインストールしましょう。&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-dev babel-plugin-module-resolver&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;babel.config.js にパスの定義&lt;/h2&gt;
&lt;p&gt;babel の設定ファイルにプラグインの追加と設定を記載します。
alias として &lt;code&gt;src&lt;/code&gt; を追加しています。今回のプロジェクトでは基本的なプログラムは &lt;code&gt;src/&lt;/code&gt; 以下に入っているので、そこを絶対パスの開始点にします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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 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;api&lt;/span&gt;&lt;span class=&quot;token punctuation&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;
    presets&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;babel-preset-expo&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;
    plugins&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;gatsby-highlight-code-line&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        &lt;span class=&quot;token string&quot;&gt;&quot;module-resolver&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;          alias&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            src&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;./src&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;          &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;gatsby-highlight-code-line&quot;&gt;        &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;gatsby-highlight-code-line&quot;&gt;      &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 punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;tsconfig.json にパスの定義&lt;/h2&gt;
&lt;p&gt;以下を TypeScript の設定に追加します。
baseUrl と使いたい絶対パスのエイリアスを記述します。babel.config.js の内容と合わせる必要があります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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 string&quot;&gt;&quot;compilerOptions&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;baseUrl&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 string&quot;&gt;&quot;paths&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;src/*&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;./src/*&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;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記を対応することで、絶対パスでの指定が行えるようになりました。
src から始める必要がありますが階層が増えた場合でも&lt;code&gt;../&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 keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Header &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;&quot;src/components/atoms/Header&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;応用: パスのエイリアスを複数登録&lt;/h2&gt;
&lt;p&gt;上記の応用として、エイリアスは複数登録できます。開始点となるベースのディレクトリ以外にも、よく使うアセットとかのパスを登録しておいてもいいですね。&lt;/p&gt;
&lt;h3&gt;babel.config.js&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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 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;api&lt;/span&gt;&lt;span class=&quot;token punctuation&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;
    presets&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;babel-preset-expo&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;
    plugins&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;module-resolver&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;gatsby-highlight-code-line&quot;&gt;          alias&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            src&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;./src&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            asset&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;./src/asset&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;          &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 punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;tsconfig.json&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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 string&quot;&gt;&quot;compilerOptions&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;baseUrl&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 string&quot;&gt;&quot;paths&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;gatsby-highlight-code-line&quot;&gt;      &lt;span class=&quot;token string&quot;&gt;&quot;src/*&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;./src/*&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 class=&quot;gatsby-highlight-code-line&quot;&gt;      &lt;span class=&quot;token string&quot;&gt;&quot;asset/*&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;./src/asset/*&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 class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記設定を追加すれば、直接 &lt;code&gt;asset&lt;/code&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 keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Header &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;&quot;src/components/atoms/Header&quot;&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;&quot;asset/Icon&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;他言語や React の開発経験などから、やっぱり絶対パスで指定できる方が便利だと感じることも多いです。&lt;/p&gt;
&lt;p&gt;ディレクトリの設計を見直すことで、相対パスでの指定でも便利に開発できるのですが、どちらも使えるようにしておいて損することは無いですよね。&lt;/p&gt;
&lt;p&gt;大きく遡って model を &lt;code&gt;import&lt;/code&gt; しなければならない時は絶対パス、同じ要素のコンポーネントを &lt;code&gt;import&lt;/code&gt; する場合は相対パスなど、ルールを決めてもいいですね。
もちろん全部絶対パスで指定しよう、というのもありです。チームで設計ルールを決めて取り組むようにしましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Commitizen を使って git commit のメッセージをいい感じにする]]></title><description><![CDATA[git でコミットする際のメッセージを、テンプレから作成してくれる Commitizen…]]></description><link>https://honmushi.com/2021/11/12/commitizen/</link><guid isPermaLink="false">https://honmushi.com/2021/11/12/commitizen/</guid><pubDate>Fri, 12 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;git でコミットする際のメッセージを、テンプレから作成してくれる &lt;code&gt;Commitizen&lt;/code&gt; の紹介です。&lt;/p&gt;
&lt;p&gt;コミットするたびにメッセージを入力しますが、たまに適当な内容にしてしまったりしますよね。
後から見直した際にわかりづらくて苦労することがあります。&lt;/p&gt;
&lt;p&gt;整ったメッセージのルールを決めておいて、それに従ってメッセージを入力すれば解決できます。
しかし、コミットメッセージの書き方は人によっても異なりますし、意外と適切なメッセージを作成するのに悩んでしまうこともあります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Commitizen&lt;/code&gt; を使うことで、選択肢から選んでテンプレに従ったわかりやすいコミットメッセージを作成できます。
自分一人のコミットメッセージ作成に用いるのはもちろん、チーム内でのコミットメッセージのルール制定などにも役に立つのでおすすめです。&lt;/p&gt;
&lt;h2&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;li&gt;使い方&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/commitizen/cz-cli&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/commitizen/cz-cli&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;導入方法としては以下の 2通りあります。  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自分の環境のグローバルにインストールする方法&lt;/li&gt;
&lt;li&gt;プロジェクトにインストールする方法&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;グローバルにインストールする&lt;/h2&gt;
&lt;p&gt;npm のグローバルなスコープにインストールする使い方です。&lt;/p&gt;
&lt;p&gt;複数のプロジェクトで同じコミットメッセージのルールで運用できるので便利です。
自分一人で使いたい場合はこの使い方が便利ですね。&lt;/p&gt;
&lt;h3&gt;commitizen をインストールする&lt;/h3&gt;
&lt;p&gt;いつもどおりnpm でインストールします。プロジェクトを跨いで使えるようにグローバルにインストールです。&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 -g commitizen&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;commitizen adapter もインストールする&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;npm install -g cz-conventional-changelog&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/commitizen/cz-cli#adapters&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/commitizen/cz-cli#adapters&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;設定ファイルを用意する&lt;/h3&gt;
&lt;p&gt;ホームディレクトリに設定ファイルを用意します。&lt;code&gt;.czrc&lt;/code&gt; のファイル名で、以下の内容を書き込みます。&lt;br&gt;
設定ファイルのパスを定義することになります。使用する adapter によって変更しましょう。&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;{ &amp;quot;path&amp;quot;: &amp;quot;cz-conventional-changelog&amp;quot; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;commitizen を使ってメッセージを作成する&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;git commit&lt;/code&gt; の代わりに &lt;code&gt;git cz&lt;/code&gt; コマンドを入力することで、commitizen を使ったメッセージの作成が始まります。&lt;/p&gt;
&lt;p&gt;使い方の詳細はページの下の方へ。&lt;/p&gt;
&lt;h2&gt;プロジェクトにインストールする&lt;/h2&gt;
&lt;p&gt;プロジェクトの devDependencies に導入する使い方です。&lt;/p&gt;
&lt;p&gt;対象のプロジェクト内でのみ有効になりますが、package.json に設定を記述して配布することになるので、チームメンバーで設定を共有できます。&lt;br&gt;
チームでの git 運用のルールとして、コミットメッセージを整理したい場合に便利な使い方です。&lt;/p&gt;
&lt;h3&gt;commitizen をインストールする&lt;/h3&gt;
&lt;p&gt;いつもどおりnpm でインストールします。プロジェクトを跨いで使えるようにグローバルにインストールです。&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 -g commitizen&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;init を行う&lt;/h3&gt;
&lt;p&gt;以下のコマンドで &lt;code&gt;commitizen&lt;/code&gt; の初期設定を行い設定を作成します。
使用する adapter はとりあえず &lt;code&gt;cz-conventional-changelog&lt;/code&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;commitizen init cz-conventional-changelog --save-dev --save-exact&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;すると、&lt;code&gt;package.json&lt;/code&gt; に必要な設定が追加され、設定ファイル &lt;code&gt;.csrc&lt;/code&gt; が用意されます。
adapter を変更した場合これらの修正が必要になりますので覚えておきましょう。&lt;/p&gt;
&lt;h3&gt;npm script を追加して commitizen を使う&lt;/h3&gt;
&lt;p&gt;commitizen を使えるように、package.json にnpm script を追加します。&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;  &amp;quot;scripts&amp;quot;: {
    &amp;quot;commit&amp;quot;: &amp;quot;cz&amp;quot;
  }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;git commit&lt;/code&gt; の代わりに &lt;code&gt;npm run commit&lt;/code&gt; で、commitizen を使ったメッセージ作成が始まります。
&lt;code&gt;npx cz&lt;/code&gt; でも可能です。&lt;/p&gt;
&lt;h2&gt;使い方&lt;/h2&gt;
&lt;p&gt;commitizen を実行すると、いくつかの質問が出てくるので、それに回答していく形でメッセージを作成できます。&lt;br&gt;
adapter に&lt;code&gt;cz-conventional-changelog&lt;/code&gt; を利用した場合は以下の選択肢になります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;? Select the type of change that you&apos;re committing&lt;/code&gt;&lt;br&gt;
コミットのタイプを選択します。選択肢があるので適したものを選択しましょう。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;? What is the scope of this change (e.g. component or file name)&lt;/code&gt;&lt;br&gt;
変更の対象スコープを回答します。画面のURLとか、対象のコンポーネントとかファイル名とかを選択しましょう。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;? Write a short, imperative tense description of the change (max 76 chars)&lt;/code&gt;&lt;br&gt;
短い説明です。ログとかgithub 上の一覧にはここが表示されるのでわかりやりく端的な内容を入力しましょう。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;? Provide a longer description of the change: (press enter to skip)&lt;/code&gt;&lt;br&gt;
詳細な説明です。修正の目的とか、残しておきたい説明とか、修正内容の概要とかあれば入力しておきましょう。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;? Are there any breaking changes?&lt;/code&gt;&lt;br&gt;
影響の大きい重大な変更がある場合に yes を選択しましょう。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;? Describe the breaking changes&lt;/code&gt;&lt;br&gt;
影響の大きい変更についての詳細な内容を入力しましょう。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;? Does this change affect any open issues?&lt;/code&gt;&lt;br&gt;
yes を選択すると、関連する issue を設定できます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;? Add issue references (e.g. &quot;fix #123&quot;, &quot;re #123&quot;.)&lt;/code&gt;&lt;br&gt;
関連する issue の番号を入力します。正しく設定しておくと github のUI上でリンクになったり、PRが issue と自動的に関連づけられたりするので便利です。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;コミット時のメッセージは後から参照する時に、大切な情報になります。
考えるのがめんどくさくなって適当なメッセージにしてしまったり、 気を抜くと何の情報もないメッセージにしてしまいがちです。&lt;/p&gt;
&lt;p&gt;紹介したライブラリを使うことで悩まずに適切なメッセージを残すことができます。&lt;br&gt;
チームでの開発でもルールとして用いることもできますし、個人での開発でもわかりやすいコミットメッセージの作成として力を発揮します。&lt;/p&gt;
&lt;p&gt;他人がみた時にも親切ですし、未来の自分がみた時にもわかりやすくしておくことはとても重要ですね。&lt;/p&gt;
&lt;p&gt;導入も簡単ですので、使ったことのない人はぜひ活用してみてください。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native でアプリ起動の際に`Error: No native splash screen registered for given view controller.`のアラートが出る現象の解決]]></title><description><![CDATA[React Native + Expo でアプリ開発時に、アプリ起動後スプラッシュが消えるタイミングで以下のアラートが出ていました。 この現象についての原因調査と解決方法のメモです。 結論を先に言うと AppLoading…]]></description><link>https://honmushi.com/2021/11/11/app-loading-splash-warning/</link><guid isPermaLink="false">https://honmushi.com/2021/11/11/app-loading-splash-warning/</guid><pubDate>Thu, 11 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native + Expo でアプリ開発時に、アプリ起動後スプラッシュが消えるタイミングで以下のアラートが出ていました。&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;[Unhandled promise rejection: Error: No native splash screen registered for given view controller. Call &amp;#39;SplashScreen.show&amp;#39; for given view controller first.]
at node_modules/react-native/Libraries/BatchedBridge/NativeModules.js:103:50 in promiseMethodWrapper
at node_modules/@unimodules/react-native-adapter/build/NativeModulesProxy.native.js:15:23 in moduleName.methodInfo.name
at node_modules/expo-splash-screen/build/SplashScreen.js:23:17 in hideAsync
at node_modules/expo-splash-screen/build/SplashScreen.js:19:7 in hideAsync&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;code&gt;AppLoading&lt;/code&gt; でアプリ起動時のアセットの読み込みなどを行っていました。このコンポーネントの &lt;code&gt;audoHideSplash&lt;/code&gt; の機能が原因でした。
デフォルトは有効になっているので、false を渡して機能を無効化することで解決できました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; AppLoading &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;expo-app-loading&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 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;AppLoading
      &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;gatsby-highlight-code-line&quot;&gt;      autoHideSplash&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 boolean&quot;&gt;false&lt;/span&gt;&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 operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;使用しているライブラリ&lt;/li&gt;
&lt;li&gt;エラーの内容を読む&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SplashScreen.hideAsync()&lt;/code&gt; を取り除いてみる&lt;/li&gt;
&lt;li&gt;他の何かが &lt;code&gt;hideAsync&lt;/code&gt; しようとしている？&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SplashScreen&lt;/code&gt; のサンプルソースを見ると怪しいものを発見&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;使用しているライブラリ&lt;/h2&gt;
&lt;p&gt;今回の現象に関連しているのは以下のライブラリでした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;expo-splash-screen&lt;/code&gt;&lt;br&gt;
アプリ起動時のスプラッシュ画面の表示に使っています。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expo-app-loading&lt;/code&gt;&lt;br&gt;
アプリ起動時のアセット呼び出しやデータ準備などに使っています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;エラーの内容を読む&lt;/h2&gt;
&lt;p&gt;エラーの内容を見ると、スプラッシュスクリーンが登録されていないと言われています。
&lt;code&gt;SplachScreen.show&lt;/code&gt; を最初に呼び出してほしいとのことです。&lt;/p&gt;
&lt;p&gt;たしかに、アセットのロードが終わるタイミングで以下を実行して、明示的にスプラッシュを非表示にしています。&lt;br&gt;
この時にスプラッシュがすでに存在しなくなっているのかなと考えられます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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 operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; SplashScreen &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;expo-splash-screen&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 operator&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;

&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; SplashScreen&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hideAsync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&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;    &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; SplashScreen&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;preventAutoHideAsync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&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;code&gt;SplashScreen.hideAsync()&lt;/code&gt; を取り除いてみる&lt;/h2&gt;
&lt;p&gt;仮説として、&lt;code&gt;hideAsync&lt;/code&gt; が不要なのではないかと考え、この行を削除してみました。&lt;/p&gt;
&lt;p&gt;結果、スプラッシュスクリーンは表示されたままになり、ホーム画面を表示できない現象が発生。
スプラッシュを隠す &lt;code&gt;hideAsync&lt;/code&gt; は必要で、ちゃんと動作していた様子です。&lt;/p&gt;
&lt;p&gt;この仮説はハズレでした。&lt;/p&gt;
&lt;h2&gt;他の何かが &lt;code&gt;hideAsync&lt;/code&gt; しようとしている？&lt;/h2&gt;
&lt;p&gt;仮説として、明示的に &lt;code&gt;hideAsync&lt;/code&gt; を記述しているところ以外で、スプラッシュを非表示にする処理が動いているのではと考えました。&lt;/p&gt;
&lt;p&gt;何となく怪しいのは、ホーム画面の描写で上書きしているとか、&lt;code&gt;AppLoading&lt;/code&gt; の起動時のアセット読み込みなどを管理するコンポーネントなどが考えられます。&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;SplashScreen&lt;/code&gt; のサンプルソースを見ると怪しいものを発見&lt;/h2&gt;
&lt;p&gt;スプラッシュの実装はドキュメントにも記載されているものを使っているので、それほどおかしいところはないはず。
サンプルのコードがあったので覗いてみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/expo/examples/tree/master/with-splash-screen&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/expo/examples/tree/master/with-splash-screen&lt;/a&gt;
&lt;a href=&quot;https://github.com/expo/examples/blob/master/with-splash-screen/App.js&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/expo/examples/blob/master/with-splash-screen/App.js&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;私の実装と同じように&lt;code&gt;AppLoading&lt;/code&gt; を使っていますが、サンプルでは&lt;code&gt;autoHideSplash&lt;/code&gt; という引数を渡しています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;AppLoading
        &lt;span class=&quot;token comment&quot;&gt;// Instruct SplashScreen not to hide yet, we want to do this manually&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        autoHideSplash&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 boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;        startAsync&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;startAsync&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        onError&lt;span class=&quot;token operator&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;error&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        onFinish&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;onFinish&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;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;AppLoading&lt;/code&gt; には確かに&lt;code&gt;autoHideSplash&lt;/code&gt; というパラメータを渡すことができ、デフォルトでは true となっています。
&lt;a href=&quot;https://docs.expo.dev/versions/v43.0.0/sdk/app-loading/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.dev/versions/v43.0.0/sdk/app-loading/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AppLoading&lt;/code&gt; コンポーネントのアンマウント時にスプラッシュ画面を非表示にしようとします。&lt;/p&gt;
&lt;p&gt;これが原因ではと考え、&lt;code&gt;autoHideSplash&lt;/code&gt; にfalse を渡すように修正したところ、問題のアラートが表示されなくなりました。
スプラッシュもしっかりと非表示になり、問題が解決できました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;AppLoading
      &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;gatsby-highlight-code-line&quot;&gt;      autoHideSplash&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 boolean&quot;&gt;false&lt;/span&gt;&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 operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;エラーではなくアラートがログに出るだけなので、放置してもアプリの動作には問題ないはずです。
しかし、こういったものが積み重なると気持ち悪いですし、もっと大きな問題の検知の遅れになったりしてしまいます。&lt;/p&gt;
&lt;p&gt;できるだけ細かいアラートなども見逃さずメモしておいたり、コストやスケジュールを考慮して対応するタイミングを作れると良いです。&lt;/p&gt;
&lt;p&gt;基本的には &lt;code&gt;AppLoading&lt;/code&gt; の使い方の問題でした。サンプルみたりすると解決のヒントがあるのでとても助かりますね。
またバージョン更新によって動作が変わることもあるので、都度対応していければ考えています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[i18n-js と expo-localization を利用して、多言語対応を行う]]></title><description><![CDATA[React Native のアプリで、複数言語に対応する方法のメモです。 基本的には i18n-js…]]></description><link>https://honmushi.com/2021/11/02/i18n-js/</link><guid isPermaLink="false">https://honmushi.com/2021/11/02/i18n-js/</guid><pubDate>Tue, 02 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native のアプリで、複数言語に対応する方法のメモです。&lt;/p&gt;
&lt;p&gt;基本的には &lt;code&gt;i18n-js&lt;/code&gt; というパッケージを使うことで、端末に設定されている言語設定に応じて表示するテキストを切り替えることができます。&lt;/p&gt;
&lt;p&gt;複数言語に対応しておくことは、世界中からアプリを使ってもらえる可能性が増えるので積極的に進めておきたいです。
テキストを言語の数用意することが大変になりますが、実装自体は簡単なので時間見つけて対応しておくと良いです。&lt;/p&gt;
&lt;h2&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;li&gt;テキストの用意&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/fnando/i18n-js&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/fnando/i18n-js&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.dev/versions/latest/sdk/localization/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.dev/versions/latest/sdk/localization/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;必要なパッケージをインストールします。&lt;br&gt;
&lt;code&gt;expo-localization&lt;/code&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;expo install i18n-js expo-localization&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;TypeScript の場合は型情報もインストールしておきましょう。&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-dev @types/i18n-js&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;簡単に実装の例を紹介します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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 operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; Localization &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;expo-localization&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; i18n &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;i18n-js&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;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;

i18n&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;translations &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  en&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; welcome&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Hello&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;
  ja&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; welcome&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;
i18n&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;locale &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Localization&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;locale&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;~&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;Text style&lt;span class=&quot;token operator&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;text&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;i18n&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;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 operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Text&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;i18n&lt;/code&gt; に対して言語ごとのテキスト情報を定義した上で、使用する言語の種類を設定します。
使用する言語については、端末に設定されている言語を &lt;code&gt;expo-localization&lt;/code&gt; にて取得して反映します。&lt;/p&gt;
&lt;p&gt;使用言語の設定はアプリの中で 1度だけ行えばいいので、それぞれの画面で用意するよりも共通化して置けると便利です。
テキストの用意もまとめて書いておくと、追加・変更などの運用時も快適になります。&lt;/p&gt;
&lt;p&gt;確認の際は、シミュレータなどで設定から端末の言語設定を変更することで確認ができます。&lt;/p&gt;
&lt;h2&gt;テキストの用意&lt;/h2&gt;
&lt;p&gt;i18nを共通化すると以下のようにできます。これを必要な画面で import して利用します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; locale &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;&quot;expo-localization&quot;&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; i18n &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;i18n-js&quot;&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; translations &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;&quot;./translations&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Set the key-value pairs for the different languages you want to support.&lt;/span&gt;
i18n&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;translations &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; translations&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Set the locale once at the beginning of your app.&lt;/span&gt;
i18n&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;locale &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; locale&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// When a value is missing from a language it&apos;ll fallback to another language with the key present.&lt;/span&gt;
i18n&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fallbacks &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;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; i18n &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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;テキストを別ファイル translations として用意すると以下のようになります。
ついでにテキストの型定義を用意しておくと、定義漏れを発見できるのでおすすめです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TextDefinition&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;
  drawer&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    policy&lt;span class=&quot;token operator&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;
    reviewRequest&lt;span class=&quot;token operator&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;
    licenses&lt;span class=&quot;token operator&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 punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  placeholder&lt;span class=&quot;token operator&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 punctuation&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 class-name&quot;&gt;Translations&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;
  en&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; TextDefinition&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  ja&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; TextDefinition&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&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; translations&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Translations &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  en&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    drawer&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      policy&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;privacy policy&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      reviewRequest&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Please cooperate with the review&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      licenses&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;licenses&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;
    placeholder&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token string&quot;&gt;&quot;Enter it and tap the button below to enlarge it on the screen.&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;
  ja&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    drawer&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      policy&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;
      reviewRequest&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;
      licenses&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;
    placeholder&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;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&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;p&gt;日本語以外についても用意しておくことで海外のユーザーが使ってくれますし、対応しておいて損はありません。&lt;/p&gt;
&lt;p&gt;アプリ自体の多言語対応ができたら、ストア情報やLPについても多言語対応しておきたいですね。その辺りのやり方も後日紹介する予定です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[expo-linear-gradient を使って要素をグラデーションにする]]></title><description><![CDATA[expo-linear-gradient というパッケージの紹介です。 色がグラデーションになった要素を配置できます。
背景をグラデーションにしたりボタンをグラデーションにしたりすることで、デザインの選択肢も増えて便利です。 概要 ドキュメント インストール 実装 応用 Expo…]]></description><link>https://honmushi.com/2021/11/01/expo-linear-gradient/</link><guid isPermaLink="false">https://honmushi.com/2021/11/01/expo-linear-gradient/</guid><pubDate>Mon, 01 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code&gt;expo-linear-gradient&lt;/code&gt; というパッケージの紹介です。&lt;/p&gt;
&lt;p&gt;色がグラデーションになった要素を配置できます。
背景をグラデーションにしたりボタンをグラデーションにしたりすることで、デザインの選択肢も増えて便利です。&lt;/p&gt;
&lt;h2&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;li&gt;応用&lt;/li&gt;
&lt;li&gt;Expo を使わない場合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.dev/versions/latest/sdk/linear-gradient/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.dev/versions/latest/sdk/linear-gradient/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;Expo を導入済みであればいつも通り以下のコマンドでインストールします。&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;expo install expo-linear-gradient&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;実装は以下のようになります。&lt;/p&gt;
&lt;p&gt;用意されている &lt;code&gt;LinearGradient&lt;/code&gt; コンポーネントに色を配列で指定することで、グラデーション要素を実装できます。
色の配列は要素を 2つ以上設定でき、多く色を設定すると虹色のような複雑なグラデーションも可能です。&lt;/p&gt;
&lt;p&gt;コンポーネント自体は空の要素として配置でき、親要素として配置して中にテキストやアイコンを入れられます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&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; LinearGradient &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;expo-linear-gradient&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;~&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;LinearGradient
        colors&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;#5c76bf&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;#a4b9ed&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;
        style&lt;span class=&quot;token operator&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;button&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;MaterialIcons
          name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;loupe&quot;&lt;/span&gt;
          size&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;40&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          style&lt;span class=&quot;token operator&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;buttonIcon&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          color&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Colors&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 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;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;LinearGradient&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 346px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1b7281ce940d3d283f34fe409df56e79/8f77f/gradient.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 85.13513513513513%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAACYElEQVQ4y4VU/09SURR//2HrF9ta/aSrLddGBgPNMEuNb89gtCEtvrhKUctygSZEKtNCh4YRElLy0sghApYPo8HjE1x7Pp686G6fnbPzzvnczz3v3kMBFdSjUuEawP2FOC7k1tdTUmS8z3F8srBqsWak1L/IeCKOKyGdOcTu3g8Ui0cncZJTl8/XiAgFWysoYybAQEUHcUm9QKDQLWHcE0E+lz0hPS2CEnYQgqVyCbQjjDPtXrRc8+O8/A3BuQ4/zl71ocvgB8MwIlIeVL3k454BrukEKWy9GcBF5TwuKOcIan5rdwAtHfO4Y5pGdn+3QSkl7gGQOyhApgnicu9btPUsodMYgm1yk6DLuIo29SKu9C2j9YYPM7NztS5LK+TVfYhnSIFMG4KcXsXIdBL2558JRjxJyA2r5Ft7/wpMQ+MosHmRygbCtWgaMt0alMYwBh5u4ImHwbPXOxif3Sa+1h6DYvA9FPci6DcMYz+Tak6YYPbRY4nitjUGtWUDY7M7eOr7hqn5FJIpFlpHHLeGYug2r0NDP8BBPiNNyPewwB7COrGJu44v0A0noHVWjzu1DZc3BefLHWjscQyOptCp98Jus1WFlEV38dTFrpAmh9a3QD/ewv2J7zCPfa36SegfHccsk2lir6sG8DESbv6XeZW/iyx8C2GYRz/B+mIPNncWdk+OWH31fnaoNHg14z71DCUU1r+UX0eHWF4JwenywWTzQm9xo8/gAD1oQvDdIsrlskRdRerIAmnNz+f2sBmPYj0cQqJqWfYnPyZEZA2EUgNCIBYv6TzJ8SU9D/+Heo4/jEjT13ZbvcgAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;グラデーションボタン&quot;
        title=&quot;グラデーションボタン&quot;
        src=&quot;/static/1b7281ce940d3d283f34fe409df56e79/8f77f/gradient.png&quot;
        srcset=&quot;/static/1b7281ce940d3d283f34fe409df56e79/12f09/gradient.png 148w,
/static/1b7281ce940d3d283f34fe409df56e79/e4a3f/gradient.png 295w,
/static/1b7281ce940d3d283f34fe409df56e79/8f77f/gradient.png 346w&quot;
        sizes=&quot;(max-width: 346px) 100vw, 346px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&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;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;LinearGradient
        colors&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;#5c76bf&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;#a4b9ed&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;
        start&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; x&lt;span class=&quot;token operator&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; y&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.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;// end={{ x: 0.9, y: 0.9 }}&lt;/span&gt;
        locations&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 number&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.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;
        style&lt;span class=&quot;token operator&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;button&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;MaterialIcons
          name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;loupe&quot;&lt;/span&gt;
          size&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;40&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          style&lt;span class=&quot;token operator&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;buttonIcon&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          color&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Colors&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 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;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;LinearGradient&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;start&lt;/h3&gt;
&lt;p&gt;グラデーションの開始位置を指定できます。
&lt;code&gt;{ x: 0.1, y: 0.3 }&lt;/code&gt; のように、x軸と y軸の位置を指定します。0 ~ 1 までの値を指定でき、パーセントでの位置指定になります。&lt;/p&gt;
&lt;h3&gt;end&lt;/h3&gt;
&lt;p&gt;グラデーションの終了位置を指定できます。
start と同様の指定方法になっていて、&lt;code&gt;{ x: 0.9, y: 0.7 }&lt;/code&gt; と x軸と y軸の位置を指定します。&lt;/p&gt;
&lt;h3&gt;location&lt;/h3&gt;
&lt;p&gt;色が切り替わる場所を定義できます。
colors で指定した色数と同じ要素数の配列を渡す必要があり、対応する色要素の切り替わり地点を 0 ~ 1までの値で指定します。&lt;/p&gt;
&lt;h2&gt;Expo を使わない場合&lt;/h2&gt;
&lt;p&gt;react-native-linear-garadient を使えます。使い方はほとんど一緒なので、ドキュメント通りにやれば同じように実装できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/react-native-linear-gradient/react-native-linear-gradient&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/react-native-linear-gradient/react-native-linear-gradient&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;画像や複雑なコンポーネントを用意しなくても、グラデーションを設定することでデザインの幅が出ます。
色の使い方や置き方によっては目立つボタンにもできますし、さりげなく見やすい意匠も用意できます。&lt;/p&gt;
&lt;p&gt;簡単に実装ができるので、積極的に使いこなせると頼もしいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Figma に公開されている Design System のリンク集]]></title><description><![CDATA[Figma で公開されているデザインシステムの紹介です。 私はUI設計やデザイン・プロト作成に Figma を使っています。
Figma では Community というエリアがあります。
そこでは他の人が作った素材やテンプレートが公開されており、簡単に活用できます。 UI…]]></description><link>https://honmushi.com/2021/11/30/design-systems/</link><guid isPermaLink="false">https://honmushi.com/2021/11/30/design-systems/</guid><pubDate>Sat, 30 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Figma で公開されているデザインシステムの紹介です。&lt;/p&gt;
&lt;p&gt;私はUI設計やデザイン・プロト作成に Figma を使っています。
Figma では Community というエリアがあります。
そこでは他の人が作った素材やテンプレートが公開されており、簡単に活用できます。&lt;/p&gt;
&lt;p&gt;UIコンポーネント集だったり、端末の外枠・画面要素など、便利なものがたくさん公開されています。&lt;/p&gt;
&lt;p&gt;今回はその中で有用そうなデザインシステムの紹介です。
デザインシステムを公開してくれている企業やサービスがあり、Figma 上でこれを覗いて参考にできます。&lt;/p&gt;
&lt;p&gt;大手のサービスのデザインシステムもあるので、UIやコンポーネントの勉強にもなりますしデザイン設計やガイドライン作成の参考にもなります。
暇な時に触ってみるだけでもとても勉強になるのでおすすめです。&lt;/p&gt;
&lt;h2&gt;一覧ページ&lt;/h2&gt;
&lt;p&gt;一覧になっているページです。
気になるものやよく使うサービスがあれば、ここから探してFigmaに取り込んで触ってみましょう。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.designsystems.com/open-design-systems/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.designsystems.com/open-design-systems/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;気になったもの&lt;/h2&gt;
&lt;p&gt;上記の一覧から気になったものと、そのアカウントが公開している他のファイルについて軽く紹介です。&lt;/p&gt;
&lt;h3&gt;Github Primer&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/854767373644076713&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/854767373644076713&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Github で使われているデザインシステム Primer のUIコンポーネント集です。&lt;/p&gt;
&lt;p&gt;ページサンプルなども置いてあり、開発者がよくみるGithubのUIコンポーネントを改めてみることができます。
整理されておりダークモードの時のコンポーネント設定もあります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/809920999413919915&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/809920999413919915&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Github で使われているアイコン集です。Primer の一部でオープンソースとして公開されておりOcticonsという名前がついてます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/854766928300977832&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/854766928300977832&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;色や文字などのstyle に関する設定をまとめたものです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Primerはオープンソースになっているので参考にしやすくなっています。さらに、Figmaで確認できるようになっているというのはとても助かりますね。
&lt;a href=&quot;https://primer.style/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://primer.style/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Material Design&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/778763161265841481&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/778763161265841481&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Android で用いられているマテリアルデザインのデザインシステムです。アプリなどのUI設計やプロト作成であれば、これをそのまま使うだけでかなりそれっぽくなりますね。&lt;/p&gt;
&lt;p&gt;一通り各コンポーネントをみてみるだけでも、アプリのUIの勉強になります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/787036571667088922&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/787036571667088922&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ダークモードバージョンもあります。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Microsoft Fluent&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/916836509871353159&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/916836509871353159&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Microsoft で使われている Fluent のファイルです。Teams などはこれでデザインされてますし、他のものにも利用されています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/836835755999342788&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/836835755999342788&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;アイコン集です。数がとても多いですが良いですね。他にもアクセシビリティ関連などいくつもファイルがあるのでMicrosoftのアカウントはチェックしておくと良いです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ATLASSIAN&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/857042449394640587&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/857042449394640587&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;atomic デザインでいう一番小さいAtomic階層のコンポーネント集です。
結構な数とページがありますが、とても細かく分類されていてわかりやすくて良質でした。&lt;/p&gt;
&lt;p&gt;利用する際には以下のComponent pack を利用することで、もう1つ上の階層のMolecular階層のコンポーネントを探せます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/857042825430121165&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/857042825430121165&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Molecular階層のコンポーネント集です。コンポーネントを階層を分けてが公開されているのは便利ですね。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Cookpad&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/847372282968994272&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/847372282968994272&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cookpad のデザインシステムです。細かいコンポーネントは含まれていませんが、色やテキストなどのstyleの仕様が公開されています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/file/885445931580188399&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.figma.com/community/file/885445931580188399&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;スキルマップのファイルです。好き嫌いの軸とできるできないの2軸になっており、自分のスキルの棚卸しやチーム内でのスキル共有などに活かせそうです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;他にも Uber や Spotify ・ Salesforce などのデザインシステムも公開されています。
海外のサービスが多いですが日本のものもあります。
Figma に簡単に取り込んで閲覧・編集・再利用ができるので、とても便利な取り組みです。&lt;/p&gt;
&lt;p&gt;みるだけでももちろんですし、細かい数値を確認してみたり実際にページやコンポーネントを設計するとさらに勉強になりますね。&lt;/p&gt;
&lt;p&gt;UI設計についての勉強になるのは当然で、デザインシステムの設計やガイドラインの作成の際にも参考になります。
Figma そのものの使い方・コンポーネントの作成方法もとても参考になるので、いろんなデザインシステムをコピーして遊んでみると勉強になります。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[UIガイドラインのリンク集]]></title><description><![CDATA[UI設計やデザインの際に参考となる、各OSのガイドラインのリンク集です。
更新があったら対応していきます。 各OSのガイドライン https://material.io/ Material is an adaptable system of guidelines…]]></description><link>https://honmushi.com/2021/11/30/os-guideline/</link><guid isPermaLink="false">https://honmushi.com/2021/11/30/os-guideline/</guid><pubDate>Sat, 30 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;UI設計やデザインの際に参考となる、各OSのガイドラインのリンク集です。
更新があったら対応していきます。&lt;/p&gt;
&lt;h2&gt;各OSのガイドライン&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://material.io/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://material.io/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Material is an adaptable system of guidelines, components, and tools that support the best practices of user interface design. Backed by open-source code, Material streamlines collaboration between designers and developers, and helps teams quickly build beautiful products.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/design/human-interface-guidelines/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://developer.apple.com/design/human-interface-guidelines/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Get in-depth information and UI resources for designing great apps that integrate seamlessly with Apple platforms.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.microsoft.com/design/fluent/#/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.microsoft.com/design/fluent/#/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;No need to start from scratch. Fluent is an open-source, cross-platform design system that gives designers and developers the frameworks they need to create engaging product experiences—accessibility, internationalization, and performance included. Go ahead, pick a platform to get started.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;UI設計の情報サイト&lt;/h2&gt;
&lt;h3&gt;rss あり&lt;/h3&gt;
&lt;p&gt;rss で購読できるので登録しておくことをおすすめします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.uxbooth.com/articles/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.uxbooth.com/articles/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The UX Booth is a publication by and for the user experience community. Our readership consists mostly of beginning-to-intermediate user experience and interaction designers, but anyone interested in making the web a better place to be is welcome. If you’re interested, join us and discuss best practices and trending topics, or share your experiences.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.nngroup.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.nngroup.com/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We are a UX research and consulting firm trusted by leading organizations world-wide to provide reliable guidance on user experience.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://uxdesign.cc/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://uxdesign.cc/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The UX Collective is an independent design publication built to elevate unheard design voices all over the world. Curated stories on user experience, visual and product design. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://automattic.design/inclusive/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://automattic.design/inclusive/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At Automattic, we are passionate about making the web a better place, and creating opportunities for anyone, anywhere.
We work on WordPress.com, WooCommerce, Simplenote, Tumblr, Jetpack and many more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.proto.io/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://blog.proto.io/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At Proto.io, we strive to improve the world of prototyping, through excellent customer support, intuitive features and ambitious goals.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://goodpatch.com/blog/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://goodpatch.com/blog/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;これからの不確実性が高い時代においての革新は、ユーザー体験までデザインすることで初めて効果が出ます。ユーザー体験の向上によってビジネスに貢献する。事業やプロダクトの本質的な価値と、世の中の人々のニーズをつなぎ、なぜそれらが存在すべきかをオーナーの想いに寄り添いながらひもとき、構築することが重要です。Goodpatchはデザインの価値の向上のために存在しています。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;rss なし&lt;/h3&gt;
&lt;p&gt;rss がないため定期的にアクセスしないといけません。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.designsystems.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.designsystems.com/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A Figma publication for design systems creators, designers, developers, and managers&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.edgeoftheweb.co.uk/blog/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.edgeoftheweb.co.uk/blog/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Insights, perspectives and news from our team
The Edge of the Web team delve into the details of design, development, marketing and more. Our insights can help you navigate the digital waters, whether you’re not technical at all or are an industry expert.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;UI関連の指針&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://lawsofux.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://lawsofux.com/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Laws of UX is a collection of the maxims and principles that designers can consider when building user interfaces. It was created by Jon Yablonski.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.sociomedia.co.jp/category/shig&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.sociomedia.co.jp/category/shig&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ソシオメディアがまとめている、ヒューマンインターフェースをデザインする際の指針です。これらは、インターフェースデザインに関する様々な文献と、実際のデザインコンサルティングで得た知見をもとに、ソシオメディアが独自に編纂したものです。継続的に追加・更新していきます。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;便利なサイト&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.checklist.design/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.checklist.design/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A collection of the best design practices.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://webframe.xyz/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://webframe.xyz/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Discover and be inspired by beautiful webapp designs&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;OSごとに異なるガイドラインを提示しているので、どれに従うのが正しいのだろうと感じることがあります。
これが常に正しいということはなく、OSによって環境によってなどで正解は異なります。&lt;/p&gt;
&lt;p&gt;色々なガイドラインがあって、それぞれどんな思想でどんなUIを提案しているのか一通り学んでおくと、様々な場面で応用できるので良い勉強になります。&lt;/p&gt;
&lt;p&gt;ガイドラインはたまに更新されるので、そういった新しい情報もキャッチできると良いです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Android の Google Play に登録するスクリーンショットの用意]]></title><description><![CDATA[今回はGoogle Play のアプリスクリーンショットについてです。 iOS の App Store については iOS の App Store に登録するスクリーンショットの用意 にて解説しています。そのAndroid 版です。 Android…]]></description><link>https://honmushi.com/2021/10/12/store-screenshot-android/</link><guid isPermaLink="false">https://honmushi.com/2021/10/12/store-screenshot-android/</guid><pubDate>Tue, 12 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回はGoogle Play のアプリスクリーンショットについてです。&lt;/p&gt;
&lt;p&gt;iOS の App Store については &lt;a href=&quot;/2021/10/12/store-screenshot-ios/&quot;&gt;iOS の App Store に登録するスクリーンショットの用意&lt;/a&gt; にて解説しています。そのAndroid 版です。&lt;/p&gt;
&lt;p&gt;Android のアプリをビルドしてアップロードすることに加えて、ストアに設定が必要な掲載情報についてのメモです。必要な画像についての情報をまとめています。&lt;/p&gt;
&lt;h2&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;h2&gt;必要なデータ&lt;/h2&gt;
&lt;p&gt;Google Play Console の「ストアでの表示」内の「メインのストアの掲載情報」のメニューにて、以下のデータが必要になります。&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;h2&gt;必要な画像の形式&lt;/h2&gt;
&lt;p&gt;それぞれの画像を以下の形式で用意します。&lt;/p&gt;
&lt;h3&gt;アプリのアイコン&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;透過 PNG または JPEGの形式。&lt;/li&gt;
&lt;li&gt;容量は 1MB 以下で、512 x 512 ピクセル。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;フィーチャーグラフィック&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PNG または JPEGの形式。  &lt;/li&gt;
&lt;li&gt;容量は 1MB 以下で、1,024 x 500 ピクセル。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;携帯電話版のスクリーンショット&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PNG または JPEG の形式。&lt;/li&gt;
&lt;li&gt;1枚につき 8MB 以下。&lt;/li&gt;
&lt;li&gt;アスペクト比 16:9 または 9:16 。&lt;/li&gt;
&lt;li&gt;縦横がそれぞれ 320 ～3840 ピクセル。&lt;/li&gt;
&lt;li&gt;2枚以上必要で 8枚まで登録できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ストアでの見え方&lt;/h2&gt;
&lt;p&gt;Google Play でも、スクリーンショットが縦か横かで、一覧画面での見え方が変わります。
以下参考までに。&lt;/p&gt;
&lt;h3&gt;縦向きの画像を用意した場合&lt;/h3&gt;
&lt;p&gt;以下の画像のように縦の画像が 3つ並びます。&lt;/p&gt;
&lt;p&gt;画像が複数並ぶので、いろんな機能を紹介できます。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/13e1304a7b1bdd0a617f2d7d85fb7628/17009/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6google.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 102.7027027027027%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAEZ0lEQVQ4y51VSU9bVxR+P6SLSt22XSB23VRVu0BqInWFkihRq6hpoixKS1FWUaVuEqEmggiUpilQTEkgDTEYY2bHgLGBYPCAjafYYIPnCc8jX7/7AKVSk02vdPXuO++ec74zfU9CvYFEqQRLPA5vOo1jALlcDkdHRygUCohTHovFEI1GcXBwgGAwiHw+j7etYrEISRx6t824odHg+vwC/JkjRA8P4XQ6EQgE4XA4YLfb5b2xsYEVvR6hUEg28PPSGL6fVeDieC+GdwwQ4GSDd9Y38MP0DNrm5rGTSCCXSuKQSvv7+6hUKnjXauq7jfd72iD9cgE3ZwdlmSRiXNwP4P6rTfRbbchWqwgT4d7eHtxuN9JMg1iNRgPHx8fy+ewZyqZgjx/AnQgjUy6iUi5Dqtfqb1yKi1QUyv9eZwaqdJZKpU6MvyuHtWoNQj3LQlisVjh2dxFk8hs00jg1Xj91EGOBFhYXUavXZYO1Rp27gerpe4nFlU4xIBmPIcFqZokgxWc8HH6D+iRmvHa5EGM6MiINx//FWBQGN0MRbEYi8PFSmpC3eDZHotgKheGhLM8wd+IJ2GJxbB2GYKI8w3ueVBoWyqxEvR2NIVkqn+SwdVyFT56Mok27hBGGe06pxBW2UOukGjfYRiqPF188H8NFtZryaXzOs9LtwdXZOZxXjlM+hZaxMfxmtrBt6pC+1enw5ZQG7Ut69LHK5yan8I1uCa3zc7hMJaF8nkqXmLsrWi3PajzbdeLyzBxahHxhEZ+9UOLB1vaJwQ+uXcd77R24ppzAgNmMD+/cRdOP7fj41i209PVjwuVGU1c3PuroQNNPHWi+dx/P7A5cGFOiubMTn977Fc1dD9D9yiTnWRqg18crK7jLEAeNRnTR6/CKHoqlZXROqDC0to7bDO1P/Sr+WF7BVcUQhjkIN588xaWHD/F1dze+6ulFD+/LBlHmJFQreKpbxpBxDX63F5VcHvVsDjp6fUS5ke10tkyOXTym4b8XtUgmksizGC6vF8OrBtQrVUhmnx+xZBKKlzooDGsw23bYoCWU8wXMGNeprId61Qh/MI1AJA/9lplI9VASUYZjKlrIwZwKgzLC71ST0DpdeK43QEGEFvsuivkSfOEIRqk0yJCH1Rpo9RYs6K0YnZrGgMEIlcGALI2JgXCycCNMQ40tJimIwhUIYIih9dOohaySy2aRoPdx5vJ35k6hUsNpM8PBPcJcPyLCF8z7EYdA0JyDgP6ik4aociGdQamQxyTJYZpt4/K+RpkNWqTnVYsVE+yvSabDTTpzsk81bDPNjh0vt7eRozExbj7/HmaoW6/VIJVYlAARRjkhYvB9Ph88ZBlBpOJcJMkectzEWfCg3++Hx+ORqU2QrjiLu1lGJahOqhPmNr1ZicZkMskXLRaLrGyz2WSiFe9WVtrLaro4z0ImiFcYEYwuKE4YK5/Rl6AdsQX1CweCpmqEL8IRvwHxTVwWSkIu7oj3t9KX+Ph/l+DJs41T+voH86nEns3+MpIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;縦画像を用意した場合の Google Play 表示&quot;
        title=&quot;縦画像を用意した場合の Google Play 表示&quot;
        src=&quot;/static/13e1304a7b1bdd0a617f2d7d85fb7628/fcda8/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6google.png&quot;
        srcset=&quot;/static/13e1304a7b1bdd0a617f2d7d85fb7628/12f09/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6google.png 148w,
/static/13e1304a7b1bdd0a617f2d7d85fb7628/e4a3f/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6google.png 295w,
/static/13e1304a7b1bdd0a617f2d7d85fb7628/fcda8/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6google.png 590w,
/static/13e1304a7b1bdd0a617f2d7d85fb7628/efc66/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6google.png 885w,
/static/13e1304a7b1bdd0a617f2d7d85fb7628/c83ae/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6google.png 1180w,
/static/13e1304a7b1bdd0a617f2d7d85fb7628/17009/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6google.png 1932w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;横向きの画像を用意した場合&lt;/h3&gt;
&lt;p&gt;以下の画像のように横の画像が 1つ表示されます。&lt;/p&gt;
&lt;p&gt;画像が大きく表示できるので、目を引く画像出会ったり興味を持たせるような内容であれば、こちらの表示がいいですね。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/97294202e2953ab38025248e1abd0b5e/2093e/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AAgoogle.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 104.72972972972974%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAEKElEQVQ4y52V/1MUZRzH/T/6qV+bmrHUIMogp3FqBskZobSRHB0KnPEgRCWUMZMIAiETmySpiJnsi3yZHDMNlOA4IL6KHNxxHnu33O7e7u3t3e7e3h1fbnn37C5aEv7iM/uaz/N5nnne+3k++zyf3bS6uoonbevXGv4mo8OGl9HpkHH9bwWypiMej0EURciyjFjM6nMch2g0ikAgAEEQkEqlTBF9VceKnnooagr+eCeC7NMU3qik0D2pIalFME/5wDCMKRQKhUDTtCns8/kQFHhzcbtrBJltVcj+5RzSW8+AUyOW4FV7FIcvMig4H0DvlAZNEeHxeAke8Dz/2C1/d7cPT1/8EM+3nMJTF4pBy2FL0C8s4UpvFB0DMuQEoCpkayQ6v99vbs/IzXqMZmw1nCApiatQFxNWDh9NrI6IJJL86P9L9kYfYKNmRphKrYI8EEQJ3T23oSgxkmwSwQpJOBFPEedxWPM69DX/PxGugF2Yh8gHEFcl4i8/0VEyI6RDy+if1mCfVggq7E4VjhkNg644BmfXoz2C3alhdmER0ViKrIlbgqd/4PHM+/eRXkJhm22e8MDOY+s60koWkFbKmKSXBvDsB168WxvAr31RPFfoXRNs4/HCkXlkHffhlTIK28sMa7Hd9Clz3PC3FA5h88Eek62FDvISCu/VB/AzETReaApWXQlhW4kfmScWkFVu8Vo5TSxNLPFP0NhRwSGz9B42p2fhxYyXCOnY8vIOpB0eQ8GXItrtMjKO0pZg9U9h7D7LoqiJJ5ZBbjWL7I9Z7Dpj2dxPGeScDeH1o+Po6OwCa9wgws0/e5BRZEfRV1F0ORQSAGMJ1l2VcOzbINodETR2Cqj4XsBHrQJabom4fFNEQwePg+dD2Hl8Ag77IDln5JySOzw+OolXbUOwXYrgtyEFOyvXBBs6JeR9ZkQYxKFGDgcaOOyv53DoCw62r4M41hJEXg2PPVVuDHRdg9DdA2l4GJO9/XizYhJlLZJZWHI+YS3BpmsS3qpisLeOxTufs9hrsNbPq7XYV89jX40bQzdugfv9OkJ9fZiZmMKuk2Mob5Xwx6iCPdXMA8EwcmsYHCDR5TewyD/HWvYhDPIbiWD1NAZ6/oLmdkGeuoux/kHkVI7iZJuEG0Tw7dq1CNtuKyhoElHcLMLWHMaRSwaiaW3NEoq/IVyWUdjoQm+/A0lSCxPLyxgYGsH+qknUdWoYmEmg4IJgCfKijFmvADcVgtPDmXbOFyZWxL05FhNOP5nnMe0OkApEg2NZE4qi4PIGwYVUhKUoWDFpCUYiYVBeDzxzLrhmpjEyPIgFmoL3vpswh/GxEcy5Z02cTicipHInk0mzmi8m41gipUtVlH/v8uLSEjQtDpkMRknZDwaDUFSVLNDI7yBhjhnzMU0zfwO6rm9YGHRSaP4BxTWQ01thUpUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;横画像を用意した場合の Google Play 表示&quot;
        title=&quot;横画像を用意した場合の Google Play 表示&quot;
        src=&quot;/static/97294202e2953ab38025248e1abd0b5e/fcda8/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AAgoogle.png&quot;
        srcset=&quot;/static/97294202e2953ab38025248e1abd0b5e/12f09/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AAgoogle.png 148w,
/static/97294202e2953ab38025248e1abd0b5e/e4a3f/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AAgoogle.png 295w,
/static/97294202e2953ab38025248e1abd0b5e/fcda8/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AAgoogle.png 590w,
/static/97294202e2953ab38025248e1abd0b5e/efc66/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AAgoogle.png 885w,
/static/97294202e2953ab38025248e1abd0b5e/c83ae/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AAgoogle.png 1180w,
/static/97294202e2953ab38025248e1abd0b5e/2093e/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AAgoogle.png 1858w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Google Play でのスクリーンショットの見え方を紹介しました。
iOS と Android ですこしずつ仕様が異なりますが、基本的には同じような表現になるので、似たような画像を用意することになります。&lt;/p&gt;
&lt;p&gt;ストアでの見え方によって、アプリのダウンロード数などに影します。
しっかり用意して、両ストアに効果的な画像を設定できるようになりましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[iOS の App Store に登録するスクリーンショットの用意]]></title><description><![CDATA[アプリを作成したら、各OS…]]></description><link>https://honmushi.com/2021/10/12/store-screenshot-ios/</link><guid isPermaLink="false">https://honmushi.com/2021/10/12/store-screenshot-ios/</guid><pubDate>Tue, 12 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;アプリを作成したら、各OSのストアにアップロードして公開します。&lt;/p&gt;
&lt;p&gt;その際に、アプリの情報としてスクリーンショットがいくつか必要になります。
このスクリーンショットはストアでのアプリ一覧でも表示されるので、ユーザーに気づいてもらうためであったり、使い方や特徴の説明の目的でも大切な要素です。&lt;/p&gt;
&lt;p&gt;今回は必要なスクリーンショットの形式や、ストアでの見え方についてどうなるのか記録しています。&lt;br&gt;
スマホのみのアプリを対象にしています。iPad も対象のアプリにする場合はそちらのスクリーンショットも必要になるので注意しましょう。&lt;/p&gt;
&lt;h2&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;li&gt;ストアでの見え方&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;基本的にはドキュメントに書いてあるので、その内容に従って用意することになります。&lt;/p&gt;
&lt;h3&gt;App Store Connect ヘルプ&lt;/h3&gt;
&lt;p&gt;App Store アイコン、App プレビューとスクリーンショットの概要&lt;br&gt;
&lt;a href=&quot;https://help.apple.com/app-store-connect/#/devd274dd925&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://help.apple.com/app-store-connect/#/devd274dd925&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;スクリーンショットの仕様&lt;br&gt;
&lt;a href=&quot;https://help.apple.com/app-store-connect/#/dev910472ff2&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://help.apple.com/app-store-connect/#/dev910472ff2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;App Store アイコンの追加&lt;br&gt;
&lt;a href=&quot;https://help.apple.com/app-store-connect/#/dev8b5cb82e2&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://help.apple.com/app-store-connect/#/dev8b5cb82e2&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;必要なデータ&lt;/h2&gt;
&lt;p&gt;必須データは以下です。JPG または PNG にします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;App Store アイコン&lt;/li&gt;
&lt;li&gt;6.5 インチのスクリーンショット&lt;/li&gt;
&lt;li&gt;5.5 インチのスクリーンショット&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下は任意です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;App プレビュー&lt;br&gt;
動画を登録できます。M4V、MP4、MOV のいずれかの形式で、500MB 以内のサイズにします。
スクリーンショットよりも先に表示され、必ず 1番目の要素になります。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;必要な画像の形式&lt;/h2&gt;
&lt;p&gt;それぞれの画像を以下の形式で用意する必要があります。&lt;/p&gt;
&lt;h3&gt;App Store アイコン&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;1024 x 1024 px &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.5 インチのスクリーンショット&lt;/h3&gt;
&lt;p&gt;以下のいずれかのサイズで画像を用意します。
該当するサイズのシミュレータでスクリーンショットを取得してそのままの画像でもいいです。
他にも、端末の枠を用意してその中にはめこんで、テキストを重ねて配置するという画像もよく見ますね。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1284 x 2778 px 縦向き&lt;/li&gt;
&lt;li&gt;2778 x 1284 px 横向き&lt;/li&gt;
&lt;li&gt;1242 x 2688 px 縦向き&lt;/li&gt;
&lt;li&gt;2688 x 1242 px 横向き&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5.5 インチのスクリーンショット&lt;/h3&gt;
&lt;p&gt;以下のいずれかのサイズで画像を用意します。
こちらも6.5 インチのスクリーンショットっと同様に画像を用意すればいいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1242 x 2208 px 縦向き&lt;/li&gt;
&lt;li&gt;2208 x 1242 px 横向き&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ストアでの見え方&lt;/h2&gt;
&lt;p&gt;画像の向きについては縦横どちらでも、任意のものを用意すればいいです。
縦向きの画像と横向きの画像でストアの見え方が異なるので、実際の表示を紹介します。&lt;/p&gt;
&lt;h3&gt;縦向きの画像を用意した場合&lt;/h3&gt;
&lt;p&gt;以下の画像のように縦の画像が 3つ並びます。
1つ 1つは大きくないので文字が小さくなってしまいます。&lt;/p&gt;
&lt;p&gt;3つ分の画像が見せられるので、いろんな機能を紹介したい場合は良いですね。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6eb5f0262522ba2dcdc64cb911a34c81/016a8/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 107.43243243243244%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAEo0lEQVQ4y6WUeUxUVxSHhxkGZB1RllKjSKlWEAVEYaaAVYkQcYvIsDUuOLghLlFQsW61okKbuIKx8n/ThaWCFiuCgKJYsC1GrNg21lBBZEcEg+brmRljEyN/NH3JL/fc8+777lnuuwqtbyjTgsKYNSucacEhYs9CFxqBr5+O0NnzWaBfTtTiaKIWxRETv4LZcxehC4skIiqa0I8iCRHNmbuQ8MjFfDA5CIW7vTMKheItshjGVmKhVJl9FiqxLU0+41yttkLhpByBU4AfU9atxSfZgMN7nniMGYPHeA9cnJ2xsbEZZsNh5Ki0IfTAfg7+dJP0+jp8kpIY5+aGp5cXY8eOw8XFVaC2qFQqE1yj0WBpqX4NUNuPNul1JkZg2MHPyKyv54vbDRJlMmp5aWNvj53IUTNSpEFtZSVzB5xGjTbZCqWkLuusnd416XWEGpUNrqEhzNixnenpaWgmTvhvKb4pjZU91i7OOE2diqO3N6NkfEenw8HDA1t3d9y0wbhMD8QlMBC34GAcPT2xlZK4im30GeUaFMTIiRPNQAeJMGD3LqIrKoi+cJ4FJcXMu3iRGZkH0e7ciaHmGoaySySJUmtvEHn8ON4bU0msrmJN+WXWVZSz4koFM/POorSUjjtY2uG/cwebqytJu1xG8vkS4gSsy8zEPy2N+NJS4osK0RcWmPwfZmcRsGULS3+4wKJvv2FJ/nfoJYjwL8+gVKuNQFv8d2WwRBbMl5cLC/JZLFDtoUz80tNJuPQj8cXnSJCPYi+Wovs8G78tm0mQiBPE/7ExAPk2PC8PC2OEjtYO+KSsx//AATwTEhgfF4fvJ7uZunUrvikpBB46hFdiIl7xCUzJ2IX/9u1MXrOGwKwsk//9uHgCMjIIlpOisrZGYWftiHb1anKuXiW3upqcqipOX7/OHEk3YOVKk51TWckp0enqq8yTzSbpYzkp/pNSu5wrV9hXVsbsfftQyFlVWEuX56Wm0tvewWB/P/19fQw9fUqiLNAZDPR2dvH3gwf8cf8+Qz09rM3KxjtGT093Ny8GnvHy+SDPBwZYf/yEuctGYISk1tLSSndXF92dnSbFSiTaVQaaHz2iQ+YdAugTYJI0a1L0Uprb2ujr7aWv/ynGZ+upnH+BkRJh+5MnlDY28tUvP9Pb1U383r1oDck8am2lSzbqFFiPgA1HjuCt1/Nr412KK38jv6KJpqa/2HD0qBloJcCoTRt52NLCnvJyNknnfm9uZtn+T9EmG4FttHd08fDxE2qamlh12AiMpbaunqprtVyuusEtsVdnZ8vtY2EGRmzYQFvrY0oaGvi6poau9nbi9uwhWGrYIhG2y/yxZNAjo+HwYSbFxAiwjjq5UGpv1tJw6xbJR7LMQLUAF2zbRn//M1MtePkSXrxgmdQqRGr7bGCQIZkPDg2BaP2xY/jIcblz7x53Je3bdxr5UxqWcuLEqwjVdgRERpBfUEBh0femsfjcOcKk8BNmziS/sJCioiIKZCwR/1yBuQdOJ/fMGU7n5nIqJ4e8s2eJXLbcXEO7EY7/73Z5U7bypxh/GVtnuUhHOaOUw2lhDP2VLN4ixTA+I/AfcDBkOM5lfn4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;縦画像を用意した場合の App Store 表示&quot;
        title=&quot;縦画像を用意した場合の App Store 表示&quot;
        src=&quot;/static/6eb5f0262522ba2dcdc64cb911a34c81/fcda8/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6.png&quot;
        srcset=&quot;/static/6eb5f0262522ba2dcdc64cb911a34c81/12f09/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6.png 148w,
/static/6eb5f0262522ba2dcdc64cb911a34c81/e4a3f/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6.png 295w,
/static/6eb5f0262522ba2dcdc64cb911a34c81/fcda8/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6.png 590w,
/static/6eb5f0262522ba2dcdc64cb911a34c81/efc66/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6.png 885w,
/static/6eb5f0262522ba2dcdc64cb911a34c81/c83ae/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6.png 1180w,
/static/6eb5f0262522ba2dcdc64cb911a34c81/016a8/%E3%82%B9%E3%83%88%E3%82%A2%E7%B8%A6.png 1576w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;横向きの画像を用意した場合&lt;/h3&gt;
&lt;p&gt;以下の画像のように横の画像が 1つ表示されます。
縦の画像を用意した場合よりも大きくなるので、文字がみやすいです。&lt;/p&gt;
&lt;p&gt;横向きの画像の中で、縦にしたスマホのスクショを載せるとかも問題ありません。&lt;/p&gt;
&lt;p&gt;一覧で見せられるのが1枚だけなので、表現できる画面数が少なくなりますね。
インパクトのある画像やテーマ・キャッチコピーで目を引きたいなどの作戦であれば、こちらが良いですね。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/05ec33469fdc9b08266da1213729102f/04784/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AA.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 87.16216216216216%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAAD00lEQVQ4y62Te0zVZRjHDwc5NzgXOIdzoxq6LiYLNSiMQq5xOUkckRSQEzBBJYmV45ZoA44I51gpCm6x0cW5ms62JskfBbraSkVoNiWkgXm4CtGymJf+aJ9ef+TK1R/+0R+ffZ/3ed7fd7/3fZ9HVlL2OpkpiXRUZND+SjptFZm8563gzc05lGSlUVqbQ/FWBy0N9XQe/Zj6Zi+pjmzyXUU0bXXSVLMNT10FZa6XSE5zIsvLd6HQGNAajARqDQQZzATqzGj0Qg0WtHoLhhC7qIeKeAGD0SahD7Gh05skgnShPB6xAtmLmWuQyWSojEtRmyKQKw1oVAo0GjUatQqlUiHV7werxYJsTXoShocd5Hh/wdE4xxPZh1i29FGioqJZteoZIiOX4+fnh7//IgICAlAoFMj9/SUDhVKJWmdCE6hDLpdjs9mRZTwfT/jThbR/Di2f/Mq6yi5U6iAsFhuhoRZJzWYrRmOo+CCM8PAlBAcbJUOLNYywmDweeiwag06H1WpD5khLxvxIEi+3XMbVPERszp77PqJcsEguI8B/YW2zCcOsrCxpYXwgElN4DJrgcAICzSi0NhRB1n+jtaLShaHSh6HU2cVeCwEiL5P5YbMKzXSkoLTF8lTZAMuLv+TJ0jNEbekjavM5ofcSLfIrS8+xrKBX0CPpipIzxJRfYnFKi3gUkzhyajzGiI2ku28SX3WFxBofCdVXJRJr/smPPFs5Se6OL6jbfZD8Lbuoa2pjw44e4mrniCo8Kf7QcucOEzBFrMfhvk585TBxlaPEV4+SVDMq4hGJ1VUjJNeO8FyVj+2eE1wdHmBifIwp3yDbvSeJq5kkpuhT8SjC8AXJMJfithu0HJ2g/sg029rHKfCOUX5oQsQTvPbuBKWt4yTW+tjVfpr5+Tlu/wG/357njdZeUnZOEVfa9behNTKPso5beI5N0XZiFvdH1yg7OMne47O0d/3E4Z6fqemcInXnOJ7Ob5g51c302fP89u1Zdnd8jaP+Gsllny0YZqQm8ODKXIoO3GBdwyjZjT5y3D42NI1J8doGHy7PGPnNPpyN47zzYR8zvd1c6erm5g+X8H7Qx9rd06SX3zUUjb0kppBX34fifVNsOjDLpta/EHGJoHj/HZ0h/+059h/pZ/47YXr6K24NXuCtw+fZuO86zupTC4aO9BRMi2Mp9nxPfoMoNvYLBu6hQOBy97O+/gK1e48zNHyRkfEphi5fpKrlGLnuQVbnerGYxQQ5nU6psdVBBkEIqsBgQch/sJDXBOmkMTPo9QKdNMdq7cIoSo191/D/wG638yfDz5h6VIsJ2QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;横画像を用意した場合の App Store 表示&quot;
        title=&quot;横画像を用意した場合の App Store 表示&quot;
        src=&quot;/static/05ec33469fdc9b08266da1213729102f/fcda8/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AA.png&quot;
        srcset=&quot;/static/05ec33469fdc9b08266da1213729102f/12f09/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AA.png 148w,
/static/05ec33469fdc9b08266da1213729102f/e4a3f/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AA.png 295w,
/static/05ec33469fdc9b08266da1213729102f/fcda8/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AA.png 590w,
/static/05ec33469fdc9b08266da1213729102f/efc66/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AA.png 885w,
/static/05ec33469fdc9b08266da1213729102f/04784/%E3%82%B9%E3%83%88%E3%82%A2%E6%A8%AA.png 1174w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;アプリをビルドしてからも、ストアで公開するまではいくつか必要な設定があり、今回紹介したスクリーンショットもそのうちの 1つです。&lt;/p&gt;
&lt;p&gt;ストアでの見え方は、ユーザーに見つけてもらい興味を持ってもらうための重要な表現です。アプリのインプレッション数やインストール数に大きく影響しますので、しっかりルールを学んで効果的な画像を用意できるといいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native Web で React Navigation を使う場合の URL の設定方法]]></title><description><![CDATA[React Native Web を使って、React Native で実装したアプリケーションを Web で発信します。 その際に React Navigation を使って SPA のナビゲーションを用意した場合の、URL 統合のやり方についてのメモです。 昔の React…]]></description><link>https://honmushi.com/2021/10/05/react-navigation-on-web/</link><guid isPermaLink="false">https://honmushi.com/2021/10/05/react-navigation-on-web/</guid><pubDate>Tue, 05 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native Web を使って、React Native で実装したアプリケーションを Web で発信します。&lt;/p&gt;
&lt;p&gt;その際に React Navigation を使って SPA のナビゲーションを用意した場合の、URL 統合のやり方についてのメモです。&lt;/p&gt;
&lt;p&gt;昔の React Navigation バージョンでは、Web でも自動的にページ遷移時の URL 書き換えが行われていました。
しかし、いつからか設定が必要になった様子です。&lt;/p&gt;
&lt;p&gt;ナビゲーションについて React Navigation を利用している場合に、画面遷移時の URL 統合と URL でのページアクセスができるようにするための設定方法のメモを以下に記載しています。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;現象&lt;/li&gt;
&lt;li&gt;ドキュメント&lt;/li&gt;
&lt;li&gt;NavigationContainer に linking Props を渡す&lt;/li&gt;
&lt;li&gt;route と URL path の対応を設定&lt;/li&gt;
&lt;li&gt;route がネストしている場合&lt;/li&gt;
&lt;li&gt;Netlify で発信する際、redirect rule の設定が必要&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;現象&lt;/h2&gt;
&lt;p&gt;React Navigation を最新にアップデートしたところ Web で開いた際の URL がずっとルートディレクトリのままになりました。
URL を入力して直接各ページにアクセスしてもかならずトップページが表示されてしまう状態になっていました。&lt;/p&gt;
&lt;p&gt;もちろん SPA なので、トップページから各要素をクリックすればコンテンツは切り替わるので機能は利用できます。
ただ、画面が切り替わってもURLが変わりません。URL が統合されていないとブラウザのブックマークとか、リンク貼る時とかに困りますよね。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;以下のドキュメントの内容に従って、URL path と route の対応の設定する必要があります。
&lt;a href=&quot;https://reactnavigation.org/docs/configuring-links/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://reactnavigation.org/docs/configuring-links/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;NavigationContainer に linking Props を渡す&lt;/h2&gt;
&lt;p&gt;まず、NavigationContainer に &lt;code&gt;linking&lt;/code&gt; という props を追加する必要があります。&lt;/p&gt;
&lt;p&gt;ドキュメントでは以下のような説明になっており、prefixes はURLスキーマなどの設定で、config の方が URL path の設定になります。
今回は URL と route の対応づけを行うので &lt;code&gt;config&lt;/code&gt; の設定を追加する必要がありました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; linking &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  prefixes&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;/* your linking prefixes */&lt;/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 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;/* configuration for matching screens with 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;
&lt;span class=&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 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;NavigationContainer linking&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;linking&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 comment&quot;&gt;/* content */&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;NavigationContainer&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;route と URL path の対応を設定&lt;/h2&gt;
&lt;p&gt;上記のlinking の config に以下のようなオブジェクトを渡すのが基本になります。&lt;/p&gt;
&lt;p&gt;/feed の URL が Chat スクリーンに対応します。/user の URL は Profile スクリーンと対応します。&lt;/p&gt;
&lt;p&gt;こうすると、Profile スクリーンに遷移すると URL が /user になりますし、URL で直接 /user にアクセスすると Profile スクリーンが開きます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; linking &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  prefixes&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;/* your linking prefixes */&lt;/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 operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    screens&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      Chat&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;feed&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      Profile&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;user&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;route がネストしている場合&lt;/h2&gt;
&lt;p&gt;単純な rouet の構造であれば上記で問題ないのですが、ナビゲーションがネストしている場合はもう少し複雑な設定が必要になります。&lt;/p&gt;
&lt;p&gt;私のアプリでは Tab ナビゲーションの中に Stack ナビゲーションがあって、その中に Drawer ナビゲーションがあるというネストした形でした。&lt;br&gt;
結論、以下の形になりました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; linking &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    config&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      screens&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        ReactNative&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          screens&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            ReactNativeDrawer&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
              screens&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                ReactNativeHome&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;
            Icons&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Icons&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            FlexBox&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;FlexBox&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            Shadow&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Shadow&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;
        Web&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          screens&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            WebHome&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;WebHome&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            SampleImage&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SampleImage&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 class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ちょっと解説すると、一番親として Tab ナビゲーションがあります。 以下の部分です。ReactNative と Web の route があります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javescript&quot;&gt;&lt;pre class=&quot;language-javescript&quot;&gt;&lt;code class=&quot;language-javescript&quot;&gt;config: {
  screens: {
    ReactNative: {
    },
    Web: {
    },
  },
},&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;で、その ReactNative は Stack ナビゲーションです。以下の部分です。&lt;br&gt;
ReactNativeDrawer ・ Icons ・ FlexBox ・ Shadow の route があります。
Icons は /Icons の path が割り当てられています。FlexBox と Shadow も同様です。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javescript&quot;&gt;&lt;pre class=&quot;language-javescript&quot;&gt;&lt;code class=&quot;language-javescript&quot;&gt;ReactNative: {
  screens: {
    ReactNativeDrawer: {
    },
    Icons: &amp;quot;Icons&amp;quot;,
    FlexBox: &amp;quot;FlexBox&amp;quot;,
    Shadow: &amp;quot;Shadow&amp;quot;,
  },
},&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この中の ReactNativeDrawer も要素は 1つですが Drawer ナビゲーションを使ったネストになっています。ReactNativeHome という route があります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javescript&quot;&gt;&lt;pre class=&quot;language-javescript&quot;&gt;&lt;code class=&quot;language-javescript&quot;&gt;ReactNativeDrawer: {
  screens: {
    ReactNativeHome: &amp;quot;&amp;quot;,
  },
},&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これでそれぞれの route に対して、path が設定されます。画面を遷移すると URL も更新されますし、直接 URL でアクセスすると該当の route が開くようになります。&lt;/p&gt;
&lt;p&gt;意図通りに動かない時は、ネストの構造や指定の仕方が間違っている場合があります。親の要素から順番に確認していきましょう。&lt;/p&gt;
&lt;h3&gt;Home 画面の path&lt;/h3&gt;
&lt;p&gt;今回のアプリでは ReactNativeHome が Home 画面ですので URLを &lt;code&gt;/&lt;/code&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;    ReactNativeHome: &amp;quot;&amp;quot;,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Netlify で発信する際、redirect rule の設定が必要&lt;/h2&gt;
&lt;p&gt;今回作ったシステムが、React Navigation を利用したSPAなので、リダイレクト設定が必要になります。&lt;/p&gt;
&lt;p&gt;ローカルで動かしている時は正常にURLが解決していたのですが、Netlify にデプロイしたところうまく処理されなくなりました。
ページがあるはずのURLでアクセスすると 404 エラーになる状態でした。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;netlify.toml&lt;/code&gt; をプロジェクトのルートに設置することで Netlify の発信の設定ができるので、ここに以下の内容を追加することで解決できました。&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;[[redirects]]
  from = &amp;quot;/*&amp;quot;
  to = &amp;quot;/index.html&amp;quot;
  status = 200&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;以前は設定なしでも、URLが解決されていたのですが React Navigation のバージョンアップにより設定が必要になっていました。
URL が切り替わらない SPA だと、ブラウザでのブックマークとかで困りますし、アクセスの度にホームから遷移しないといけないのは少し不便です。&lt;/p&gt;
&lt;p&gt;ちょっと複雑ですが対応しておけば、あとは React Navigation が制御してくれるので便利です。&lt;/p&gt;
&lt;p&gt;GET パラメータの制御などもここで行うことになります。ドキュメントに書いてあるので、必要な場合は一緒に確認しておきましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native に関する便利ツールを作成した。]]></title><description><![CDATA[React Native Web を利用して、Web上で使える React Native の便利ツールを作りました。 React Native U-tools 概要 ツールについて アイコン探せる @expo/vector-icons preview…]]></description><link>https://honmushi.com/2021/10/04/react-native-u-tools/</link><guid isPermaLink="false">https://honmushi.com/2021/10/04/react-native-u-tools/</guid><pubDate>Mon, 04 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native Web を利用して、Web上で使える React Native の便利ツールを作りました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://honmushi-u-tools.netlify.app&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React Native U-tools&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ツールについて&lt;/li&gt;
&lt;li&gt;アイコン探せる &lt;code&gt;@expo/vector-icons preview&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;影のスタイルを試せる &lt;code&gt;React Native Shadow Simulato&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;FlexBox のスタイルを試せる &lt;code&gt;React Native FlexBox Style Creator&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ツールについて&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/kakukakug/u-tools&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;GitHub リポジトリ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gatsby とかでWeb用に作ってもよかったのですが、React Native Web を試してみたいと思い、React Native を使って Webサイトを実装しています。
ReactNative のStyle のプレビューなどを作ってみました。&lt;/p&gt;
&lt;p&gt;ReactNative で書いたものが html に変換されているので、アプリと全く同じ表現にはなっていないはずです。
ある程度は再現されていることを期待しています。&lt;/p&gt;
&lt;p&gt;Expo を利用して、Netlify 上でビルドし発信しています。&lt;/p&gt;
&lt;h2&gt;アイコン探せる &lt;code&gt;@expo/vector-icons preview&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://honmushi-u-tools.netlify.app/Icons/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://honmushi-u-tools.netlify.app/Icons/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@expo/vector-icons&lt;/code&gt; のアイコンを探せます。&lt;/p&gt;
&lt;p&gt;アイコンセットのファミリーを選択して表示でき、アイコン名で絞り込みができます。 コピーできるようにコードも表示しています。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@expo/vector-icons&lt;/code&gt; は react-native-vector-icons を使っています。
基本的にはここで見つけたアイコンは react-native-vector-icons で同じアイコンを利用できます。&lt;/p&gt;
&lt;h2&gt;影のスタイルを試せる &lt;code&gt;React Native Shadow Simulato&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://honmushi-u-tools.netlify.app/Shadow/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://honmushi-u-tools.netlify.app/Shadow/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;React Native での 影のスタイルをいろいろ試すことができます。
iOS と Android で指定する属性が異なるので、その部分が簡単に確認できたらいいなと思い作成しました。&lt;/p&gt;
&lt;p&gt;Android の&lt;code&gt;elevation&lt;/code&gt; による指定については、CSS においてどのように変換されるのかわからなかったので未実装です。React Native Web では無視されていた様子でした。
それっぽく変換してくれるライブラリなどは見つかるのですが、正しいのかわからなかったので一旦諦めています。&lt;/p&gt;
&lt;p&gt;iOS のものについてもあくまで React Native Web で Web の CSS に変換しているものです。
アプリでの表示と完全に一致するわけではないなのでご注意ください。&lt;/p&gt;
&lt;h2&gt;FlexBox のスタイルを試せる &lt;code&gt;React Native FlexBox Style Creator&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://honmushi-u-tools.netlify.app/FlexBox/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://honmushi-u-tools.netlify.app/FlexBox/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;React Native での FlexBox のスタイルをいろいろ試すことができます。 React Native Webを用いることで、アプリでFlexBoxを指定した時の挙動を再現してます。&lt;/p&gt;
&lt;p&gt;Webとの差異や、flex関連の属性の挙動を試すことができます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;React Native で Web ページも作れるのは簡単で便利ですね。&lt;/p&gt;
&lt;p&gt;今回作ったものはアプリ開発時に使おうと思っているので、実際の端末で使うことは想定していません。開発時にPCのブラウザで参照する使い方を想定しています。&lt;/p&gt;
&lt;p&gt;できればレスポンシブ対応とかできたらいいんですが、その辺の Style が React Native Web だと難しそうだったので、見送りとしています。&lt;/p&gt;
&lt;p&gt;他にも便利そうなものを思いついたら追加していきます。&lt;/p&gt;
&lt;p&gt;React Native Web 関連の新たな仕組みとかできたら、そちらもキャッチアップしていければと考えています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native で要素に影をつける]]></title><description><![CDATA[React Native でアプリを作る際に、要素に影をつける時の指定方法とその属性の解説です。 StyleSheet を使って簡単に影を表現できますが、OS…]]></description><link>https://honmushi.com/2021/09/29/react-native-shadow/</link><guid isPermaLink="false">https://honmushi.com/2021/09/29/react-native-shadow/</guid><pubDate>Wed, 29 Sep 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native でアプリを作る際に、要素に影をつける時の指定方法とその属性の解説です。&lt;/p&gt;
&lt;p&gt;StyleSheet を使って簡単に影を表現できますが、OS で実装が異なるのでその部分についてのメモです。
とはいえ簡単に実装できるので、一度やってみたら簡単に覚えられるはずです。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;公式のドキュメントにも詳細書いてあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnative.dev/docs/shadow-props&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://reactnative.dev/docs/shadow-props&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OS ごとに影の Style の指定方法が異なる部分は要注意です。
異なる OS の指定については無視されるので、OS を指定しての Style 分岐は必要なく両方指定しておけば問題ありません。&lt;/p&gt;
&lt;h2&gt;iOS の場合&lt;/h2&gt;
&lt;p&gt;要素に渡せる Style Props として以下のものが用意されています。&lt;/p&gt;
&lt;h3&gt;shadowColor&lt;/h3&gt;
&lt;p&gt;影の色を指定できます。web で指定する時の &lt;code&gt;box-shadow&lt;/code&gt; の &lt;code&gt;color&lt;/code&gt; プロパティにあたるものです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; styles &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; StyleSheet&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;
  button&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    shadowColor&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;#333&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;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;shadowOffset&lt;/h3&gt;
&lt;p&gt;影のオフセットを指定できます。
影の位置みたいなものですが、どの方向に伸びるのかという指定になります。
width が横方向、height が縦方向です。マイナスの値を指定できます。&lt;/p&gt;
&lt;p&gt;web で指定する時の &lt;code&gt;box-shadow&lt;/code&gt; の &lt;code&gt;offset-x, offset-y&lt;/code&gt; プロパティにあたるものです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; styles &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; StyleSheet&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;
  button&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    shadowOffset&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; width&lt;span class=&quot;token operator&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; height&lt;span class=&quot;token operator&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;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;shadowOpacity&lt;/h3&gt;
&lt;p&gt;影の不透明度を指定できます。
shadowColor にて不透明度を指定するのと同じです。両方で指定した場合掛け合わせた数値が表示に反映されます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; styles &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; StyleSheet&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;
  button&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    shadowOpacity&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 punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;shadowRadius&lt;/h3&gt;
&lt;p&gt;影のぼかしの大きさを指定できます。
0 を指定した場合はぼかしのないくっきりした影、大きい値を指定するほどぼかしが強くなります。&lt;/p&gt;
&lt;p&gt;web で指定する時の &lt;code&gt;box-shadow&lt;/code&gt; の &lt;code&gt;blur-radius&lt;/code&gt; プロパティにあたるものです。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; styles &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; StyleSheet&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;
  button&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    shadowRadius&lt;span class=&quot;token operator&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;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Android の場合&lt;/h2&gt;
&lt;p&gt;Android の場合は&lt;code&gt;elevation&lt;/code&gt; を使います。
web でいう &lt;code&gt;z-index&lt;/code&gt; も同時に指定されます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; styles &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; StyleSheet&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;
  button&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    elevation&lt;span class=&quot;token operator&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;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;React Native での影の表現を試せる Web ページを自作しました&lt;/h2&gt;
&lt;p&gt;上記実際にアプリ作って試せばすぐわかるのですが、簡単に影のStyleを調べたい時があったので、Web 上で React Native の影の表現を試せるページを自作しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://honmushi-u-tools.netlify.app/Shadow/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React Native U-tools / React Native Shadow Simulator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;React Native Web で作っているので、React Native のコードが Web の表現に置き換えられて表示されてます。
完全にアプリのものと一致するわけではないですが、影に関するパラメータの挙動確認に役立っています。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Web の CSS と似た形での指定になるのでわかりやすいです。この辺が React Native のいいところですね。&lt;/p&gt;
&lt;p&gt;OS によって変えないといけない部分は少し厄介ですが、そこさえ理解しておけばいろんな表現ができます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[@testing-library/jest-native を使って、React Native のテストをもっと便利にする]]></title><description><![CDATA[以前の記事で、@testing-library/react-native を使って、テストを実装する方法を紹介しました。 @testing-library/react-native でスナップショットテスト この情報に加えて、@testing-library/jest…]]></description><link>https://honmushi.com/2021/09/08/react-native-test-matcher/</link><guid isPermaLink="false">https://honmushi.com/2021/09/08/react-native-test-matcher/</guid><pubDate>Wed, 08 Sep 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前の記事で、&lt;code&gt;@testing-library/react-native&lt;/code&gt; を使って、テストを実装する方法を紹介しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2021/08/28/testing-library/&quot;&gt;@testing-library/react-native でスナップショットテスト&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;この情報に加えて、&lt;code&gt;@testing-library/jest-native&lt;/code&gt; を追加で設定すると、よりテストを便利にかけるようになります。&lt;/p&gt;
&lt;p&gt;以下、上記の内容などを参考に &lt;code&gt;@testing-library/react-native&lt;/code&gt; を使えるようにした上でご確認ください。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/testing-library/jest-native&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/testing-library/jest-native&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;いつも通りです。npm もしくは yarn を使ってインストールしましょう。&lt;br&gt;
テストで使うものなので、dev 環境へのインストールです。&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-dev @testing-library/jest-native&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;設定&lt;/h2&gt;
&lt;p&gt;パッケージをインポートする必要があります。&lt;br&gt;
簡単なやり方としては、&lt;code&gt;jest.config.json&lt;/code&gt; に以下を追加することで対応できます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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;
  setupFilesAfterEnv&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;@testing-library/jest-native/extend-expect&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで React Native のテストをする上で、便利な matcher を利用できるようになります。&lt;/p&gt;
&lt;h2&gt;Matcher の紹介&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;toBeEmpty&lt;br&gt;
要素が空の場合、 true になります。&lt;/li&gt;
&lt;li&gt;toContainElement&lt;br&gt;
要素の子やさらにその子とほっていき、渡されている要素が含まれるかをチェックします。&lt;/li&gt;
&lt;li&gt;toHaveProp(string,value)&lt;br&gt;
要素が特定の prop を受け取っているかをチェックできます。
prop のキーとその value をチェックできます。&lt;/li&gt;
&lt;li&gt;toHaveTextContent(string)&lt;br&gt;
要素が特定の text を要素に持っているかをチェックできます。&lt;/li&gt;
&lt;li&gt;toHaveStyle(object)&lt;br&gt;
要素が特定の style オブジェクトを受け取っているかをチェックできます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;他にもいくつかありますが、ざっと便利なのはこんな感じでしょうか。&lt;/p&gt;
&lt;h2&gt;注意点&lt;/h2&gt;
&lt;p&gt;ドキュメントに書いてありますが、ネイティブにブリッジするUI要素のみで作用するとのことです。
拡張されているUIコンポーネントライブラリとかだと、上手くヒットしないことがあります。&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;Keep in mind that these queries will only work on UI elements that bridge to native.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;その他ざっくりとしたテストのメモ&lt;/h2&gt;
&lt;p&gt;上記設定することで一通りコンポーネントUIの簡単な描写のテストはできるようになります。&lt;/p&gt;
&lt;p&gt;たとえばいくつか紹介します。&lt;/p&gt;
&lt;h3&gt;要素がある・要素がない&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&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; component&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByDisplayValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;mockConsoleText&lt;span class=&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;expect&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;&lt;span class=&quot;token function&quot;&gt;toBeTruthy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&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; noOutput &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; component&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;queryByDisplayValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;mockConsoleText&lt;span class=&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;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;noOutput&lt;span class=&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;toBeNull&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここでは要素を &lt;code&gt;getByDisplayValue&lt;/code&gt; で探しています。TextInput の入力されている文字列で検索する時に使います。&lt;br&gt;
&lt;code&gt;getByDisplayValue&lt;/code&gt; は存在すればその要素を取得できますが、ない場合は見つからないというエラーになってしまいます。&lt;/p&gt;
&lt;p&gt;ですので、要素がないことをテストする場合は &lt;code&gt;queryByDisplayValue&lt;/code&gt; を使います。&lt;br&gt;
存在しない場合は &lt;code&gt;null&lt;/code&gt; になるのでそれをチェックすれば検証が可能です。&lt;/p&gt;
&lt;p&gt;getBy を使う場合は存在しないとエラー、queryBy を使う場合は存在しないと null とか 空配列になります。
適した用途で使い分けましょう。&lt;/p&gt;
&lt;h3&gt;特定のstyle が効いている&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; closeButton &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; component&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByText&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;close&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;
    fireEvent&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;press&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;closeButton&lt;span class=&quot;token punctuation&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; touchable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; component&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByTestId&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;fontFamilyItem&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;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;touchable&lt;span class=&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;toHaveStyle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; backgroundColor&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;primary &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記でも紹介している &lt;code&gt;toHaveStyle&lt;/code&gt; を使って、要素の背景色が意図通りになっているかチェックします。
ボタンをタップするイベントを操作した後で、表示がアクティブなものになっているかのチェックなどに使えますね。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;React Native のテストがより便利になるパッケージを紹介しました。
&lt;code&gt;@testing-library/react-native&lt;/code&gt; では jest を使っているので、さまざまな便利な使い方ができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://jestjs.io/ja/docs/getting-started&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://jestjs.io/ja/docs/getting-started&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一度 jest のドキュメントを見てAPIや使い方を学んでおくと、test の組み立て方やチェックすべきことの設計がやりやすくなります。&lt;/p&gt;
&lt;p&gt;テスト書いておくと、リファクタリングにももちろんですし、さまざまな恩恵が受けられます。
テストしやすいように実装することを心がけることで、より綺麗なコードになるという考えもあるので、個人的にはテストは絶対用意したい派です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native ~JavaScriptによるiOS/Androidアプリ開発の実践 がReact Nativeの勉強におすすめです]]></title><description><![CDATA[React Native の開発についてまとまった知識が得られる本です。 サンプルのソースコードもたくさんのっていますし、ストアやWeb…]]></description><link>https://honmushi.com/2021/09/06/react-native-book/</link><guid isPermaLink="false">https://honmushi.com/2021/09/06/react-native-book/</guid><pubDate>Mon, 06 Sep 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native の開発についてまとまった知識が得られる本です。&lt;/p&gt;
&lt;p&gt;サンプルのソースコードもたくさんのっていますし、ストアやWebページのスクリーンショットなども丁寧に掲載されているので初心者でもわかりやすいです。&lt;/p&gt;
&lt;p&gt;実際に参考のアプリを確認しながら、同じようなものを実装していくスタイルで進んでいくのでやっていることも明確にイメージできてよかったです。&lt;/p&gt;
&lt;p&gt;TypeScript ・React Native の基本的な文法にも軽く触れていますし、言語の仕様やストアの設定の方法、おすすめのパッケージの導入・実装方法なども幅広く書かれています。
ですので、この1冊があれば、基本的な構築・ビルド・ストアでの公開など一通りできるようになります。&lt;/p&gt;
&lt;p&gt;たくさん書いてある分ページ数も700ページ近くと、かなり厚い本です。
大きいだけあって内容も充実していますし、幅広くかつ必要なところはしっかり堀り下げられていますので、とてもわかりやすかったです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4297113910/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4297113910&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=37cc50870995d1069889efd5e9dd8105&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4297113910&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4297113910/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4297113910&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=945a44e9c8984e96fbcced0aa4d55adf&quot;&gt;React Native ~JavaScriptによるiOS/Androidアプリ開発の実践&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;以下目次から各章のタイトルを抜粋したものです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;React/React Native の概要とその背景&lt;/li&gt;
&lt;li&gt;TypeScriptとECMAScript2015 の基本を押さえる&lt;/li&gt;
&lt;li&gt;開発環境の構築&lt;/li&gt;
&lt;li&gt;React Native の基本&lt;/li&gt;
&lt;li&gt;作成するアプリケーションの仕様策定&lt;/li&gt;
&lt;li&gt;テストによる設計の質の向上&lt;/li&gt;
&lt;li&gt;Navigation の概要と実装&lt;/li&gt;
&lt;li&gt;Atomic Design とコンポーネントの実装&lt;/li&gt;
&lt;li&gt;データフローの設計および実装&lt;/li&gt;
&lt;li&gt;Firebase を使ったバックエンド連携&lt;/li&gt;
&lt;li&gt;E2Eを実装する&lt;/li&gt;
&lt;li&gt;アプリストアへの公開&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;前提&lt;/h2&gt;
&lt;p&gt;この本では前提として以下は学んでいるものとして書かれていますので注意しましょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もちろんわからないことがあっても都度調べながらでも問題ありません。
ただ、Gitとかに全く触ったことがないという場合は少し難しいです。&lt;/p&gt;
&lt;p&gt;あとはiOSアプリの開発もあるのでmacOS環境が想定されています。
WindowsでもAndroidアプリのみであれば開発できるので、その部分だけ注意すれば問題ないです。&lt;/p&gt;
&lt;h2&gt;環境構築&lt;/h2&gt;
&lt;p&gt;環境構築についても触れられています。基本的に React Native の環境構築は簡単なので、ドキュメント見るだけでも問題ないです。
この本では丁寧に説明されているので初心者でも安心です。&lt;/p&gt;
&lt;p&gt;他にも JavaScript の基本的な構文や、TypeScript の書き方なども説明があります。全般 TypeScript を用いた形式になっているのも嬉しいところです。&lt;/p&gt;
&lt;h2&gt;品質&lt;/h2&gt;
&lt;p&gt;テストの設計方や実装方法、などについても書籍では触れられており、実際に一通りのテストの実装を行います。
スナップショットテストもあれば、EtoEテストもありますし、CIを用いた自動テストも書かれています。
構築に関することに止まらず品質に関する知識や技術も学ぶことができます。&lt;/p&gt;
&lt;p&gt;実際の現場でも必要になるような知識がしっかり書かれているので、この辺りも飛ばさずにしっかり学んで欲しいです。&lt;/p&gt;
&lt;h2&gt;コンポーネント設計&lt;/h2&gt;
&lt;p&gt;コンポーネント設計としてよく取り入れられる「Atomic Design」についても実際のアプリの設計をしながら学ぶことができます。&lt;/p&gt;
&lt;p&gt;もちろん常に Atomic Design を使うのが最善というわけではありません。
大まかな概念とか基本的な構造の1パターンとして把握して置けると、他の設計パターンやルールの把握も素早くできるようになります。&lt;/p&gt;
&lt;p&gt;印象としては、Atomic Desgin を独自にカスタマイズした設計構造を取り入れている現場が多いです。基本的な語句については理解しておくといいです。&lt;/p&gt;
&lt;h2&gt;データの扱い&lt;/h2&gt;
&lt;p&gt;Redux について解説している章もあり、Navigation なども含めて、React Native を使う上で一通り必要な知識は得ることができます。
Redux の概念は難しいので初心者は挫折しがちなイメージです。理解できなかったらとりあえず先に進めるのでもいいです。
実装終わってから振り返って見た方が早く理解できることもあります。&lt;/p&gt;
&lt;p&gt;Firebase を使ったバックエンド構築も簡単にですが書かれていますので、通信が必要な難しいアプリについての応用も方針ぐらいはわかります。&lt;/p&gt;
&lt;h2&gt;ストアでの公開&lt;/h2&gt;
&lt;p&gt;アプリ構築後のビルド、ストアへの公開もしっかりサポートされています。
終盤になってちょっと早足になっていますが、各ストアのスクリーンショットなども掲載されています。初めて触る方でもなんとかリリースまで進められるはずです。&lt;/p&gt;
&lt;p&gt;各ストアのUIは頻繁に変わるので、古くなってしまう可能性もあります。
ただ、大きな概念としては参考になります。&lt;/p&gt;
&lt;p&gt;各ストアのドキュメントも参考にすることで、ストアでの申請・リリースを正しく進められます。&lt;/p&gt;
&lt;h2&gt;ちょっと足りないところ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;デバッグツール
React Native のデバッグ方法とかはもうちょっと詳しく書いてあるとよかったです。
基本的にエラーがコンソールに表示されますし、console.log でデバッグもできるので最初のうちはそれほど必要ないですが。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コンポーネントの描写の詳細や、Redux Store の状態など調べたいと思った時に各デバッグツールの詳しい使い方を知っていると心強いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React について
React の描写フローとか、概念についての解説が少ないないです。
詳しくわからなくても全然実装できるのですが、state の取扱とかで間違えた書き方をすると、思わぬ動作をしたりエラーになったりすることがあります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;その辺もサポートされているといいですが、流石にややこしいのでこの本に書き切るのは難しかったですかね。
公式のドキュメントで学ぶことができるので、わからない時にはそちらを確認するようにしましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;React Native 関連の知識が幅広く書いてあるので、これから始めようという人にもおすすめですし、すでに始めている人でも得られる知識や技術が多いです。&lt;/p&gt;
&lt;p&gt;本がとても厚いので途中で投げ出さないようにモチベーションを維持するのが重要です。なにか作りたいものを決めて取り組むとか、目標の日付を決めて取り組むとかしてしっかり読了して欲しいです。&lt;/p&gt;
&lt;p&gt;読み切ることとしっかり内容を身につけることができれば、かなり React Native での開発は身についていると言えます。それくらい幅広くカバーされてます。&lt;/p&gt;
&lt;p&gt;700ページなので、本で買うよりも電子書籍で買うのがおすすめです。
ソースコードのコピーとかもやりやすいですし、後から知りたい情報を読み返す時に検索ができるので便利でした。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native でアイコン画像の実装とアイコンの探し方]]></title><description><![CDATA[React Native でアイコンを実装するやり方です。 React Native Vector Icons で簡単にアイコンやアイコン付きのボタンが実装できます。
特別難しいことはありませんがやり方を紹介します。 Expo を使っている場合は @expo/vector…]]></description><link>https://honmushi.com/2021/09/01/react-native-icon/</link><guid isPermaLink="false">https://honmushi.com/2021/09/01/react-native-icon/</guid><pubDate>Wed, 01 Sep 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native でアイコンを実装するやり方です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;React Native Vector Icons&lt;/code&gt; で簡単にアイコンやアイコン付きのボタンが実装できます。
特別難しいことはありませんがやり方を紹介します。&lt;/p&gt;
&lt;p&gt;Expo を使っている場合は &lt;code&gt;@expo/vector-icons&lt;/code&gt; を使うことができます。&lt;/p&gt;
&lt;p&gt;ついでに目的のアイコンの探しかたも書いておきます。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;React Native Vector Icons&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@expo/vector-icons&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;アイコンの探し方&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;code&gt;React Native Vector Icons&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;React Native Vector Icons&lt;/code&gt; を使う場合の実装を紹介です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/oblador/react-native-vector-icons&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/oblador/react-native-vector-icons&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;インストール&lt;/h3&gt;
&lt;p&gt;いつも通り npm もしくは yarn でのインストールです。&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 react-native-vector-icons&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;アイコンを実装&lt;/h3&gt;
&lt;p&gt;使えるアイコンセットには種類がいくつかあり、その中から必要なものを選択します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AntDesign by AntFinance (297 icons)&lt;/li&gt;
&lt;li&gt;Entypo by Daniel Bruce (411 icons)&lt;/li&gt;
&lt;li&gt;EvilIcons by Alexander Madyankin &amp;#x26; Roman Shamin (v1.10.1, 70 icons)&lt;/li&gt;
&lt;li&gt;Feather by Cole Bemis &amp;#x26; Contributors (v4.28.0, 285 icons)&lt;/li&gt;
&lt;li&gt;FontAwesome by Dave Gandy (v4.7.0, 675 icons)&lt;/li&gt;
&lt;li&gt;FontAwesome 5 by Fonticons, Inc. (v5.13.0, 1588 (free) 7842 (pro) icons)&lt;/li&gt;
&lt;li&gt;Fontisto by Kenan Gündoğan (v3.0.4, 615 icons)&lt;/li&gt;
&lt;li&gt;Foundation by ZURB, Inc. (v3.0, 283 icons)&lt;/li&gt;
&lt;li&gt;Ionicons by Iconic Framework (v5.0.1, 1227 icons)&lt;/li&gt;
&lt;li&gt;MaterialIcons by Google, Inc. (v4.0.0, 1547 icons)&lt;/li&gt;
&lt;li&gt;MaterialCommunityIcons by MaterialDesignIcons.com (v5.3.45, 5346 icons)&lt;/li&gt;
&lt;li&gt;Octicons by Github, Inc. (v8.4.1, 184 icons)&lt;/li&gt;
&lt;li&gt;Zocial by Sam Collins (v1.0, 100 icons)&lt;/li&gt;
&lt;li&gt;SimpleLineIcons by Sabbir &amp;#x26; Contributors (v2.4.1, 189 icons)&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;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Icon &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;react-native-vector-icons/MaterialIcons&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 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;Icon size&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;26&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;&quot;info&quot;&lt;/span&gt; color&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;#666&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;Icon&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Button
     name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;info&quot;&lt;/span&gt;
     backgroundColor&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;#888&quot;&lt;/span&gt;
     onPress&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;=&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&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;
     info
   &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Icon&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Button&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;&lt;code&gt;@expo/vector-icons&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Expo を使っている場合はこちらで実装します。Expo のパッケージに含まれています。
使い方はほとんど同じですね。内部的には &lt;code&gt;React Native Vector Icons&lt;/code&gt; を使っているようで、バージョンによってアイコンの有無に差がありますので注意しましょう。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; Ionicons &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;@expo/vector-icons&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;~&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;Ionicons name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;md-checkmark-circle&quot;&lt;/span&gt; size&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;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; color&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;green&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 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;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;アイコンの探し方&lt;/h2&gt;
&lt;h3&gt;アイコンを探せるWebページを自作した&lt;/h3&gt;
&lt;p&gt;目的のアイコンを探すときはいつも公式のページを使っていましたが、ちょっと探しにくかったので自分でアイコン探せる web ページを作成しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://honmushi-u-tools.netlify.app/Icons/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React Native U-tools / @expo/vector-icons preview&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;react-native-web で Web ページとしてみれるようにしているので、アプリでの表示と異なる部分があります。
アイコン探す分には十分なので私はこれを使ってます。&lt;/p&gt;
&lt;p&gt;パッケージのバージョンなどによって、使えないアイコンとかがあるのでそこは注意してください。&lt;/p&gt;
&lt;h3&gt;公式のアイコンを探せるページ&lt;/h3&gt;
&lt;p&gt;以下は公式で用意されている一覧のページです。&lt;/p&gt;
&lt;p&gt;アイコンセットを横断して探すことができて便利です。もちろんそれぞれのアイコンセットでフィルタリングもできます。
それぞれのアイコンセットのページで探すことも可能ですが、UIがバラバラで使いにくいものもあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://icons.expo.fyi/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://icons.expo.fyi/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://oblador.github.io/react-native-vector-icons/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://oblador.github.io/react-native-vector-icons/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;アプリのUIでアイコンを使いたい場面は多いです。
&lt;code&gt;React Native Vector Icons&lt;/code&gt;・&lt;code&gt;Expo&lt;/code&gt; を使うことで良質なアイコンを簡単に実装できるので覚えておくと良いです。&lt;/p&gt;
&lt;p&gt;種類がたくさんあるのでアイコン画像を探すのは結構大変です。
お気に入りのアイコンセットを記録しておいて、思いついた時に使えるようにストックしておけるとデザインの幅が増えるのでおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native アプリでダークモードを実装]]></title><description><![CDATA[React Native アプリでのダークモード実装の例です。 端末で設定しているテーマを取得して、それに応じてアプリの色設定も反映されるようにします。 React Native で用意されているAPI…]]></description><link>https://honmushi.com/2021/08/31/dark-mode-theme/</link><guid isPermaLink="false">https://honmushi.com/2021/08/31/dark-mode-theme/</guid><pubDate>Tue, 31 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native アプリでのダークモード実装の例です。&lt;/p&gt;
&lt;p&gt;端末で設定しているテーマを取得して、それに応じてアプリの色設定も反映されるようにします。&lt;br&gt;
React Native で用意されているAPIと、ライブラリの仕組みを使った簡単な実装方法を紹介します。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;パッケージを利用して provider を設定することと、各コンポーネントで色の呼び出し方を修正することで簡単に対応できます。&lt;/p&gt;
&lt;p&gt;対応方法はいくつかありますが、今回は &lt;code&gt;React Navigation&lt;/code&gt; を用いたやり方と &lt;code&gt;React Native Paper&lt;/code&gt; を用いたやり方を紹介します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;React Navigation&lt;/code&gt; を利用した場合は、設定できる色のキーが規定の物しか使えず自由度が少ないです。
&lt;code&gt;React Native Paper&lt;/code&gt; を利用した場合、自由に色のキーを追加できます。なので &lt;code&gt;React Native Paper&lt;/code&gt; の方がおすすめです。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;端末のテーマを取得する&lt;/li&gt;
&lt;li&gt;React Navigation でテーマを用意&lt;/li&gt;
&lt;li&gt;React Native Paper でテーマを用意&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;端末のテーマを取得する&lt;/h2&gt;
&lt;p&gt;端末のテーマを以下で取得します。&lt;code&gt;light&lt;/code&gt; または &lt;code&gt;dark&lt;/code&gt; の文字列が取得できます。
これを使って、テーマを出し分けることになります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; useColorScheme &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;&quot;react-native&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 operator&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;

&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; scheme &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useColorScheme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&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;// &quot;light&quot; or &quot;dark&quot;&lt;/span&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;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Expo を利用している場合&lt;/h3&gt;
&lt;p&gt;もし Expo を利用して開発している場合は、追加の対応が必要です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.dev/guides/color-schemes/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.dev/guides/color-schemes/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;app.json&lt;/code&gt; で以下設定を追加することで、ユーザーの設定した外観設定が反映されるようになります。
この設定をしていない場合デフォルトで常に &lt;code&gt;light&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 string&quot;&gt;&quot;expo&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 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&quot;&gt;&quot;userInterfaceStyle&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;automatic&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 operator&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;React Navigation でテーマを用意&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnavigation.org/docs/themes&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://reactnavigation.org/docs/themes&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;provider を用意する&lt;/h3&gt;
&lt;p&gt;アプリのアクセスポイントとなる &lt;code&gt;App.tsx&lt;/code&gt; に &lt;code&gt;provider&lt;/code&gt; を用意します。
この時に &lt;code&gt;theme&lt;/code&gt; を渡すことで、内部の &lt;code&gt;react-navigation&lt;/code&gt; コンポーネントに &lt;code&gt;theme&lt;/code&gt; の設定値が反映されます。
渡す &lt;code&gt;theme&lt;/code&gt; を上記 &lt;code&gt;useColorScheme&lt;/code&gt; の値によって切り替えることでアプリのテーマ変更を反映できます。&lt;/p&gt;
&lt;p&gt;加えて、各コンポーネントで &lt;code&gt;theme&lt;/code&gt; に設定されている色コードを取得できるので、それを使って自分で用意したコンポーネントの色も制御できます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; useColorScheme &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;&quot;react-native&quot;&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;
  NavigationContainer&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  DefaultTheme&lt;span class=&quot;token punctuation&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;&quot;@react-navigation/native&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 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;const&lt;/span&gt; scheme &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useColorScheme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&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; lightTheme &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;DefaultTheme&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    colors&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;DefaultTheme&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;colors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      primary&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;primary&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      accent&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;secondary&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&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; darkTheme &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;DefaultTheme&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    colors&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;DefaultTheme&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;colors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      primary&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;darkPrimary&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      accent&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;darkSecondary&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&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 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;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;NavigationContainer theme&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; scheme &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;dark&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; darkTheme &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ligheTheme &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 operator&quot;&gt;&amp;lt;&lt;/span&gt;View style&lt;span class=&quot;token operator&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 class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
          &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;AppNavigator &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;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;View&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;NavigationContainer&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;各コンポーネントで theme の色設定を取得する&lt;/h3&gt;
&lt;p&gt;コンポーネントでは &lt;code&gt;useTheme&lt;/code&gt; を使ってテーマの情報を取得できます。色の情報が格納されているので、それを取得してコンポーネントの style に反映します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; useTheme &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;&quot;@react-navigation/native&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 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;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; colors &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;useTheme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&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 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;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;View style&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;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 class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; backgroundColor &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;primary &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;View&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記のように実装することで簡単にダークモードの実装が可能です。
しかし&lt;code&gt;React-Navigation&lt;/code&gt; を使った場合、テーマの色として設定できるキーが決まっており、以下の6つのみです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;primary&lt;/li&gt;
&lt;li&gt;background&lt;/li&gt;
&lt;li&gt;card&lt;/li&gt;
&lt;li&gt;text&lt;/li&gt;
&lt;li&gt;border&lt;/li&gt;
&lt;li&gt;notification&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;個人的にはこれだけでは足りず、もっと多く設定したいと感じました。
他に同様のことができるパッケージを探してみました。&lt;/p&gt;
&lt;h2&gt;React Native Paperでテーマを用意&lt;/h2&gt;
&lt;p&gt;同様のことを &lt;code&gt;React-Native-Paper&lt;/code&gt; でも可能なことがわかりました。&lt;/p&gt;
&lt;p&gt;しかもこちらでは任意のキーでテーマに色を追加でき、色以外にもフォントやアニメーション設定などもテーマとして用意できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://callstack.github.io/react-native-paper/theming.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://callstack.github.io/react-native-paper/theming.html&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;provider を用意する&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;React-Navigation&lt;/code&gt; とほぼ同様の実装になります。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; useColorScheme &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;&quot;react-native&quot;&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; Provider &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; PaperProvider&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; DefaultTheme &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;&quot;react-native-paper&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 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;const&lt;/span&gt; scheme &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useColorScheme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&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; lightTheme &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;DefaultTheme&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    colors&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;DefaultTheme&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;colors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      primary&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;primary&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      accent&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;secondary&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      favorite&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;favorite&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&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; darkTheme &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;DefaultTheme&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    colors&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;DefaultTheme&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;colors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      primary&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;darkPrimary&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      accent&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;darkSecondary&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      favorite&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;favorite&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&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 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;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;PaperProvider theme&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; scheme &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;dark&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; darkTheme &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ligheTheme &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 operator&quot;&gt;&amp;lt;&lt;/span&gt;View style&lt;span class=&quot;token operator&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 class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
          &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;AppNavigator &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;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;View&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;PaperProvider&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;各コンポーネントで theme の色設定を取得する&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; useTheme &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;&quot;react-native-paper&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 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;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; colors &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;useTheme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&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 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;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;View style&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;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 class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; backgroundColor &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;favorite&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;View&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;React-Native-Paper&lt;/code&gt; の場合は任意のキーで色を追加できます。
フォント関連のスタイルやアニメーションなどのスタイルも設定できます。こっちの方が便利ですね。&lt;/p&gt;
&lt;h3&gt;カスタムテーマの型を用意する&lt;/h3&gt;
&lt;p&gt;上記のように、任意キーの色やプロパティを設定した場合、TypeScript だと型のエラーが出てしまいます。
以下のように独自の型の定義を設定することで解決できます。&lt;code&gt;App.tsx&lt;/code&gt; に以下の記述を追加します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;declare&lt;/span&gt; global &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;namespace&lt;/span&gt; ReactNativePaper &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 class-name&quot;&gt;ThemeColors&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      favorite&lt;span class=&quot;token operator&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 punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Theme&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      shadow&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 punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;React-Native-paper&lt;/code&gt; を用いることで簡単にダークモードの実装を行うことができました。
実装の方法は他にもいくつかあるのですが、今回は簡単にできるものを紹介しました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expo アプリでの Detox を使った End-to-End テストの実装]]></title><description><![CDATA[タイトル通り「Detox を使った End-to-End テストの実装」 についての紹介です。 基本的にはドキュメント通りに進めれば実行可能です。しかし Expo を使ったアプリの場合、うまく動かない現象に遭遇しました。
その解決方法も紹介します。 概要 Detox…]]></description><link>https://honmushi.com/2021/08/30/detox-end-to-end-test/</link><guid isPermaLink="false">https://honmushi.com/2021/08/30/detox-end-to-end-test/</guid><pubDate>Mon, 30 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトル通り「Detox を使った End-to-End テストの実装」 についての紹介です。&lt;/p&gt;
&lt;p&gt;基本的にはドキュメント通りに進めれば実行可能です。しかし Expo を使ったアプリの場合、うまく動かない現象に遭遇しました。
その解決方法も紹介します。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Detox とは&lt;/li&gt;
&lt;li&gt;インストール&lt;/li&gt;
&lt;li&gt;Expo アプリの場合に必要なもの&lt;/li&gt;
&lt;li&gt;テスト実行&lt;/li&gt;
&lt;li&gt;エラーがでてテストが正常に動作しない&lt;/li&gt;
&lt;li&gt;解決方法&lt;/li&gt;
&lt;li&gt;Detox の簡単な使い方&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Detox とは&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/wix/Detox&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/wix/Detox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;End-to-End テストを実装するためのパッケージです。&lt;/p&gt;
&lt;p&gt;End-to-End テストとは、ユーザーインターフェーステストとも呼ばれる物です。システム全体に対してユーザーが実際に動かす操作を行い、期待した動作になっていることを確認します。
スナップショットテストやユニットテストとは異なり、実際にアプリをシミュレータ上で動かして操作を行い期待した動作になることをテストします。&lt;/p&gt;
&lt;p&gt;より本番環境に近い形でのテストですね。シミュレータ上で行うので CI でのテスト実行も可能です。&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;まずは必要なパッケージをインストールします。
いつも通り npm・yarn で、テストでのみ使うので dev にインストールします。&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-dev detox detox-expo-helpers expo-detox-hook&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Detox ではシミュレータを操作するので、必要なツールを brew でインストールします。&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;brew install --HEAD applesimutils&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;あとはコマンドラインで操作できるようにcliツールをグローバルにインストールしておきます。&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 -g detox-cli&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;インストールが完了した後は以下のコマンドで Detox の初期設定を行うことができます。&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;detox init -r jest&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;e2e/&lt;/code&gt; 以下に設定ファイルやテストケースが作成されます。&lt;/p&gt;
&lt;h2&gt;Expo アプリの場合に必要なもの&lt;/h2&gt;
&lt;p&gt;上記の init した時点で必要な設定やファイルが一式生成されます。
Expo でテストを行う場合、以下の対応も必要になります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;reloadApp&lt;/code&gt; に書き換え&lt;br&gt;
初期の状態では &lt;code&gt;device.reloadReactNative()&lt;/code&gt; を各テストの前に呼んでいます。
これを &lt;code&gt;detox-expo-helpers&lt;/code&gt; の &lt;code&gt;reloadApp&lt;/code&gt; に変更する必要があります。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; reloadApp &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;detox-expo-helpers&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 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 function&quot;&gt;describe&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 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 function&quot;&gt;beforeEach&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 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;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;reloadApp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&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 operator&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Expo go App を用意する&lt;br&gt;
さらに、シミュレータで動かすにあたり Expo go アプリの app ソースも必要になります。&lt;br&gt;
Expo go のタウンロードページにて、IPAファイルを直接ダウンロードして解凍を行います。そのディレクトリを &lt;code&gt;Expo.app&lt;/code&gt; という名前にリネームしておきます。&lt;br&gt;
プロジェクトのディレクトリに &lt;code&gt;bin/&lt;/code&gt; などのディレクトリを用意して上記 Expo.app を設置しておきます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://expo.dev/tools#client&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://expo.dev/tools#client&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;その後 Detox の設定ファイル &lt;code&gt;detoxrc.json&lt;/code&gt; に以下を追加します。configurations にて使用できるシミュレータを追加しています。name などは自分の使っているシミュレータに合わせて設定しましょう。&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;  &amp;quot;configurations&amp;quot;: {
    &amp;quot;ios.sim&amp;quot;: {
      &amp;quot;binaryPath&amp;quot;: &amp;quot;bin/Expo.app&amp;quot;,
      &amp;quot;type&amp;quot;: &amp;quot;ios.simulator&amp;quot;,
      &amp;quot;name&amp;quot;: &amp;quot;iPhone 11&amp;quot;
    },
  }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;テスト実行&lt;/h2&gt;
&lt;p&gt;テストを実行する際には Expo でエミュレータ上にアプリを起動しておき、以下のコマンドを実行します。
オプションで先程設定したシミュレータを使用するように設定しています。&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;detox test --configuration ios.sim&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;すると Detox でのE2Eテストが動き始めます。&lt;/p&gt;
&lt;h2&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;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;App has not responded to the network requests below:
  (id = -1000) isReady: {}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;どうやら、&lt;code&gt;detox-expo-helpers&lt;/code&gt; の &lt;code&gt;reloadApp&lt;/code&gt; を実行した際に、アプリの再起動が完了したことをリッスンしているのですが、その信号をキャッチできていないとのこと。
なので、アプリが起動しているにもかかわらずテストのチェックや操作が動き出さずそのままタイムアウトしています。&lt;/p&gt;
&lt;h2&gt;解決方法&lt;/h2&gt;
&lt;p&gt;解決方法を探したところ以下のissue にてやりとりされていました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/expo/detox-tools/issues/1&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/expo/detox-tools/issues/1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ざっくりの解決方法の方針としては、上記の内容を参考に以下のように行いました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;reloadApp&lt;/code&gt; にてアプリの起動完了チェックを行わない&lt;/li&gt;
&lt;li&gt;アプリの起動完了チェックを自前で行いテストを始める&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それぞれの詳細な対応について私の対応方法を以下に記載します。&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;reloadApp&lt;/code&gt; にてアプリの起動完了チェックを行わない&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;detox-expo-helpers&lt;/code&gt; に対して &lt;code&gt;patch-package&lt;/code&gt; を使って、起動完了チェックを無効化するパッチを作成。&lt;/p&gt;
&lt;p&gt;以下パッチの中身です。&lt;code&gt;detox-expo-helpers+0.6.0.patch&lt;/code&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;diff --git a/node_modules/detox-expo-helpers/index.js b/node_modules/detox-expo-helpers/index.js
index 864493b..5de0839 100644
--- a/node_modules/detox-expo-helpers/index.js
+++ b/node_modules/detox-expo-helpers/index.js
@@ -70,7 +70,7 @@ const reloadApp = async (params) =&amp;gt; {
     newInstance: true,
     url,
     sourceApp: &amp;#39;host.exp.exponent&amp;#39;,
-    launchArgs: { EXKernelDisableNuxDefaultsKey: true, detoxURLBlacklistRegex: formattedBlacklistArg },
+    launchArgs: { EXKernelDisableNuxDefaultsKey: true, detoxURLBlacklistRegex: formattedBlacklistArg, detoxEnableSynchronization: 0 },
   });&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;アプリの起動完了チェックを自前で行いテストを始める&lt;/h3&gt;
&lt;p&gt;テストケースの&lt;code&gt;reloadApp&lt;/code&gt;が起動完了のチェックを行わなくなったので、直後に起動を確認する処理を追加します。
アプリの起動後に開く画面、ホーム画面などに&lt;code&gt;testID={&quot;container&quot;}&lt;/code&gt; のコンポーネントを用意しておき、それが表示されたことをチェックしています。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token function&quot;&gt;beforeAll&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 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;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;reloadApp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&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;waitFor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;by&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;container&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 function&quot;&gt;toBeVisible&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&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;withTimeout&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&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 operator&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;~&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記対応で、アプリの再読み込みと起動完了のチェックが毎テストの前に正常に行われるようになりました。&lt;/p&gt;
&lt;p&gt;テストも正常にシミュレータが動き、テストケースが順番通り実行されました。&lt;/p&gt;
&lt;h2&gt;Detox の簡単な使い方&lt;/h2&gt;
&lt;p&gt;さまざまなAPIがありますが、簡単なものだけ紹介します。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;  &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;should have FAB&quot;&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 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;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;by&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;container&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 function&quot;&gt;toBeVisible&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&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;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;by&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;FAB&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 function&quot;&gt;toBeVisible&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;testID で要素を検出して、&lt;code&gt;toBeVisible&lt;/code&gt; で画面に描写されていることをテストします。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;  &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;should show new memo screen after tap&quot;&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 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;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;by&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;FAB&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 function&quot;&gt;toBeVisible&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&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;element&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;by&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;FAB&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;tap&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&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;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;by&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;create new memo&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 function&quot;&gt;toBeVisible&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;testID で要素を検出して、&lt;code&gt;tap&lt;/code&gt; で要素のタップイベントを実行できます。
シミュレータ上でも動作が行われ、その後の画面の要素の描写を確認することで、画面遷移などが行われたことをテストできます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Expo の場合はいくつか追加の設定が必要になりましたが、無事に Detox を利用できました。&lt;/p&gt;
&lt;p&gt;エラーも発生したので Detox 使えないのかもと思いましたが、なんとか動かせました。
&lt;code&gt;detox-expo-helpers&lt;/code&gt; の問題の様子？なので、いつか修正されるのを待ちましょう。修正されるまではとりあえずパッチを当てて確認するのがよいです。&lt;/p&gt;
&lt;p&gt;E2Eテストが実行できるとインターフェース面でのテストが豊富に実施できるので、とても便利です。
ローカル環境だけでなくCI環境でもテストを動かせるようにして、変更のチェックを行えるとさらに便利になります。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[@testing-library/react-native でスナップショットテスト]]></title><description><![CDATA[React Native でテストを実装するためのパッケージ @testing-library/react-native の紹介です。 このパッケージを使うことで React Native のコンポーネントのテストを実装でき、UI…]]></description><link>https://honmushi.com/2021/08/28/testing-library/</link><guid isPermaLink="false">https://honmushi.com/2021/08/28/testing-library/</guid><pubDate>Sat, 28 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native でテストを実装するためのパッケージ &lt;code&gt;@testing-library/react-native&lt;/code&gt; の紹介です。&lt;/p&gt;
&lt;p&gt;このパッケージを使うことで React Native のコンポーネントのテストを実装でき、UIの変更に対してスナップショットテストを実装することも可能です。&lt;/p&gt;
&lt;p&gt;React Native でのスナップショットテストのやり方はいくつかあります。
私は React Native Web とStorybook を組み合わせて、Storybook のアドオンで提供されている StoryShot を使っていました。&lt;/p&gt;
&lt;p&gt;設定がややこしかったり、そもそも React Native Web を動かすのでちょっと勝手の違う部分があります。Storybook でUIコンポーネントを確認できるのはとても便利ですが。
Webアプリも同時に作っているなどであれば、恩恵をフルで受け取ることができるのでおすすめですが、私はスマホアプリのみだったのでちょっと大袈裟に感じていました。&lt;/p&gt;
&lt;p&gt;他のテスト用パッケージを探してみたところ、&lt;code&gt;@testing-library/react-native&lt;/code&gt;  を見つけたのでこれを使うことにしました。&lt;/p&gt;
&lt;p&gt;結論、快適にやりたかったことができたのでとても便利です。導入も簡単ですし、jest と組み合わせて動かせるので他環境のtest とほぼ同様に書くことができます。&lt;/p&gt;
&lt;h2&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;li&gt;テストケースの用意&lt;/li&gt;
&lt;li&gt;スナップショットの上書き&lt;/li&gt;
&lt;li&gt;Provider が必要なコンポーネントを含む場合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;パッケージ&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://callstack.github.io/react-native-testing-library/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://callstack.github.io/react-native-testing-library/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://testing-library.com/docs/react-native-testing-library/intro&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://testing-library.com/docs/react-native-testing-library/intro&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;いつも通り npm・yarn でインストールします。テストにのみ利用するパッケージなのでdev環境へのインストールになります。&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-dev @testing-library/react-native&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;設定&lt;/h2&gt;
&lt;p&gt;とくに設定は必要ありませんでした。
Expo を使っている場合に関連するパッケージのWarnなどが出ている場合、jest 設定ファイル &lt;code&gt;jest.config.js&lt;/code&gt; の preset を以下のように変更すると解決できました。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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;
  preset&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;jest-expo&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;テストケースの用意&lt;/h2&gt;
&lt;p&gt;例えば以下のように描きます。render メソッドで対象のコンポーネントをシミュレートでき、それに対して JSON に変換して Snapshot を撮影したり、タップイベントを発生させたりできます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; render&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; fireEvent &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;&quot;@testing-library/react-native&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 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;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CustomComponent &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;&quot;../../../../src/components/CustomComponent&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;CustomComponent&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 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;it&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;CustomComponentを描写&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 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; component &lt;span class=&quot;token operator&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;CustomComponent &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 function&quot;&gt;expect&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 function&quot;&gt;toJSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&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;toMatchSnapshot&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&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;it&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;ボタンをタップしたとき、pnPressメソッドを実行する&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 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; onPressMock &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; jest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&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; component &lt;span class=&quot;token operator&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 operator&quot;&gt;&amp;lt;&lt;/span&gt;CustomComponent onPress&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;onPressMock&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 punctuation&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; button &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; component&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByTestId&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;customComponentButton&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;
    fireEvent&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;press&lt;/span&gt;&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 punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;onPressMock&lt;span class=&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;toBeCalled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;スナップショットの作成のみでなく、&lt;code&gt;fireEvent&lt;/code&gt; を使うことで要素のタップ動作のテストも行うことができます。
タップさせたりする際に要素を指定する必要があります。その場合は要素の「testID」propで検索する&lt;code&gt;getByTestId&lt;/code&gt;や、「&lt;Text&gt;」コンポーネント内の文字列で検索する&lt;code&gt;getByText&lt;/code&gt;などがあり、それらで探します。&lt;/p&gt;
&lt;p&gt;原則的には「実装に近い形でテストが用意できるほど良い」というような考え方があるので、テストのためだけにtestID を設定するのは避けるべきとされているようです。
しかし、Detoxなどend-to-end テストのツールなどでも利用できることを考慮すると、積極的に使ってもいいと考えています。実装の際にprop が1つ増えるのですが、テスト描きやすくなるので個人的にはtestIDを積極的に使う方針にしています。&lt;/p&gt;
&lt;h2&gt;スナップショットの上書き&lt;/h2&gt;
&lt;p&gt;初回にテストを実行した場合、スナップショットのファイルが生成されます。
次回以降はスナップショットに差分があればtest が失敗するようになります。&lt;/p&gt;
&lt;p&gt;テストを行いスナップショットの差分を確認して、意図した内容であれば &lt;code&gt;--updateSnapshot&lt;/code&gt; のオプションを指定してjestを実行することでスナップショットの上書きを行うことができます。&lt;/p&gt;
&lt;h2&gt;Provider が必要なコンポーネントを含む場合&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;react-native-paper&lt;/code&gt; など、親コンポーネントにProvider を設定しておく必要があるコンポーネントの場合、そのままrender するとエラーになってしまいます。&lt;/p&gt;
&lt;p&gt;その場合は、以下のようにカスタムrender を定義したファイル&lt;code&gt;test-util.js&lt;/code&gt;を用意して、そちらのrender を利用できるようにするとテストを動かすことが可能です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://testing-library.com/docs/react-native-testing-library/setup&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://testing-library.com/docs/react-native-testing-library/setup&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-javascript line-numbers&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; render &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;&quot;@testing-library/react-native&quot;&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; Provider &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; PaperProvider &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;&quot;react-native-paper&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; &lt;span class=&quot;token function-variable function&quot;&gt;AllTheProviders&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; children &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 operator&quot;&gt;&amp;lt;&lt;/span&gt;PaperProvider&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;children&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;PaperProvider&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; &lt;span class=&quot;token function-variable function&quot;&gt;customRender&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;ui&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options&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;render&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ui&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; wrapper&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; AllTheProviders&lt;span class=&quot;token punctuation&quot;&gt;,&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 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;// re-export everything&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&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 string&quot;&gt;&quot;@testing-library/react-native&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// override render method&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; customRender &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; render &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;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;@testing-library/react-native&lt;/code&gt; ではなく、&lt;code&gt;test-util.js&lt;/code&gt; から render をimport すれば、Provider が必要なコンポーネントもテストできます。&lt;/p&gt;
&lt;p&gt;ちなみに、&lt;code&gt;jest.config.js&lt;/code&gt; に以下の記述を追加することで、&lt;code&gt;test-util&lt;/code&gt;をパスで指定しなくても&lt;code&gt;import { render } from &apos;test-utils&apos;;&lt;/code&gt; で指定できます。
カスタムrender を用意する場合は便利なので対応しておくと良いです。&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;module.exports = {
  moduleDirectories: [
    &amp;#39;node_modules&amp;#39;,
    &amp;#39;utils&amp;#39;, // a utility folder
    __dirname, // the root directory
  ],
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;@testing-library/react-native&lt;/code&gt; を使うことで簡単にコンポーネントのテストを用意できます。&lt;/p&gt;
&lt;p&gt;testing-library としてまとまった仕様になっており、jest を使ったテストケースの書き方なのでわかりやすく、React など他の環境でも同様の書き方になるので応用できます。&lt;/p&gt;
&lt;p&gt;単純なユニットテストを行う分には十分なAPIが用意されているので、快適にテストを行うことができ開発の手助けになること間違いないです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[iOS シミュレータの便利コマンド]]></title><description><![CDATA[Mac で iOS シミュレータを動かしている時の便利なコマンドのメモです。 画面をタップして諸々の操作は可能ですが、物理端末とは違うのでできない操作や、動かしづらい操作があります。 開発の際に個人的によく使うコマンドをメモしています。 便利コマンド ctrl + cmd + z…]]></description><link>https://honmushi.com/2021/08/26/ios-simulater/</link><guid isPermaLink="false">https://honmushi.com/2021/08/26/ios-simulater/</guid><pubDate>Thu, 26 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Mac で iOS シミュレータを動かしている時の便利なコマンドのメモです。&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;&lt;code&gt;ctrl + cmd + z&lt;/code&gt; 振る。Expo の場合メニューが出るので便利&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + s&lt;/code&gt; 画面のスクリーンショットを取る&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + k&lt;/code&gt; キーボードのトグル&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shift + cmd + h&lt;/code&gt; ホーム画面へ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shift + ctrl + cmd + h&lt;/code&gt; App Switcher バックグラウンドアプリ選択&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + r&lt;/code&gt; 画面を録画&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + ,&lt;/code&gt; シミュレータの設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + ←&lt;/code&gt; シミュレータを左に回転&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + →&lt;/code&gt; シミュレータを右に回転&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + h&lt;/code&gt; シミュレータを非表示&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + m&lt;/code&gt; ウィンドウ最小化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + ↑&lt;/code&gt; 音量アップ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + ↓&lt;/code&gt; 音量ダウン&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shift + cmd + a&lt;/code&gt; ダークモード切り替え&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alt + cmd + -&lt;/code&gt; 文字サイズ縮小&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alt + cmd + +&lt;/code&gt; 文字サイズ拡大&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + /&lt;/code&gt; シミュレータのシステムログの表示&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + 1&lt;/code&gt; ウィンドウを物理サイズに設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmd + q&lt;/code&gt; 終了&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;シミュレータで使えるコマンドはそれほどありませんが、端末を振ってExpoのメニュー出す・スクリーンショット取る・キーボードのトグルなどは使う機会多いので、覚えておくと良いです。&lt;/p&gt;
&lt;p&gt;Android でもコマンドあるはずなので、機会があればそちらもまとめておきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Neovim の terminal mode]]></title><description><![CDATA[Neovim の terminal mode の操作についてのメモです。 terminal mode は Vim 及び Neovim…]]></description><link>https://honmushi.com/2021/08/26/nvim-terminal-mode/</link><guid isPermaLink="false">https://honmushi.com/2021/08/26/nvim-terminal-mode/</guid><pubDate>Thu, 26 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Neovim の &lt;code&gt;terminal mode&lt;/code&gt; の操作についてのメモです。&lt;/p&gt;
&lt;p&gt;terminal mode は Vim 及び Neovim のウィンドウでターミナルのコマンドの実行・結果の表示ができるものです。
ファイルを編集しながらコマンドを実行したりできるので、とても便利です。&lt;/p&gt;
&lt;p&gt;使うときにちょっと癖があるので便利になる設定と基本的な使い方を以下にメモしています。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;terminal mode&lt;/li&gt;
&lt;li&gt;便利なコマンドを設定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;terminal mode&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;:terminal&lt;/code&gt; コマンドでterminal mode に入ります。Neovim の場合は現在のウィンドウで開かれます。
短縮版の &lt;code&gt;:term&lt;/code&gt; や &lt;code&gt;:te&lt;/code&gt; でも同様です。&lt;/p&gt;
&lt;p&gt;別のウィンドウで開く場合は &lt;code&gt;:vs|te&lt;/code&gt; とかで開くのが簡単でおすすめです。画面を分割してから terminal mode に入ります。&lt;/p&gt;
&lt;h3&gt;terminal-job モードでコマンド実行&lt;/h3&gt;
&lt;p&gt;terminal mode では最初は &lt;code&gt;terminal-normal&lt;/code&gt; モードになっていて、ターミナルへの入力はできません。
ターミナルの出力を遡ったりヤンクやペーストのみできる状態です。Vim でいうノーマルモードに近いです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;i&lt;/code&gt;キーで terminal-job モードに入ることができます。Vim でいうインサートモードに近く、ターミナルの入力・実行ができます。&lt;/p&gt;
&lt;h3&gt;terminal-normal モードに戻る&lt;/h3&gt;
&lt;p&gt;コマンド実行後は元のファイル編集ウィンドウに戻りたいですが、job モードではウィンドウ移動ができません。
&lt;code&gt;&amp;#x3C;C-\&gt;&amp;#x3C;C-n&gt;&lt;/code&gt; で terminal-normal モードに戻ることができます。そうすればウィンドウの移動ができます。&lt;/p&gt;
&lt;h2&gt;便利なコマンドを設定&lt;/h2&gt;
&lt;p&gt;上記で説明しましたが、terminal-normal モードに戻る &lt;code&gt;&amp;#x3C;C-\&gt;&amp;#x3C;C-n&gt;&lt;/code&gt; はちょっと覚えにくく操作もしづらいですね。
私は以下のコマンドを設定して &lt;code&gt;&amp;#x3C;C-[&gt;&lt;/code&gt; で terminal-normal モードへ戻れるようにしています。&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;tnoremap &amp;lt;C-[&amp;gt; &amp;lt;C-\&amp;gt;&amp;lt;C-n&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;tnoremap&lt;/code&gt; でterminal mode のキーマッピングを設定できます。&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;nmap &amp;lt;silent&amp;gt; &amp;lt;Leader&amp;gt;&amp;lt;Leader&amp;gt;p :let @* = expand(&amp;quot;%&amp;quot;)&amp;lt;CR&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで terminal mode に入り、&lt;code&gt;npm test&lt;/code&gt; などを編集中ファイルのパスを渡して実行することで、編集中ファイルに対してコマンドを実行できます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Neovim 上でターミナルを操作できると、出力などをヤンクしたり検索したりでき、とても便利です。
ちょっとモード切り替えなどに癖があるので、その部分だけコマンドを用意してあげればとても使いやすくなります。&lt;/p&gt;
&lt;p&gt;tmux でペイン分割してターミナル操作でもいいですが、Neovim 上で解決できる方法も知っておくと便利な場合もあるのでおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[利用しているライブラリのライセンスを一覧で表示する画面を作成する]]></title><description><![CDATA[オープンソースのライブラリを利用するに当たって、ライセンスによっては使用していることを表示しないといけないものがあります。 Web…]]></description><link>https://honmushi.com/2021/08/26/license-page/</link><guid isPermaLink="false">https://honmushi.com/2021/08/26/license-page/</guid><pubDate>Thu, 26 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;オープンソースのライブラリを利用するに当たって、ライセンスによっては使用していることを表示しないといけないものがあります。&lt;/p&gt;
&lt;p&gt;Webページなどでは、簡単にソースを見られるのでそこで表示していることにできます。
しかし、アプリの場合はソースが通常は見られないので表示用のページを作成して、そこへ書き並べることになります。&lt;/p&gt;
&lt;p&gt;今回はその対応の内容をメモしています。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;ざっくりとは以下の対応です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ライセンスの一覧情報テキストを作成&lt;br&gt;
&lt;del&gt;&lt;code&gt;npm-license-crawler&lt;/code&gt; を利用して&lt;/del&gt;&lt;br&gt;
&lt;code&gt;license-ls&lt;/code&gt; を利用して使用しているパッケージのライセンス一覧をまとめたjsonファイルを作成。&lt;/li&gt;
&lt;li&gt;アプリ内に表示ページを作成&lt;br&gt;
上記の json ファイルを読み込んで、一覧表示するライセンス画面をアプリに実装。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ライセンスの一覧情報テキストを作成&lt;/h2&gt;
&lt;p&gt;&lt;del&gt;いくつか方法はあるようですが、今回は &lt;code&gt;npm-license-crawler&lt;/code&gt; というライブラリを使いました。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;他のライブラリで&lt;code&gt;license-ls&lt;/code&gt;というものが便利だったのでこちらを利用します。
ライセンス情報をまとめてファイルに出力できるものです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/morficus/license-ls&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/morficus/license-ls&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;実行&lt;/h3&gt;
&lt;p&gt;私は package.json に以下のように script を用意して実行しました。
依存しているパッケージは対象にしない、json 形式で license.json に出力するなどの指定をオプションで指定してます。
package.json で指定しているライブラリのもののみが出力され、依存の依存になっているものは対象外になります。
アプリが直接依存しているもののみ抽出できるのでわかりやすくなります。&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;  &amp;quot;scripts&amp;quot;: {
    ~~~
    &amp;quot;license&amp;quot;: &amp;quot;npx license-ls --depth=0 --prod --format=json &amp;gt; &amp;#39;./src/licenses.json&amp;#39;&amp;quot;,
  },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;指定したファイルに json 形式で出力されているはずです。パッケージの情報のオブジェクトの配列になっています。&lt;/p&gt;
&lt;h2&gt;アプリ内に表示ページを作成&lt;/h2&gt;
&lt;p&gt;上記の json ファイルを使ってライセンスページを作成します。
特に難しいことはなく FlatList でリスト表示しています。&lt;/p&gt;
&lt;p&gt;json の中身はオブジェクトの配列になっているので、そのままFlatListに渡すことができます。
FlatList の data に渡して、各要素でURLとライセンスの名前・形式を取得しています。&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;const licenseFile = require(&amp;quot;./licenses.json&amp;quot;);

export const LicensesScreen = () =&amp;gt; {

  const openUrl = (url: string) =&amp;gt; {
    WebBrowser.openBrowserAsync(url);
  };

  const LicenseItem = (props) =&amp;gt; {
    const { packageItem, onPress } = props;
    const { name, license, homepage } = packageItem;
    return (
      &amp;lt;TouchableOpacity
        style={styles.licenseItem}
        onPress={() =&amp;gt; {
          onPress(homepage);
        }}&amp;gt;
        &amp;lt;Text style={styles.packageName}&amp;gt;{name}&amp;lt;/Text&amp;gt;
        &amp;lt;Text style={styles.license}&amp;gt;{license}&amp;lt;/Text&amp;gt;
        &amp;lt;Text style={styles.url}&amp;gt;{homepage}&amp;lt;/Text&amp;gt;
      &amp;lt;/TouchableOpacity&amp;gt;
    );
  };

  return (
    &amp;lt;View style={styles.container}&amp;gt;
      &amp;lt;FlatList
        data={licenseFile}
        renderItem={({ item }) =&amp;gt; {
          return &amp;lt;LicenseItem packageItem={item} onPress={openUrl} /&amp;gt;;
        }}
      /&amp;gt;
    &amp;lt;/View&amp;gt;
  );
};&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ユーザーが使うことはない機能ですし後回しになりがちですが、ライセンスの規約に従うことは大切ですのでしっかり対応しておきたいです。&lt;/p&gt;
&lt;p&gt;形式は特に指定がないのでそのままのテキストを表示するだけでもいいですが、必要であればStyle等を用意して整形しましょう。&lt;/p&gt;
&lt;p&gt;現状、パッケージを追加するたびにコマンドを実行してライセンス一覧を更新する必要があります。その辺りも自動化できるように script を強化したいと考えています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native の AsyncStrage が Deprecated となっているので、別のパッケージに変更する]]></title><description><![CDATA[タイトルの通りです。
React Native に含まれている AsyncStrage が、少し前からDeprecatedとなっていました。 すぐに使えなくなるわけではないようですが、別のものに交換するよう勧められていたので対応を行いました。 https…]]></description><link>https://honmushi.com/2021/08/25/asyncstrage/</link><guid isPermaLink="false">https://honmushi.com/2021/08/25/asyncstrage/</guid><pubDate>Wed, 25 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルの通りです。
React Native に含まれている &lt;code&gt;AsyncStrage&lt;/code&gt; が、少し前からDeprecatedとなっていました。&lt;/p&gt;
&lt;p&gt;すぐに使えなくなるわけではないようですが、別のものに交換するよう勧められていたので対応を行いました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnative.dev/docs/asyncstorage&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://reactnative.dev/docs/asyncstorage&lt;/a&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;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnative.directory/?search=storage&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://reactnative.directory/?search=storage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回は&lt;code&gt;@react-native-async-storage/async-storage&lt;/code&gt; を選択しました。&lt;br&gt;
いろんな環境に対応している様子です。さらに、もともとのコンポーネントと同様の使い方ができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/react-native-async-storage/async-storage&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/react-native-async-storage/async-storage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下のドキュメントに従ってインストールを行い、該当箇所のパッケージの呼び出し元を変更していくだけです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://react-native-async-storage.github.io/async-storage/docs/install/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://react-native-async-storage.github.io/async-storage/docs/install/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;インストール&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;npm install @react-native-async-storage/async-storage&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;使い方&lt;/h3&gt;
&lt;p&gt;使いかたはもともとの React Native の AsyncStrage と同様です。単純にキーを指定して文字列を書き込み・読み出しできます。&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; AsyncStorage &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;@react-native-async-storage/async-storage&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;~&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; AsyncStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setItem&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 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;const&lt;/span&gt; item &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; AsyncStorage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getItem&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 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;
&lt;p&gt;AsyncStrage はあまり複雑なことができませんが、単純なデータを保存するのみであれば便利に使えます。
いずれ利用できなくなる様子なので早いうちにコミュニティで開発されているパッケージへの移動を対応しておきましょう。&lt;/p&gt;
&lt;p&gt;今回パッケージを変更しましたが、実際に保存されているデータのパス・キーなどは変わらなかった様子で、データが初期化されるといった現象はありませんでした。
懸念していた部分も問題なかったのでよかったです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Platform Specific Extensions でOSごとにコンポーネントを分岐させる]]></title><description><![CDATA[React Native にてプラットフォームに沿ってコンポーネントを分ける場合のやり方の紹介です。
iOS の場合はこう、Androidの場合はこう、といった分岐をしたい場合の実装方法です。 大きくは以下の 2種類あります。 Platform モジュール Platform…]]></description><link>https://honmushi.com/2021/08/25/platform-specific-extensions/</link><guid isPermaLink="false">https://honmushi.com/2021/08/25/platform-specific-extensions/</guid><pubDate>Wed, 25 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native にてプラットフォームに沿ってコンポーネントを分ける場合のやり方の紹介です。
iOS の場合はこう、Androidの場合はこう、といった分岐をしたい場合の実装方法です。&lt;/p&gt;
&lt;p&gt;大きくは以下の 2種類あります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform モジュール&lt;/li&gt;
&lt;li&gt;Platform Specific Extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それぞれ紹介と実装の際のコツのメモです。&lt;/p&gt;
&lt;h2&gt;Platform モジュール&lt;/h2&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 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; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;react-native&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;Platform.OS&lt;/code&gt; で現在のOSの種類が取得できます。switch文などを使って、&lt;code&gt;ios&lt;/code&gt;もしくは&lt;code&gt;android&lt;/code&gt;のどちらに一致するかで処理を分岐させれば意図した実装ができます。&lt;/p&gt;
&lt;p&gt;他にも以下のようにselect を使えば、モジュールで分岐を書くこともできます。&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; valur &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Platform&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;select&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
  ios&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;ios です&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  android&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;android です&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;code&gt;Platform.Version&lt;/code&gt; でOSのバージョンを取得することも可能なので覚えておきましょう。&lt;/p&gt;
&lt;h2&gt;Platform Specific Extensions&lt;/h2&gt;
&lt;p&gt;もう 1つの方法として、&lt;code&gt;Platform Specific Extensions&lt;/code&gt; という仕組みがあります。
こちらはios用とAndroid用でコンポーネントの定義ファイルを分けて用意しておくことで、それぞれの環境で該当するものが読み込まれるというものです。&lt;/p&gt;
&lt;h3&gt;実装&lt;/h3&gt;
&lt;p&gt;たとえば、&lt;code&gt;component.tsx&lt;/code&gt;をOSごとに分岐させる場合、iOS用のコンポーネントは&lt;code&gt;component.ios.tsx&lt;/code&gt;。Android用は&lt;code&gt;component.android.tsx&lt;/code&gt; というようにファイルを用意します。&lt;/p&gt;
&lt;p&gt;利用する時は&lt;code&gt;import { component } from &quot;./component&quot;;&lt;/code&gt; とすることでOSごとに対応する定義ファイルがimport されます。&lt;/p&gt;
&lt;h3&gt;TypeScript の型を解決&lt;/h3&gt;
&lt;p&gt;上記のように実装した場合にTypeScriptだと型のエラーが出力されてしまいます。
これは、同じディレクトリに型を定義したファイルを設置することで解決できます。上記の場合なら &lt;code&gt;component.d.ts&lt;/code&gt; というファイルを設置します。&lt;/p&gt;
&lt;p&gt;以下のように型を定義することで、import する際の型の解決に加えて、iOSとAndroidのコンポーネント間の差分のチェックを行うこともできます。&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber 0&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&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; component &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; ios &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;&quot;./component.ios&quot;&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; component &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; android &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;&quot;./component.android&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;declare&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; test&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; ios&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;declare&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; test&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; android&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 operator&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;&quot;./component.ios&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;実装の方法は好みでいいのですが、あえてメリットを考えてみましょう。
Platform モジュールを使う場合は、分岐の処理や他方のOSの処理もバンドルされるので、その分容量が大きくなります。
Platform Specific Extensions の方が、ビルドした際にそれぞれのOSのコンポーネントファイルのみをバンドルできるので容量が小さくなります。&lt;/p&gt;
&lt;p&gt;とはいえ、大概の場合は少しの差になります。よほどOSごとの処理が大きい場合はその恩恵を受けられます。&lt;/p&gt;
&lt;p&gt;それよりも、ファイルを別にすることでコードが読みやすい・管理しやすいといった恩恵もあるので、そちらの方が嬉しいですね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[react-native-dotenv で環境ごとの定数を設定]]></title><description><![CDATA[react-native-dotenv を使って、開発環境・本番環境で切り替わる定数の定義を行います。 ライブラリ https://github.com/goatandsheep/react-native-dotenv 上記リポジトリの README…]]></description><link>https://honmushi.com/2021/08/03/react-native-dotenv/</link><guid isPermaLink="false">https://honmushi.com/2021/08/03/react-native-dotenv/</guid><pubDate>Tue, 03 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;react-native-dotenv を使って、開発環境・本番環境で切り替わる定数の定義を行います。&lt;/p&gt;
&lt;h2&gt;ライブラリ&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/goatandsheep/react-native-dotenv&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/goatandsheep/react-native-dotenv&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上記リポジトリの README に沿って設定すれば問題ないです。&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;まずはパッケージをインストールします。npm か yarn お好きな方で行いましょう。&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 react-native-dotenv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;babel の設定を追加&lt;/h2&gt;
&lt;p&gt;まずは babel の設定ファイルに設定を追加します。&lt;code&gt;.babelrc&lt;/code&gt; とか &lt;code&gt;babel.config.js&lt;/code&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;    plugins: [
      [
        &amp;quot;module:react-native-dotenv&amp;quot;,
        {
          moduleName: &amp;quot;@env&amp;quot;,
        },
      ],
    ],&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;定数ファイルを用意&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.env.development&lt;/code&gt; と &lt;code&gt;.env.production&lt;/code&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;ANDROID_BANNER_AD_UNIT_ID=&amp;lt;Androidのバナー広告のユニットID&amp;gt;
IOS_BANNER_AD_UNIT_ID=&amp;lt;iOSのバナー広告のユニットID&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;バナー広告のユニットIDを設定しています。この場合、開発環境用の&lt;code&gt;.env.development&lt;/code&gt; にはテスト用広告IDを設定しておくことになります。&lt;/p&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;moduleName で指定したパッケージ名としてインポートして定数を利用できます。&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;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token constant&quot;&gt;ANDROID_BANNER_AD_UNIT_ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token constant&quot;&gt;IOS_BANNER_AD_UNIT_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 keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@env&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 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;AdMobBanner
        adUnitID&lt;span class=&quot;token operator&quot;&gt;=&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;&lt;span class=&quot;token function&quot;&gt;select&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          ios&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;IOS_BANNER_AD_UNIT_ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          android&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;ANDROID_BANNER_AD_UNIT_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 operator&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;code&gt;.env.development&lt;/code&gt; の中身、本番ビルドでは &lt;code&gt;.env.production&lt;/code&gt; の中身になっています。&lt;/p&gt;
&lt;h2&gt;型情報の用意&lt;/h2&gt;
&lt;p&gt;TypeScript の場合、&lt;code&gt;@env&lt;/code&gt; の型情報がないため注意されます。
&lt;code&gt;types/env.d.ts&lt;/code&gt; ファイルを作成して、以下のように定数の型情報を設定することで解決できます。&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;declare&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;@env&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;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;ANDROID_BANNER_AD_UNIT_ID&lt;/span&gt;&lt;span class=&quot;token operator&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;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;IOS_BANNER_AD_UNIT_ID&lt;/span&gt;&lt;span class=&quot;token operator&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 punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;手動で作成した型情報を使ったことがない場合は、&lt;code&gt;tsconfig.json&lt;/code&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;{
    &amp;quot;typeRoots&amp;quot;: [&amp;quot;./src/types&amp;quot;],
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単に環境ごとの定数を切り替えることができました。私は広告IDの切り替えや、APIのURL切り替えなどに利用しています。&lt;/p&gt;
&lt;p&gt;似たようなことができるパッケージは他にもあるので好みに合わせて使ってみると良いです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[react-native-maps を使って、アプリで地図を表示する]]></title><description><![CDATA[タイトルの通り、Expo アプリで地図を表示する際の実装です。
「react-native-maps」 というパッケージを使って簡単に実装できます。そのメモです。 Android ではGoogle map Api…]]></description><link>https://honmushi.com/2021/07/30/react-native-maps/</link><guid isPermaLink="false">https://honmushi.com/2021/07/30/react-native-maps/</guid><pubDate>Fri, 30 Jul 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルの通り、Expo アプリで地図を表示する際の実装です。
「react-native-maps」 というパッケージを使って簡単に実装できます。そのメモです。&lt;/p&gt;
&lt;p&gt;Android ではGoogle map Apiを利用することになるので、いくつか設定が必要になります。その辺りの説明を補足しています。&lt;/p&gt;
&lt;p&gt;基本的には以下のドキュメントに従って進めていけばいいです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.dev/versions/latest/sdk/map-view/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.dev/versions/latest/sdk/map-view/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;実装
アプリ側の実装は、&lt;code&gt;react-native-maps&lt;/code&gt; を利用して簡単にできます。指定した場所にマーカーをおいたり、ユーザーの地図上での操作イベントを取得したりできます。&lt;/li&gt;
&lt;li&gt;設定
Androidの場合はGoogle Map APIを利用するので設定が必要になります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ざっくりとは以下の工程になります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;「Google API Manager でプロジェクト作成」&lt;/li&gt;
&lt;li&gt;「Maps SDK for Android を有効にする」&lt;/li&gt;
&lt;li&gt;「Play Store にて認証キーを取得」&lt;/li&gt;
&lt;li&gt;「Credential を作成して設定」&lt;/li&gt;
&lt;li&gt;「API key を app.json に追加」&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;iOS の場合はネイティブの地図機能があるので通常はそちらが利用されます。設定を行えばAndroidと同様に Google Map を使うこともできます。&lt;/p&gt;
&lt;p&gt;詳細な手順を以下に紹介します。&lt;/p&gt;
&lt;h2&gt;パッケージ&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;react-native-maps&lt;/code&gt;というパッケージを使って実装します。&lt;br&gt;
&lt;a href=&quot;https://github.com/react-native-maps/react-native-maps&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/react-native-maps/react-native-maps&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Google Map API の設定&lt;/h2&gt;
&lt;h3&gt;Google API Manager でプロジェクト作成&lt;/h3&gt;
&lt;p&gt;Google Cloud Platform にてプロジェクトを作成します。&lt;br&gt;
&lt;a href=&quot;https://console.developers.google.com/apis&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://console.developers.google.com/apis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;アクセス量とかを確認できるので、アプリごとに作成しましょう。&lt;/p&gt;
&lt;h3&gt;Maps SDK for Android を有効にする&lt;/h3&gt;
&lt;p&gt;Google Cloud Platform の「APIとサービス」の「ライブラリ」にて、「Maps SDK for Android」 を有効にします。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/860361ee2a2b4b641d8ff78186864e52/73b94/api-r.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 54.05405405405405%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABx0lEQVQoz1VSia6bMBDk/3+hP1W1qvqSkDSQxGAgXMacgenOvpKnWhp5L2Z3BwdXU+IQxvgdRriaGo/4J+Lv35BkJUzeIskbxSOTnK2+sPv/crEpEAmCNDHwTYWh9/BdC2szZHmNNE2QZ1ZhxWZ+Goc36I+8XatomhrPIkPQNI0kRpRlBWMS3OIYtxtxw/3+QCx3mlqx7wjDEIfDB6LoitPpBJtl6Ooarizhug6Z+MGP8y9ckgh959G2LTpJ7GAz5xzmecYwDIq+7xVaK7lJcp3ndl7v4PLngqt0JPvz+UQtHVlMIier7DZva63abLbHPuscvJC5ziEggTFGiVhYVULoOKF7T8pidufEXxvIVP3wXx0RpGmKJEk04X0P1xaYxxbrumFZFkzTJCt2WMYO6yYxWXGeF4yDR1/nUrfi9XqpLPwXwfF4VMH7QbTxgzyRWJ5MrPY4jeBpmhK5Nardtq0aG4Qwe1x0XcZ5OEBA7Yqi+FxLRubf5l+tqlJlYFFdNzBJKrFKazaZtJd1GaPuJOXhlEpIbdiFCRLwA4KrEMsyq8/19jzj9An67wljeXfn8xl5nuuUJKYWBPXbnwptYteK8T1G7LG/N39I1axt7KQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;APIライブラリ&quot;
        title=&quot;APIライブラリ&quot;
        src=&quot;/static/860361ee2a2b4b641d8ff78186864e52/fcda8/api-r.png&quot;
        srcset=&quot;/static/860361ee2a2b4b641d8ff78186864e52/12f09/api-r.png 148w,
/static/860361ee2a2b4b641d8ff78186864e52/e4a3f/api-r.png 295w,
/static/860361ee2a2b4b641d8ff78186864e52/fcda8/api-r.png 590w,
/static/860361ee2a2b4b641d8ff78186864e52/efc66/api-r.png 885w,
/static/860361ee2a2b4b641d8ff78186864e52/73b94/api-r.png 1004w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;「Maps SDK for Android」 を選択して「有効にする」ボタンを押しましょう。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 518px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e25e40b99c56e1b76a7e8df4c50a1bb7/6b9fd/mapssdk.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 74.32432432432432%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAABoklEQVQ4y61SwU7CQBDt13o0Gj/Bu4bo2YSLF2M4qSEaboaIIInRmKokGkFKwUBbSmm3u8+dbVdLKeGgmzw6b/pm5rEd4+HNwaPES8/Fc/fvMCImwDn+7RhCcHCJOJaQnWWoBlAcZyYpLjWcCwjJRZonrmsJsqF8KX8IdEZmFe7HrYrvWi1UKhU0Gg1Uq1XUajU0m80F3m63lVbXG0mzxAmfPeH6agP39R3JfIy+JjBNE5PJBJ7nwfd9hdlsBtd14TiO4rohwch2n4YOti4PsHdzrHgYRQjmwdp70/XKYT7JyGmaGw5H6PY+MbBHsGVsWRZs21ZPQr/fB2NstUORXKgCz0zNDtXg6iPFi7XaYfajJOIkPquPUTodYP/EwtH5UDbQmjV/WXPdOE4bli8sbB92sFnqYLf8DhbzJadLDrNJXiDIWfm9lhUaIz+pSEiUL+VEIYys6H0QYuzFKqZdm06nas/o8unQ7hEvdK8dMimmAs+P8Nr10bMDzEOGIAh+FjmS+0gaGkCDaFXitC4PIwxDaAguC1kSUxMN/Z4aZXkRvgFWiohxk3DhlgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Maps SDK for Android&quot;
        title=&quot;Maps SDK for Android&quot;
        src=&quot;/static/e25e40b99c56e1b76a7e8df4c50a1bb7/6b9fd/mapssdk.png&quot;
        srcset=&quot;/static/e25e40b99c56e1b76a7e8df4c50a1bb7/12f09/mapssdk.png 148w,
/static/e25e40b99c56e1b76a7e8df4c50a1bb7/e4a3f/mapssdk.png 295w,
/static/e25e40b99c56e1b76a7e8df4c50a1bb7/6b9fd/mapssdk.png 518w&quot;
        sizes=&quot;(max-width: 518px) 100vw, 518px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Play Store にて認証キーを取得&lt;/h3&gt;
&lt;p&gt;Play Store にて、アプリごとに生成されるSHA-1 証明書のフィンガープリントをコピーします。&lt;br&gt;
「リリース」の「設定」内「アプリの完全性」メニューにあります。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c224ae97c6e6c3983cf07f4c1752ea75/6be49/sha-1.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 131.0810810810811%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAACXBIWXMAABYlAAAWJQFJUiTwAAADjklEQVRIx51VWW/TYBD0//8zwEMvpEKhBw89eKCoNA1t7thxfJ+Jj2FnjRMnqlSEpU++Ps/uzs6sjaqqkCSJrrqu0R7tdXter9c4Pf2Ei4tL3N19x+HhEW5ub3Fy8hFfz8/13dPTE4wsy2Faln6YJClG4wmsxWID1gIWVQkvDeC5HrIsg2UtEEsSrtxPZ3PMZA0GQxiM7Hk+XM/Tc1lWssqd7OI4wUr2JXmqmXKlaYbVaqV7GSBJU+R53gAyiuO6CtotuQXkc+5rn7cBX9trsEzfD5qInY+6m/xA3ksW/X4fo9EIl5dXODo+xsHBIc6+fMHnszO8e/8Btm3DaKMw7TiOEQQhiqLYKdnzfSmvqYTBbXuJ8WSK6XSm7+ZzEy/CH3k12kzIQRhGiKJIOetmqICS/XLpoP/7Gb2nvjbBXi71HZvIAAsJtAFkyZFkSAooIcqpC9hy+NaxKXnpOBLR2flww6GUSUq4Zyyymkg2qVYUakVc63WBUpIwWMpKbqyFjZFsjCXDdVFqibnwRhk1HK5UFtQewVkBg7Pj5Jz3lSRgEJkfM7vJdC4dDZHJh2wCA3ETZZPnDSAzY3N4JiDB+bwFVQ55w8VNLIud7pbOrJghn7ui1/FkgkDKJddRFCv3fL8BVGsJIDu37+fu/VtHVdVbQHJhmpZGeW04MODcNNX3PRkCz88v2gzHcZUC2pZZ7gBSV/uA+9f/LJtCOkth7pfbzTAQC7KJ5JqLSfiiAPJIl3nSPIMdJalsAh3SkryfHbv52OspwEIkxvIJ8vDwC4PhUMEeH3sw6BBX6mdECphiDYWbdjx1ueREomcn4mHOQNqNjaQl6Wsugxqy7YVEcDUKJwszpa9pw/agCzQzGQSONGE8FrC/Q2Eq+qWDhqOxOKWUwbCqEaZinVe5Fx6bFBGFLNfCSEqciBYtS8CdpahjrgrhtDecuELfKjBclgLaDISi3C5qS5si13ZUIWXwrEYuEy5eQZJp1qbLpl/DCmo82xV+jAtcPOZ6NuXZzJMywy2g6ReIMvm3xCViOftJAT8u9Ez/s+sGI6bisrkdwHIizOxQrkPk8ozv8qL+Px36+pPykMRsRrzhr1lQwdMVbBabw+YtZORTSmwInXN//3PrFI5vdonjaivsXetxKJB8/n8pkcFggE+fz3B9fYPLq284OjreAr42EPbdwjFG3w6GI9Uitcv/OjOnLj3R8R+CnNPqKw2hcwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;sha-1&quot;
        title=&quot;sha-1&quot;
        src=&quot;/static/c224ae97c6e6c3983cf07f4c1752ea75/fcda8/sha-1.png&quot;
        srcset=&quot;/static/c224ae97c6e6c3983cf07f4c1752ea75/12f09/sha-1.png 148w,
/static/c224ae97c6e6c3983cf07f4c1752ea75/e4a3f/sha-1.png 295w,
/static/c224ae97c6e6c3983cf07f4c1752ea75/fcda8/sha-1.png 590w,
/static/c224ae97c6e6c3983cf07f4c1752ea75/efc66/sha-1.png 885w,
/static/c224ae97c6e6c3983cf07f4c1752ea75/6be49/sha-1.png 1160w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ストアにアプリを登録していないと取得できません。デバッグ版でいいのでstore への登録・アップロードを先に済ませておきましょう。&lt;/p&gt;
&lt;h3&gt;Credential を作成して設定&lt;/h3&gt;
&lt;p&gt;Google Cloud Platform にてCredentialを設定してAPI Key を作成します。
「APIとサービス」の「認証情報」メニューにて、上部の「認証情報を作成」を選択します。&lt;/p&gt;
&lt;p&gt;出てくるメニューの「APIキー」を選択し、キーを作成します。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/9059cb4706fa7904d0125e2fdeb53f9b/d7abb/apiselect.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 64.86486486486486%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAABwklEQVQ4y5WSTW/UMBCG8///AmdOiCK1EuKABFVRhYq4gErPXbLsbj42X3YSO45f/M6uV2HZSy2NZjSeeeYdJ8nbuxXefElxdf8H775u8fFR4+Zbjlc3P3H9kOHDD4XXdxWuHlpch/z77wVunzQ+/1Inu306+E+PHRJMPeAGeKMATDicCaZvxHuroTvGM+DH4O2hzptjfYyddCa96tEpLeZ8SIe+YTDIdjvkxT5Yid0uQ103qKoG/TDKvQr1SvcYRnPyvEuqxiDNLbLaQo8e3eBhJwejWzRtsKZBWZbY7/cSD8MAY4yY1hrjOEo8zzP6vkdiRouyqvH8/BujsSJbh4lZnksRi9sjmA3W2pMnvOs68c45eO8DUFbosdlswkqVFM6zw3a7FVVUQYWr1Uru2cyaqJCeIA6n2sQGVaTzsm07SU7ThKIoRFld1wIkjDVRHUGM6dlPk48yTw7nh9A0TZGHtbnSci0O4yDCGRO+tMQdgZQdjfLjhyCISviGHESoUkryBC6Nd/8BeTiJCgihupiPdZdiHgq5COS09Xot7xihXDP+MlR6bszzvS8C4xdbvlFcNz7J8omWuX+A5+CXHvb9BSXt7l//unjFAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;認証情報の作成&quot;
        title=&quot;認証情報の作成&quot;
        src=&quot;/static/9059cb4706fa7904d0125e2fdeb53f9b/fcda8/apiselect.png&quot;
        srcset=&quot;/static/9059cb4706fa7904d0125e2fdeb53f9b/12f09/apiselect.png 148w,
/static/9059cb4706fa7904d0125e2fdeb53f9b/e4a3f/apiselect.png 295w,
/static/9059cb4706fa7904d0125e2fdeb53f9b/fcda8/apiselect.png 590w,
/static/9059cb4706fa7904d0125e2fdeb53f9b/efc66/apiselect.png 885w,
/static/9059cb4706fa7904d0125e2fdeb53f9b/d7abb/apiselect.png 959w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;不正な利用を避けるため、キーに制限をつけることができます。以下手順です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アプリケーションの制限で「Androidアプリ」をチェック&lt;/li&gt;
&lt;li&gt;Android アプリに使用を限定で、項目を追加してパッケージ名とSHA-1証明書のフィンガープリントを登録
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e6de45d4db1f5ef7896d2a5fd639d782/fe9f1/restrictkey.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 95.94594594594595%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAAsTAAALEwEAmpwYAAACNElEQVQ4y61U2Y7TQBD0//8XQkICNksgzoIghxMf8X2NPYeL7smBkzjZF0YqTafjrqku99jxghhrL8RmF2EfpkiKBlWrkFcdfv7ewvMPWHkBdmGCou6R19006Pmi6eEYrdD3Ak1dwmiJf2tA09TIsxRajfPPl9N1ElXdoqwaaAMoPdA+0K6RJAkWCxdxHKMoClRVhbIsCRXqukaWZTaXZbnNaWPg5LWBd5BYBUTaKJQtKesMDJGKMkXo7+D+2uLPxqcDYuz2e/i+jzAMsd1ubex5nt37nlsm1opO22y2SNPUyjbDAM6zmq7rIERHZClZ0Dxtd6A6Rylli6IoQhAEthUm4/x6vaaDNlgul5jP5zZmVbyzHSyAleV5bg/jOkeTV4y2bU/+lPYPBpMzuJXhpJoLz7lzDccXhY/kSymxJ7/YeC5iNRxzN6x+ql37ljm4BY9MLw12foyIzGcl406EEBM1EwrHhFIqeLs94sPBquKxYdw+e0v6gPDYMo8Djwcb77ouVquVVXj2lmdw7Okk4ZiYX8K9V9PqHio870zG7SZ0S+JDhMFoa8XU4qs5nA5/TEgIEgEvKBEmHcJMExSCVN7BTyQaod9rGchLgfCQIclqlPRFKeh301Jxpy3BGFKZ67GZ8pBbEaJF3wkbK0nGX1q/xrmGborBPY4zd+3pEfy/0Xw1DX0DJVqhSKG61Dr4z8v59OU7Pr+4+Pq6xIvFG2aM2RIfPi4sXilmfHuCOeHH7A1/AaMTwVl4GL7FAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;アプリケーションの制限&quot;
        title=&quot;アプリケーションの制限&quot;
        src=&quot;/static/e6de45d4db1f5ef7896d2a5fd639d782/fcda8/restrictkey.png&quot;
        srcset=&quot;/static/e6de45d4db1f5ef7896d2a5fd639d782/12f09/restrictkey.png 148w,
/static/e6de45d4db1f5ef7896d2a5fd639d782/e4a3f/restrictkey.png 295w,
/static/e6de45d4db1f5ef7896d2a5fd639d782/fcda8/restrictkey.png 590w,
/static/e6de45d4db1f5ef7896d2a5fd639d782/fe9f1/restrictkey.png 883w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;API の制限で「Maps SDK for Android」を選択&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 584px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/90ef07fa03393c72a15aa19c170179ea/e05eb/apirestrict.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 39.86486486486486%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA60lEQVQoz6WR3WqEMBCF8/6v1Suv9ka0uJaWsnbX1I0bNf/RUye20MJSLA18zDAzHOZM2DiOkFKCcw5rLf77WFVVqOsaWZah6zosywLvPUIIu4kxpjjPM9gwDBBCoO/7JGiMSYLOuV3QLGmQU8qZvPXQWqUCNcj2XrEvaAmlVMrZ6SLxcGhRliWKokgxz3M0TZPEaVBrfRfzGa01mKYxzTN+nWDsdod5jukOG/FXfIhwfoNya8k+bdiu3teDeh/W5k/8HahOH3AbHbiwENJBDCtS4+1dgb2eBzw+XXB8blH9geNLi/obVLtKiw9o1mjSh4a2fAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;APIの制限&quot;
        title=&quot;APIの制限&quot;
        src=&quot;/static/90ef07fa03393c72a15aa19c170179ea/e05eb/apirestrict.png&quot;
        srcset=&quot;/static/90ef07fa03393c72a15aa19c170179ea/12f09/apirestrict.png 148w,
/static/90ef07fa03393c72a15aa19c170179ea/e4a3f/apirestrict.png 295w,
/static/90ef07fa03393c72a15aa19c170179ea/e05eb/apirestrict.png 584w&quot;
        sizes=&quot;(max-width: 584px) 100vw, 584px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;下部にある保存を選択して登録します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記で登録した「APIキー」を選択すると、API Key 文字列を確認できるのでコピーします。&lt;/p&gt;
&lt;h3&gt;API key を app.json に追加&lt;/h3&gt;
&lt;p&gt;上記の API Key を app.json の &lt;code&gt;android.config.googleMaps.apiKey&lt;/code&gt; に設定します。&lt;/p&gt;
&lt;p&gt;これでGoogle Map API を利用するために必要な設定は完了です。&lt;/p&gt;
&lt;p&gt;iOS でも利用したい場合は上記の工程を「Maps SDK for iOS」に対してもう一度行うことになります。&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;import MapView, { Marker } from &amp;quot;react-native-maps&amp;quot;;

~~~

  const marker = {
    title: title,
    latlng: {
      latitude: Number(latitude),
      longitude: Number(longitude),
    },
  };

~~~

  return (
      &amp;lt;View style={styles.container}&amp;gt;
        &amp;lt;MapView
          style={styles.mapStyle}
          initialRegion={{
            latitude: marker.latlng.latitude,
            longitude: marker.latlng.longitude,
            latitudeDelta: 0.0024,
            longitudeDelta: 0.0024,
          }}&amp;gt;
          &amp;lt;Marker coordinate={marker.latlng} title={marker.title} /&amp;gt;
        &amp;lt;/MapView&amp;gt;
      &amp;lt;/View&amp;gt;
  );&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;MapViewで地図のコンポーネントを表示します。initialRegion を渡すことで初期表示の場所を設定できます。&lt;/p&gt;
&lt;p&gt;地図常にマーカーを設置することもできます。child としてMarkerを渡せばそこにマーカーを表示できます。位置はもちろん、タイトルを設定したり任意のコンポーネントを設定できます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;アプリによっては地図を表示することで、もっと便利な機能になります。
react-native-maps を使えば簡単に実装できるのでおすすめです。&lt;/p&gt;
&lt;p&gt;設定が少しややこしいですが Expo のドキュメントに詳しく書いてあるので、とても親切でした。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[AppTrackingTransparency の対応]]></title><description><![CDATA[少し前に、AppTrackingTransparency の対応を行いましたので、その時の対応内容をメモしています。
他アプリへ反映する時のメモとして自分用に残しておきます。 結論を先に書くと Expo のパッケージ「expo-tracking-transparency…]]></description><link>https://honmushi.com/2021/07/08/app-tracking-transparency/</link><guid isPermaLink="false">https://honmushi.com/2021/07/08/app-tracking-transparency/</guid><pubDate>Thu, 08 Jul 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;少し前に、AppTrackingTransparency の対応を行いましたので、その時の対応内容をメモしています。
他アプリへ反映する時のメモとして自分用に残しておきます。&lt;/p&gt;
&lt;h2&gt;結論を先に書くと&lt;/h2&gt;
&lt;p&gt;Expo のパッケージ「&lt;code&gt;expo-tracking-transparency&lt;/code&gt;」を使って簡単に対応できました。
ポップアップの出し方やテキストについては検討が必要ですが、必要な対応としては完了です。&lt;/p&gt;
&lt;h2&gt;対応が必要になったきっかけ&lt;/h2&gt;
&lt;p&gt;久しぶりにアプリをアップデートしようと思いストアに審査を申し込んだところ弾かれました。
ざっくりとは以下の内容です。&lt;code&gt;Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing&lt;/code&gt; が原因です。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;App Store Connect&lt;/p&gt;
&lt;p&gt; Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing&lt;/p&gt;
&lt;p&gt; The app privacy information you provided in App Store Connect indicates you collect data in order to track the user, including Product Interaction, Advertising Data, Crash Data, Coarse Location, Device ID, and Performance Data. However, you do not use App Tracking Transparency to request the user’s permission before tracking their activity.&lt;/p&gt;
&lt;p&gt; Starting with iOS 14.5, apps on the App Store need to receive the user’s permission through theAppTrackingTransparency framework before collecting data used to track them. This requirement protects the privacy of App Store users.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;結構前から話題になっていた以下の件によるものです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/jp/news/?id=ecvrtzt2&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://developer.apple.com/jp/news/?id=ecvrtzt2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;アプリでのユーザー情報のトラッキングについて、ユーザーの同意が必要になるという方針です。
必要であれば、SDKに用意されているポップアップを使って権限のリクエストが必要になりました。&lt;/p&gt;
&lt;p&gt;最近ではこの内容のテレビCMも見かけますね。&lt;/p&gt;
&lt;p&gt;この件についてずっと対応していなかったので、今回のアップデート審査にて引っかかったということです。&lt;/p&gt;
&lt;h2&gt;対応内容&lt;/h2&gt;
&lt;p&gt;Expo を利用するなら以下のパッケージを使うことで簡単に対応できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/latest/sdk/tracking-transparency/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/latest/sdk/tracking-transparency/&lt;/a&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;import { requestTrackingPermissionsAsync } from &amp;#39;expo-tracking-transparency&amp;#39;;

~~~

   const { status } = await requestTrackingPermissionsAsync();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記をアプリ起動後に呼ぶようにすれば、ポップアップが表示され権限のリクエストが行われます。&lt;/p&gt;
&lt;h3&gt;アプリインストール後、1 回のみリクエストが行われます&lt;/h3&gt;
&lt;p&gt;許可・拒否を一度選択すると次からはポップアップは表示されなくなります。
端末の設定から変更しない限り、権限も変更できないです。&lt;/p&gt;
&lt;h3&gt;Expo SDK 41以降でないと使えません&lt;/h3&gt;
&lt;p&gt;SDK のバージョンが40以下の場合はこのパッケージが使えません。
41以上にアップデートしておきましょう。&lt;/p&gt;
&lt;h3&gt;info.plist&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/latest/config/app/#infoplist&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/latest/config/app/#infoplist&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;権限リクエストを行う際の説明メッセージを設定する必要があります。
info.plist に設定する必要があり、Expo の場合は &lt;code&gt;app.json&lt;/code&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;    &amp;quot;ios&amp;quot;: {
      &amp;quot;infoPlist&amp;quot;: {
        &amp;quot;NSUserTrackingUsageDescription&amp;quot;: &amp;quot;「許可」することで表示される広告がユーザーに最適化された内容になります。&amp;quot;,
      }
    },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Expo go での確認の際は上記メッセージが反映されておらず、デフォルトの英語メッセージが表示されている状態でした。
Expo go に設定されているテキストでリクエストメッセージが表示されていたようです。
自分のアプリをスタンドアローンでビルドしたものやストアでリリースしたものでは、意図通り info.plist に設定したメッセージが表示されることを確認しました。&lt;/p&gt;
&lt;h2&gt;App Store 再審査への提出&lt;/h2&gt;
&lt;p&gt;修正を行った後再審査へ提出します。
レビューで弾かれた際のメールに以下の記述がありますので注意しましょう。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you track users, you must implement App Tracking Transparency and request permission before collecting data used to track. When you resubmit, indicate in the Review Notes where the permission request is located.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;再審査を申請する際に権限のリクエストを追加した場所をReview Notes に示す必要がある様子です。
私はレビューメッセージに対する返信として、「アプリトップページに追加しました」という内容のメッセージを送った上で再申請を依頼しました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;今回の対応が必要なことはずっと把握していたのですが後回しにしていました。
審査を行う時になって初めてやらないといけないことを思い出したので、何でも早めに対応しておくこを心がけたいです。&lt;/p&gt;
&lt;p&gt;対応自体は簡単に済みました。実際に利用するユーザーの体験としてはもう少し検討の余地があります。
ただし、表示のさせ方などで審査に引っ掛かる場合があるようですので、注意して設計したいです。&lt;/p&gt;
&lt;p&gt;表示の仕方やメッセージの内容など、その他にもいろいろありますが現時点ではこれだけの対応にしておきました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[expo release channel について]]></title><description><![CDATA[React Native でアプリを作る場合にExpoを利用することで、便利な機能を使うことができます。
その中でも、ストアでの審査・公開を挟まずにアプリのアップデートを配布できるOTAアップデートはとても便利です。 この記事ではOTA…]]></description><link>https://honmushi.com/2021/07/08/expo-release-channel/</link><guid isPermaLink="false">https://honmushi.com/2021/07/08/expo-release-channel/</guid><pubDate>Thu, 08 Jul 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native でアプリを作る場合にExpoを利用することで、便利な機能を使うことができます。
その中でも、ストアでの審査・公開を挟まずにアプリのアップデートを配布できるOTAアップデートはとても便利です。&lt;/p&gt;
&lt;p&gt;この記事ではOTAアップデートを行う際に設定できる「releas channel」についての情報をまとめます。&lt;/p&gt;
&lt;h2&gt;結論を先に書くと&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Expo を利用してビルドする際に「channel」を設定することで、OTAアップデートを制御できる。&lt;/li&gt;
&lt;li&gt;同じ channel で新しい公開ビルドがあれば、OTAアップデートが行われる。&lt;/li&gt;
&lt;li&gt;別名の channel でビルドを行えばOTAアップデートは行われない。&lt;/li&gt;
&lt;li&gt;個人的には channel は「v2.0」の形で、メジャー・マイナーバージョンを設定している。パッチバージョンの更新のみOTAアップデートの対象にする方針。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;release channel とは&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/distribution/release-channels/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/distribution/release-channels/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;リリースチャンネルを使うことでOTAアップデートにより更新を配布するか制御ができます。&lt;/p&gt;
&lt;p&gt;ユーザーの端末のアプリに設定されている channel と同じ channel で新しいビルドが Expo にある場合、OTAアップデートが実行されます。
別名の channel であればOTAアップデートの対象にはなりません。&lt;/p&gt;
&lt;p&gt;他にも Expo SDK のバージョンが異なる場合など、OTAアップデートの対象にならない条件があります。&lt;/p&gt;
&lt;p&gt;テスト環境用ビルドを用意したい場合やOTAアップデートを行いたくない場合に、channel を利用して制御します。
そうしないと、思わぬ更新がユーザーの端末に配布されてしまう場合があります。不具合やまだ確認中の新機能や画面が公開されてしまっては困ります。&lt;/p&gt;
&lt;h2&gt;コマンド&lt;/h2&gt;
&lt;p&gt;Expo でビルドする際のコマンドを以下のようにします。&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;expo build:ios --release-channel &amp;lt;your-channel&amp;gt;
expo build:android --release-channel &amp;lt;your-channel&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;特にチャンネルを指定しない場合は「default」チャンネルになっています。&lt;br&gt;
前回のビルドも default チャンネルで行っている場合、OTAアップデートが有効になります。ビルドを行った時点でアップデートが配布されることになるので、意図しないアプリが配布されることにつながるので注意が必要です。&lt;/p&gt;
&lt;p&gt;実機確認用にビルトしたい場合やリリース日をちゃんと制御したい場合であれば、チャンネルを指定してOTAアップデートが行われないように制御しましょう。&lt;/p&gt;
&lt;h2&gt;運用方針&lt;/h2&gt;
&lt;p&gt;基本的にOTAアップデートを制御できるよう、チャンネルを指定してビルドするのがおすすめです。&lt;/p&gt;
&lt;p&gt;個人的な運用方針としては、メジャーバージョンとマイナーバージョンの数字で、channel 文字列を設定しています。
たとえば、2.1.4 のバージョンのアプリをビルドする時のチャンネルは以下の文字列を指定しています。&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;v2.1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こうすることで、パッチバージョンの更新はOTAアップデートで配布。
マイナー・メジャーバージョンの更新はOTAアップデートで配布せずにストアから審査・公開を経てアップデートする。&lt;/p&gt;
&lt;p&gt;という形にしています。&lt;/p&gt;
&lt;p&gt;パッチバージョンはストアでリリースしなくてもよいのですが、私はストアにも反映しています。
OTAアップデートは不具合に対する急ぎの対応や、日時を制御したいお知らせメッセージなどを審査なしで配布する目的で利用しているイメージです。&lt;/p&gt;
&lt;h2&gt;ビルドスクリプト&lt;/h2&gt;
&lt;p&gt;上記のルールで運用するにあたって、app.json の version の値を確認してコマンドを実行することになります。&lt;br&gt;
毎回やるのは面倒ですしコマンドが長いので、npm script で実行できるようにしました。&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;  &amp;quot;scripts&amp;quot;: {
    &amp;quot;version&amp;quot;: &amp;quot;echo v$(expo config | grep &amp;#39;^  version:&amp;#39; | grep -oE &amp;#39;[0-9]+.[0-9]+&amp;#39;)&amp;quot;,
    &amp;quot;build:ios&amp;quot;: &amp;quot;expo build:ios --release-channel $(npm run version --silent)&amp;quot;,
    &amp;quot;build:android&amp;quot;: &amp;quot;expo build:android --release-channel $(npm run version --silent)&amp;quot;,
  }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;version&lt;/code&gt; でapp.json の version の値を出力します。app.json から直接検索すればいいですが、せっかくなので &lt;code&gt;expo-cli&lt;/code&gt; の config コマンドを利用してます。&lt;br&gt;
version の行を出力して、そのメジャー・マイナーバージョン部分の文字列のみを抽出しています。sed とか使ってもできそうですが npm script に書く時のエスケープが面倒だったので、単純な grep を重ねています。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;build:ios&lt;/code&gt; および &lt;code&gt;build:android&lt;/code&gt; で上記のバージョン出力スクリプトを利用して、チャンネルを指定したビルドコマンドを実行します。&lt;br&gt;
&lt;code&gt;--silent&lt;/code&gt; は npm script 実行の際にログを無視して出力しないようにするオプションですね。これで version コマンドの出力のみを受け取っています。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Expo を利用する最初のうちは channel を指定せず、基本 default チャンネルでビルドしていました。&lt;br&gt;
ある日「4/1 から変更を反映したい！それまでは更新したくない！」という要件ができたとき、OTAアップデートが邪魔になりました。
調べた結果、channel を使うことでOTAアップデートを制御できたので、それを使って審査用アプリ提出や当日のアップデート配布をスムーズに行えました。&lt;/p&gt;
&lt;p&gt;とても便利ですが、default のまま運用していると思わぬ時に事故を起こす可能性があります。なるべく channnel は意図的に設定するルールがいいですね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native の便利なリンク集]]></title><description><![CDATA[React Native の開発でよく参考にしているリンクのまとめです。
実際の開発の参考になることもありますし、普段の情報収集としてもたまにのぞいておくと便利です。 さまざまな情報がまとまっているページ https://github.com/jondot/awesome…]]></description><link>https://honmushi.com/2021/06/09/react-native-usefull-links/</link><guid isPermaLink="false">https://honmushi.com/2021/06/09/react-native-usefull-links/</guid><pubDate>Wed, 09 Jun 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native の開発でよく参考にしているリンクのまとめです。
実際の開発の参考になることもありますし、普段の情報収集としてもたまにのぞいておくと便利です。&lt;/p&gt;
&lt;h2&gt;さまざまな情報がまとまっているページ&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jondot/awesome-react-native&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/jondot/awesome-react-native&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Awesome React Native is an awesome style list that curates the best React Native libraries, tools, tutorials, articles and more. PRs are welcome!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ライブラリやチュートリアルなど、さまざまなジャンルのURLがまとまっているページです。
React Native で使えるライブラリがスター数と概要でリストされていたり、関連するカンファレンスの情報やブログ・動画などのリンクもあります。&lt;/p&gt;
&lt;p&gt;量が多いので全部見るのは難しいですがカテゴリーごとに整理されています。必要な時にこのページで探してみるとヒントと出会えることが多いです。&lt;/p&gt;
&lt;h2&gt;UIコンポーネントライブラリ集&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/madhavanmalolan/awesome-reactnative-ui&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/madhavanmalolan/awesome-reactnative-ui&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;React Native で利用できるUIコンポーネント集です。実際のスクショ付きで紹介されていますので、わかりやすくなっています。
更新日とかスター数も表示されているので選定する際の参考にもなります。&lt;/p&gt;
&lt;p&gt;暇な時こういったコンポーネント集に目を通しておくと、開発の際「あのコンポーネント使ったら簡単に実装できるかも」といったアイデアが生まれます。
普段からの情報収集として一覧を眺めてみると面白いです。&lt;/p&gt;
&lt;h2&gt;StyleSheet と styled-components について&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/mindorks/everything-to-know-about-styling-in-react-native-7e30aed53ad&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://medium.com/mindorks/everything-to-know-about-styling-in-react-native-7e30aed53ad&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In this article, I will talk about the two most popular ways of styling React Native Apps — StyleSheet and styled-components. We will look at how to structure the style objects and I will share a few tips!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;React Native でのコンポーネントのstyle の書き方のTipsといった内容の記事です。&lt;/p&gt;
&lt;p&gt;StyleSheet を使うか styled-components を使うかの検討ももちろんですが、以下のようなテクニックも紹介されています。
ベタガキで実装してしまって後から困った経験がある人は参考にしてみると良いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;スタイルの中でコードが解釈されるので、padding やアイコンサイズなど共通化できる&lt;/li&gt;
&lt;li&gt;スタイルをのオブジェクトをスプレッド演算子で展開すれば、別スタイルに継承して使うことができる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;React Native で使えるOSフォント集&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/react-native-training/react-native-fonts&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/react-native-training/react-native-fonts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;React Native で使えるOS組み込みのフォントの一覧です。情報が少し古いようですので確認は必要ですが、カスタムフォントなしで利用できるフォントが整理されています。&lt;/p&gt;
&lt;p&gt;Android と iOS それぞれで分けて紹介されています。実際に利用する時にはOSでの分岐が必要になります。
こういった情報がまとまっているのは助かりますね。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;現時点で思いついた便利なリンク集をまとめました。新しいものを見つけたら追加していきます。&lt;/p&gt;
&lt;p&gt;こういった便利なツール集やリンク集があるのはとても助かりますね。自分でも作りたいですが管理・更新が大変そうなのでなかなか手が出せません。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[バージョンを指定して tmux をインストールする]]></title><description><![CDATA[Ubuntu で tmux のバージョンを指定してインストールする方法のメモです。 通常であれば、apt を使ってインストールすれば問題ありません。
たまたま、.tmux.conf を他の環境と共通化していた時に、設定の内容でエラーが発生しました。
エラーの原因は tmux…]]></description><link>https://honmushi.com/2021/02/12/tmux-version-install/</link><guid isPermaLink="false">https://honmushi.com/2021/02/12/tmux-version-install/</guid><pubDate>Fri, 12 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ubuntu で tmux のバージョンを指定してインストールする方法のメモです。&lt;/p&gt;
&lt;p&gt;通常であれば、apt を使ってインストールすれば問題ありません。
たまたま、&lt;code&gt;.tmux.conf&lt;/code&gt; を他の環境と共通化していた時に、設定の内容でエラーが発生しました。
エラーの原因は tmux のバージョンによって互換性のない記述があることでした。&lt;/p&gt;
&lt;p&gt;解決するために、tmux のバージョンを指定して自分でビルドしてインストールする対応を行いました。
そのときの手順をメモしています。&lt;/p&gt;
&lt;h2&gt;対応前の状態&lt;/h2&gt;
&lt;p&gt;Ubuntu で使っている tmux のバージョンを確認したところ &lt;code&gt;2.6&lt;/code&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;tmux -V&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;mac で使っている tmux のバージョンは &lt;code&gt;2.9&lt;/code&gt; でした。&lt;/p&gt;
&lt;p&gt;Ubuntu の方のバージョンが古く、apt でインストールしていたため少し古いものが入っていました。&lt;/p&gt;
&lt;p&gt;バージョン 2.9 では、いくつかの設定の記述について後方互換製のない修正が行われています。
そのためエラーに遭遇したというわけです。&lt;/p&gt;
&lt;p&gt;今回は、各環境で使うバージョンを 2.9 に揃える対応を行いました。&lt;/p&gt;
&lt;h2&gt;対応&lt;/h2&gt;
&lt;p&gt;ざっくりやることは以下です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;必要なパッケージのインストール&lt;/li&gt;
&lt;li&gt;バージョンを指定してgithub からcloneする&lt;/li&gt;
&lt;li&gt;ビルドの設定を用意&lt;/li&gt;
&lt;li&gt;ビルド&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&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;sudo apt install git automake bison build-essential pkg-config libevent-dev libncurses5-dev&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;バージョンを指定してgithub からcloneする&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;git clone -b 2.9 https://github.com/tmux/tmux&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;ビルドの設定を用意&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;cd tmux
./autogen.sh
./configure --prefix=/usr/local &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;念の為ビルド先を指定していますが、デフォルトでも同じだったはず。&lt;/p&gt;
&lt;h3&gt;ビルド&lt;/h3&gt;
&lt;p&gt;上記で作られた Makefile ファイルを実行します。&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
make install&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上でインストールは完了です。&lt;/p&gt;
&lt;h2&gt;確認&lt;/h2&gt;
&lt;p&gt;あとは tmux のパスとバージョンを確認して、意図したものになっていれば成功です。&lt;/p&gt;
&lt;p&gt;PATHの設定によっては元から入っているものが以前のまま有効になってしまいます。環境変数も確認しておきましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;バージョンを指定してインストールしたいことがそもそも少ないですが、何かの参考になれば良いです。&lt;/p&gt;
&lt;p&gt;同様に最新のバージョンを使いたいという場合にも、同じ手順でできるはずです。 clone するときの指定を変えるとか、チェックアウトするとかですね。その場合にも参考になるはずです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[shell のショートカットのメモ]]></title><description><![CDATA[shell で使えるショートカットです。
人に教える機会があったので、ついでにメモとして残してます。 自分でも使っていないものもあります。この機会に覚えてしまって使いこなせるようになりたいです。 移動 Ctrl + f カーソルを右に移動 Ctrl + b…]]></description><link>https://honmushi.com/2021/02/10/shell-keys/</link><guid isPermaLink="false">https://honmushi.com/2021/02/10/shell-keys/</guid><pubDate>Wed, 10 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;shell で使えるショートカットです。
人に教える機会があったので、ついでにメモとして残してます。&lt;/p&gt;
&lt;p&gt;自分でも使っていないものもあります。この機会に覚えてしまって使いこなせるようになりたいです。&lt;/p&gt;
&lt;h2&gt;移動&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl + f&lt;/code&gt;&lt;br&gt;
カーソルを右に移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + b&lt;/code&gt;&lt;br&gt;
カーソルを左に移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + a&lt;/code&gt;&lt;br&gt;
カーソルを先頭へ移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + e&lt;/code&gt;&lt;br&gt;
カーソルを末へ移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + c&lt;/code&gt;&lt;br&gt;
コマンドを中断&lt;br&gt;
入力中のコマンドを無視して改行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + l&lt;/code&gt;&lt;br&gt;
表示内容更新、現在の行が一番上に来る&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;検索&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl + r&lt;/code&gt;&lt;br&gt;
コマンドの履歴から検索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + n&lt;/code&gt;&lt;br&gt;
履歴を進む&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + p&lt;/code&gt;&lt;br&gt;
履歴を戻る&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;カット・ペースト&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl + h&lt;/code&gt;&lt;br&gt;
Backspace&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + d&lt;/code&gt;&lt;br&gt;
文字を消す&lt;br&gt;
入力がない状態だとshellを終了&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + u&lt;/code&gt;&lt;br&gt;
入力中のコマンド切り取り&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + w&lt;/code&gt;&lt;br&gt;
前の単語を切り取り&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + k&lt;/code&gt;&lt;br&gt;
後ろを切り取り&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + y&lt;/code&gt;&lt;br&gt;
貼り付け&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;以上です。&lt;/p&gt;
&lt;p&gt;あまり使わないものもありますが、shell での作業は意外と多いのでこの辺のショートカットを覚えておくと何かと便利です。&lt;/p&gt;
&lt;p&gt;これと言った情報でもないですが備忘のために残してます。何かの参考になれば。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[github のリモートからの pull でエラーになる場合の対処]]></title><description><![CDATA[久しぶりに扱うリポジトリで、git pull を行ったところエラーになってしまう現象に出会いました。
その時の対応をメモしておきます。 結論を先に言うと 以前SSH公開鍵を登録して、ID・PW…]]></description><link>https://honmushi.com/2021/01/08/git-pull-error/</link><guid isPermaLink="false">https://honmushi.com/2021/01/08/git-pull-error/</guid><pubDate>Fri, 08 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;久しぶりに扱うリポジトリで、git pull を行ったところエラーになってしまう現象に出会いました。
その時の対応をメモしておきます。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;以前SSH公開鍵を登録して、ID・PWを逐一入力しなくていいようにしました。それと一部のリポジトリのリモート設定の組み合わせによって、発生していた様子です。&lt;/p&gt;
&lt;p&gt;以下のコマンドで、git remote の再設定を行えば解決しました。&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;git remote set-url origin git@github.com:[ユーザー名]/[リポジトリ].git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;現象&lt;/h2&gt;
&lt;p&gt;git pull を行うと以下のエラーが発生していました。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;remote: Invalid username or password.
fatal: Authentication failed for ’&lt;a href=&quot;https://github.com/kakukakug/betsumushideploy.git/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/kakukakug/betsumushideploy.git/&lt;/a&gt;’&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;状況&lt;/h2&gt;
&lt;p&gt;以下コマンドでremote の設定を確認します。&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;git remote -v&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下のような出力が得られました。remote の設定がURLによる設定になっています。
ユーザー名とリポジトリ名を指定した設定に変更すれば解決しそうです。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;origin  &lt;a href=&quot;https://github.com/kakukakug/betsumushideploy.git&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/kakukakug/betsumushideploy.git&lt;/a&gt; (fetch)
origin  &lt;a href=&quot;https://github.com/kakukakug/betsumushideploy.git&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/kakukakug/betsumushideploy.git&lt;/a&gt; (push)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;対応&lt;/h2&gt;
&lt;p&gt;以下コマンドを実行して、remote の設定を変更します。&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;git remote set-url origin git@github.com:[ユーザー名]/[リポジトリ].git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;設定を確認すると以下のような出力になるはず。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;origin  git@github.com:kakukakug/betsumushideploy.git (fetch)
origin  git@github.com:kakukakug/betsumushideploy.git (push)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;上記の設定を行ったところ、正常に git pull ができるようになりました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ずっと昔に git clone したものは、上記のURLによる設定になっているものが有りました。
同じ現象にであったら、アカウント名を使ったリモートリポジトリの指定を使うように変更していきましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Neovim のセットアップ、checkhealthを使って診断と設定を行う]]></title><description><![CDATA[Neovim 導入の際、 checkhealth を使った環境設定の診断とその結果に対しての対応を行いました。
その時の対応内容を備忘としてメモします。他の環境でセットアップするときとかの参考になればと考えています。 診断 checkhealth を実行する Neovim…]]></description><link>https://honmushi.com/2021/01/08/neovim-setup/</link><guid isPermaLink="false">https://honmushi.com/2021/01/08/neovim-setup/</guid><pubDate>Fri, 08 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Neovim 導入の際、 &lt;code&gt;checkhealth&lt;/code&gt; を使った環境設定の診断とその結果に対しての対応を行いました。
その時の対応内容を備忘としてメモします。他の環境でセットアップするときとかの参考になればと考えています。&lt;/p&gt;
&lt;h2&gt;診断&lt;/h2&gt;
&lt;h3&gt;checkhealth を実行する&lt;/h3&gt;
&lt;p&gt;Neovim を起動して以下コマンドを実行すると、環境を自分で診断します。セットアップの最初の手順として、この診断が上手く通るように対応を行いました。&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;:checkhealth &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;診断結果&lt;/h3&gt;
&lt;p&gt;ざっくりとは以下の部分でアラートが出ていましたので、順番に対応していきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tmux true color&lt;/li&gt;
&lt;li&gt;ruby&lt;/li&gt;
&lt;li&gt;python2&lt;/li&gt;
&lt;li&gt;python3&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;tmux true color&lt;/h2&gt;
&lt;p&gt;ターミナルの256色に縛られず、色の表現を意図通り反映するための設定です。
ターミナル・tmux・nvim と順番にtrue color の対応を行う必要があります。&lt;/p&gt;
&lt;p&gt;以下のコマンドで、true color に対応出来ているかチェックできます。
それぞれで実行してみて、色の境目が滑らかに変わっていることを確認します。&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 -s https://gist.githubusercontent.com/lifepillar/09a44b8cf0f9397465614e622979107f/raw/24-bit-color.sh | bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;tmux&lt;/h3&gt;
&lt;p&gt;私は &lt;code&gt;.tmux.conf&lt;/code&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;set-option -g default-terminal &amp;quot;screen-256color&amp;quot;
set-option -ga terminal-overrides &amp;#39;,xterm-256color:Tc&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Neovim&lt;/h3&gt;
&lt;p&gt;Neovim 側では &lt;code&gt;init.vim&lt;/code&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;set termguicolors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ruby&lt;/h2&gt;
&lt;p&gt;rbenv を使って Neovim 用の環境を用意して、特定環境の ruby を利用します。&lt;/p&gt;
&lt;p&gt;これで rbenv を使って ruby バージョンなどの環境を変える度に、nvim のプラグインを用意しなくてよくなるメリットがあります。&lt;/p&gt;
&lt;h3&gt;rbenv のインストール&lt;/h3&gt;
&lt;h4&gt;mac の場合&lt;/h4&gt;
&lt;p&gt;mac なら brew で問題なくインストールできます。rbenv install を使えるようにするため、ruby-build もインストールしましょう。&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;brew install rbenv
brew install ruby-build&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その後、&lt;code&gt;.zshrc&lt;/code&gt; に以下を追加します。起動時に rbenv を動作するよう設定します。&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;eval &amp;quot;$(rbenv init -)&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;Ubuntu の場合&lt;/h4&gt;
&lt;p&gt;Ubuntu では github からチェックアウトするのがおすすめです。&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;git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その後、&lt;code&gt;.zshrc&lt;/code&gt; に以下を追加します。PATH 追加と rbenv が起動するよう設定します。&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;PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;
eval &amp;quot;$(rbenv init -)&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;rbenv install を使えるようにするため、ruby-build もインストールします。&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;mkdir -p &amp;quot;$(rbenv root)&amp;quot;/plugins
git clone https://github.com/rbenv/ruby-build.git &amp;quot;$(rbenv root)&amp;quot;/plugins/ruby-build&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;rbenv を使って ruby を用意する&lt;/h3&gt;
&lt;p&gt;ruby のバージョンを指定してインストールを行い、実行環境として設定します。&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;rbenv install 2.7.2
rbenv global 2.7.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その後 nvim プラグインをインストールします。&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;gem install neovim&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;不足しているモジュールが有る場合、ruby インストールの際エラーになります。ドキュメントを参考に以下のものをインストールすると解決できました。&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;apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev libdb-dev&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;init.vim に設定を追加&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;rbenv which neovim-ruby-host&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その内容を &lt;code&gt;init.vim&lt;/code&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;let g:ruby_host_prog = &amp;#39;実行ファイルのパス&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで ruby の設定は完了です。&lt;/p&gt;
&lt;h2&gt;python&lt;/h2&gt;
&lt;h3&gt;pyenv のインストール&lt;/h3&gt;
&lt;h4&gt;mac の場合&lt;/h4&gt;
&lt;p&gt;brew を使ってインストールしましょう。virtualenv を使えるよう関連モジュールもインストールします。&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;brew install pyenv 
brew install pyenv-virtualenv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;.zshrc&lt;/code&gt; に以下を追加します。起動時に pyenv が動作するよう設定します。&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;eval &amp;quot;$(pyenv init -)&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;Ubuntu の場合&lt;/h4&gt;
&lt;p&gt;ubuntu の場合は github からチェックアウトするのがおすすめです。&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;git clone https://github.com/pyenv/pyenv.git ~/.pyenv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その後、&lt;code&gt;.zshrc&lt;/code&gt; に以下を追加します。PATH の追加と rbenv を動作するよう設定します。&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;PATH=&amp;quot;$HOME/.pyenv/bin:$PATH&amp;quot;
eval &amp;quot;$(pyenv init -)&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;virtualenv も github からチェックアウトしましょう。&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;mkdir -p &amp;quot;$(pyenv root)&amp;quot;/plugins
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;pyenv を使って python を用意する&lt;/h3&gt;
&lt;p&gt;python2 と python3 を用意します。&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;pyenv install 2.7.17
pyenv install 3.9.1&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;pyenv virtualenv 2.7.17 py2
pyenv virtualenv 3.9.1 py3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下コマンドで環境を有効化し、pip で必要パッケージをインストールします。それぞれの環境で行いましょう。&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;pyenv activate py2
pip install neovim

pyenv activate py3
pip install neovim&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;init.vim に設定を追加&lt;/h3&gt;
&lt;p&gt;以下コマンドで実行ファイルのパスを取得します。python2,3 それぞれの実行ファイルパスを取得しましょう。&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;pyenv which python&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その内容を &lt;code&gt;init.vim&lt;/code&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;let g:python_host_prog  = &amp;#39;python2 の実行ファイルパス&amp;#39;
let g:python3_host_prog = &amp;#39;python3 の実行ファイルパス&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで python の設定も完了です。&lt;/p&gt;
&lt;h2&gt;node&lt;/h2&gt;
&lt;p&gt;環境によっては node の設定も必要です。私は nvm を使って設定を行いました。&lt;/p&gt;
&lt;p&gt;nvim 用のnode を用意して、&lt;code&gt;npm install --global neovim&lt;/code&gt;を行います。
その後実行ファイルのパスを取得して、&lt;code&gt;init.vim&lt;/code&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;let g:node_host_prog = &amp;#39;実行ファイルのパス&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;自分で環境を診断できるのはとても便利ですね。これがきちんと問題なければ、一通りのプラグインは正常に動いてくれそうです。
環境の用意で使った各種ツールの導入は、それぞれのリポジトリやドキュメント通りに行えば問題なくできます。&lt;/p&gt;
&lt;p&gt;また設定などで引っかかる点があればブログへ残していく予定です。何かの参考になればよいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expo を使って iOS シミュレータにビルド済みアプリをインストールする]]></title><description><![CDATA[Expoを利用したアプリ開発にて、iOS シミュレータにビルドしたアプリをインストールする手順です。 この場合のビルドも、Expo…]]></description><link>https://honmushi.com/2020/12/01/expo-ios-simu-standalone-app/</link><guid isPermaLink="false">https://honmushi.com/2020/12/01/expo-ios-simu-standalone-app/</guid><pubDate>Tue, 01 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Expoを利用したアプリ開発にて、iOS シミュレータにビルドしたアプリをインストールする手順です。&lt;/p&gt;
&lt;p&gt;この場合のビルドも、Expoのサーバにやってもらうことができとても簡単です。&lt;/p&gt;
&lt;p&gt;エラーになってインストールできない場合があるので、その時の対処方法も記載しています。参考になれば。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;Expo のドキュメントに書いてある通りです。これを参考にやれば問題なくできます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/distribution/building-standalone-apps/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/distribution/building-standalone-apps/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Expo サーバでシミュレータ用のビルドを実行&lt;/h2&gt;
&lt;p&gt;以下のコマンドで、ビルドを開始します。基本的にはExpoサーバにリクエストして、サーバにてビルドが行われます。&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;expo build:ios -t simulator&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Expo のWebコンソールにて、ビルドの状況を確認できます。
終わるまで他のことしましょう。&lt;/p&gt;
&lt;h2&gt;生成されたAPKをダウンロード&lt;/h2&gt;
&lt;p&gt;ビルドが終わっていればAPKをダウンロードでき流ようになっています。
ダウンロードできるファイルは圧縮されているので、好きなアプリケーションを使って解凍しましょう。&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;tar -xvzf app.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;シミュレータへ D &amp;#x26; D&lt;/h2&gt;
&lt;p&gt;上記で用意したAPKをシミュレータにドラッグアンドドロップすれば、シミュレータへのインストールができます。&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;xcrun simctl install booted ./appへのパス &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;エラーが出たら&lt;/h2&gt;
&lt;p&gt;ビルドをリクエストした際のコンソールにも出力されているのですが、シミュレータへのインストール時に以下のエラーが出て失敗する場合があります。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;… is damaged and can’t be opened.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ファイルについている属性が邪魔していることが原因です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls -l@&lt;/code&gt;とかを実行すると、OSごとに特殊な属性を確認できます。
今回は&lt;code&gt;com.apple.quarantine&lt;/code&gt;という属性が邪魔をしているようです。&lt;/p&gt;
&lt;p&gt;以下のコマンドで属性を削除して、再度インストールを試してください。
xattr は属性を編集するコマンドで、-r はディレクトリを再帰的に、-d は属性の削除の意味になります。&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;xattr -rd com.apple.quarantine ./appへのパス&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;終わりに&lt;/h2&gt;
&lt;p&gt;こちらも簡単にできました。&lt;/p&gt;
&lt;p&gt;アプリ開発の場合、シミュレータでインストールして動作確認。その後、testflight を使って実機へ配布して確認。&lt;/p&gt;
&lt;p&gt;問題なければリリースの手順にしています。&lt;/p&gt;
&lt;p&gt;それぞれの手順を行うたびに調べるのはめんどくさいので、情報として残しておいていつでも参照できるようにしました。&lt;/p&gt;
&lt;p&gt;できれば覚えてしまいたいところですが、結構ややこしい面もあるのでいいかなと思っています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expo を使って iOS の シミュレータでアプリを動かす]]></title><description><![CDATA[今更ですが、Expoを利用しているときに iOS シミュレータでアプリを動かす時の手順のメモです。 特に悩むことはなく、とても簡単にできます。説明用のメモとして書き残しています。 ドキュメント 基本的には以下のドキュメントを参考に、手順通りに進めていきば確認できます。 https…]]></description><link>https://honmushi.com/2020/11/30/expo-ios-simulator/</link><guid isPermaLink="false">https://honmushi.com/2020/11/30/expo-ios-simulator/</guid><pubDate>Mon, 30 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今更ですが、Expoを利用しているときに iOS シミュレータでアプリを動かす時の手順のメモです。&lt;/p&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;https://docs.expo.io/workflow/ios-simulator/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/workflow/ios-simulator/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Xcode のインストール&lt;/h2&gt;
&lt;p&gt;Mac App Store から Xcode をインストールします。
インストールが終わったら、Xcode の Preferences から Locations のパネルで&lt;code&gt;Command Line Tools&lt;/code&gt;をインストールします。&lt;/p&gt;
&lt;h2&gt;シミュレータを起動&lt;/h2&gt;
&lt;p&gt;アプリのデバッグを開始して、Expo-cli から &lt;code&gt;i&lt;/code&gt; コマンドを入力すると、シミュレータが起動します。デバッグしているアプリがシミュレータ上で動作するはずです。&lt;/p&gt;
&lt;h2&gt;その他の参考情報&lt;/h2&gt;
&lt;h3&gt;制限されている機能&lt;/h3&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;h3&gt;Expo クライアントのアップデート&lt;/h3&gt;
&lt;p&gt;シミュレータの Expo クライアントを最新にアップデートしたい場合は以下コマンドを実行します。&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;expo client:install:ios&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;終わりに&lt;/h2&gt;
&lt;p&gt;とても簡単でした。難しいこととかややこしいことは基本的に Expo が解決してくれているので、開発に集中できます。&lt;/p&gt;
&lt;p&gt;実機で動かす時も Expo を使っていると便利ですので、使ったことない人は是非試してみて欲しいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[textlint を使って文章校正を行う]]></title><description><![CDATA[ブログを書く際に、textlint を使って文章の校正を自動でできるように設定しました。 以下に npm を使って textlint の設定を行う際の手順をメモしておきます。 textlint のインストール 特にデプロイ環境には不要なはずなので、devDependencies…]]></description><link>https://honmushi.com/2020/11/05/textlint-starting/</link><guid isPermaLink="false">https://honmushi.com/2020/11/05/textlint-starting/</guid><pubDate>Thu, 05 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ブログを書く際に、textlint を使って文章の校正を自動でできるように設定しました。&lt;br&gt;
以下に npm を使って textlint の設定を行う際の手順をメモしておきます。&lt;/p&gt;
&lt;h2&gt;textlint のインストール&lt;/h2&gt;
&lt;p&gt;特にデプロイ環境には不要なはずなので、devDependencies に追加します。&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 -D textlint&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;校正ルールの設定&lt;/h2&gt;
&lt;p&gt;校正ルールを自分で作成することもできますが結構大変です。
なので、すでに用意されているプリセットを編集して使うのがおすすめです。&lt;/p&gt;
&lt;p&gt;ここでは以下のものを使います。日本語の技術文書を書く際のルールプリセットです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/textlint-ja/textlint-rule-preset-ja-technical-writing&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/textlint-ja/textlint-rule-preset-ja-technical-writing&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;インストール&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;npm install -D textlint-rule-preset-ja-technical-writing&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;設定&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;.textlintrc&lt;/code&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;{
    &amp;quot;rules&amp;quot;: {
        &amp;quot;preset-ja-technical-writing&amp;quot;: true 
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;ルールのカスタマイズ&lt;/h3&gt;
&lt;p&gt;デフォルトではルールがかなり厳しいです。設定を変更することで自分好みに変更できますので、カスタマイズしましょう。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.textlintrc&lt;/code&gt; を編集して設定を行うことができます。&lt;br&gt;
たとえば、以下のルールを false にすることで、&lt;code&gt;！&lt;/code&gt;や&lt;code&gt;？&lt;/code&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;{
    &amp;quot;rules&amp;quot;: {
        &amp;quot;preset-ja-technical-writing&amp;quot;: {
            &amp;quot;no-exclamation-question-mark&amp;quot;: false,
        }
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;preset-ja-technical-writing のルール一覧&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;+ 1文の長さは100文字以下とする
+ カンマは1文中に3つまで
+ 読点は1文中に3つまで
+ 連続できる最大の漢字長は6文字まで
+ 漢数字と算用数字を使い分けます
+ 「ですます調」、「である調」を統一します
+ 文末の句点記号として「。」を使います
+ 二重否定は使用しない
+ ら抜き言葉を使用しない
+ 逆接の接続助詞「が」を連続して使用しない
+ 同じ接続詞を連続して使用しない
+ 同じ助詞を連続して使用しない
+ UTF8-MAC 濁点を使用しない
+ 不必要な制御文字を使用しない
+ 感嘆符!！、感嘆符?？を使用しない
+ 半角カナを使用しない
+ 弱い日本語表現の利用を使用しない
+ 同一の単語を間違えて連続しているのをチェックする
+ よくある日本語の誤用をチェックする
+ 冗長な表現をチェックする
+ 入力ミスで発生する不自然なアルファベットをチェックする
+ 対になっていない括弧をェックする&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実行するためのスクリプトの用意&lt;/h2&gt;
&lt;p&gt;textlint を簡単に実行できるよう、npm script にも設定しておきます。
npx を使って実行する形式でも問題ありません。&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;  &amp;quot;scripts&amp;quot;: {
    &amp;quot;textlint&amp;quot;: &amp;quot;./node_modules/.bin/textlint&amp;quot;,
    &amp;quot;textlint:diff&amp;quot;: &amp;quot;./node_modules/.bin/textlint $(git diff master --name-only)&amp;quot;,
  }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで以下のコマンドで textlint を実行できるようになりました。&lt;br&gt;
&lt;code&gt;--&lt;/code&gt; に続ける形で対象のファイルやディレクトリを npm script に渡しましょう。&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 run textlint -- dir/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;チェックに引っかかった項目と、行数や場所が表示されます。&lt;br&gt;
実行結果が見にくい場合は &lt;code&gt;-f pretty-error&lt;/code&gt; などをオプションで渡すと出力の形式を設定できます。&lt;/p&gt;
&lt;h2&gt;単語の表記揺れのチェック&lt;/h2&gt;
&lt;p&gt;ついでに prh というツールを使って表記揺れを統一できるようにルールを追加します。&lt;/p&gt;
&lt;h3&gt;インストール&lt;/h3&gt;
&lt;p&gt;textlint から prh を利用できるようにツールを使います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/textlint-rule/textlint-rule-prh&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/textlint-rule/textlint-rule-prh&lt;/a&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 -D textlint-rule-prh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;prh.yml の作成&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;prh.yml&lt;/code&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;rules:

    - expected: Cookie
    - expected: Expo
      pattern: expo
    - expected: JavaScript 
      pattern: javascript&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;.texrlintrc の編集&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;.textlintrc&lt;/code&gt; を編集して、 &lt;code&gt;prh.yml&lt;/code&gt; を利用し prh によるチェックが行われるように設定を追加します。&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;{
    &amp;quot;rules&amp;quot;: {
        &amp;quot;preset-ja-technical-writing&amp;quot;: {
            &amp;quot;no-exclamation-question-mark&amp;quot;: false,
        },
        &amp;quot;prh&amp;quot;: {
            &amp;quot;rulePaths&amp;quot;: [ &amp;quot;./prh.yml&amp;quot; ]
        }
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;終わりに&lt;/h2&gt;
&lt;p&gt;完璧ではありませんが textlint を使うことで、公開前に文章のチェックを行うことができるようになりました。
プログラムによって行われるので融通が聞かないところもありますが、明らかにおかしいところや冗長な部分に関してはしっかりチェックが行われます。&lt;/p&gt;
&lt;p&gt;自分で見直しをするよりも正確ですし、楽ができるのでおすすめです。文章を書く人には是非取り入れて欲しいツールです。&lt;/p&gt;
&lt;p&gt;この辺の npm ツールを簡単に取り入れられるのは、Gatsby ブログの便利なところだと感じてます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Netlify にて Gatsby build がエラーになった件の対応]]></title><description><![CDATA[Netlify にて Gatsby build がエラーになってしまい、デプロイに失敗する現象が発生しました。 調査して対応したところ解決できたので、その時の対応をメモしておきます。 結論を先に言うと Netlify のビルド時に使われている Node…]]></description><link>https://honmushi.com/2020/11/05/netlify-gatsby-build-error/</link><guid isPermaLink="false">https://honmushi.com/2020/11/05/netlify-gatsby-build-error/</guid><pubDate>Thu, 05 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Netlify にて Gatsby build がエラーになってしまい、デプロイに失敗する現象が発生しました。&lt;br&gt;
調査して対応したところ解決できたので、その時の対応をメモしておきます。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;Netlify のビルド時に使われている Node のバージョンが古かったため発生していました。
gatsby-cli をプロジェクトの package.json に追加したタイミングで表出した様子です。&lt;/p&gt;
&lt;p&gt;Netlify のビルド設定で Node のバージョンを指定することで解決できました。&lt;/p&gt;
&lt;h2&gt;現象&lt;/h2&gt;
&lt;p&gt;gatsby-cli の global インストールを止めるため、プロジェクトごとでインストールを行うようにしました。
そのことで gatsby-cli が &lt;code&gt;package.json&lt;/code&gt; に追加されました。&lt;/p&gt;
&lt;p&gt;そのあとリポジトリへプッシュを行い Netlify によるビルドを行いましたが、エラーが発生して失敗していました。&lt;/p&gt;
&lt;p&gt;ローカル環境では &lt;code&gt;gatsby build&lt;/code&gt; は正常に動作しており、&lt;code&gt;public&lt;/code&gt; ディレクトリ以下にソースコードも生成できています。&lt;/p&gt;
&lt;h2&gt;エラー内容&lt;/h2&gt;
&lt;p&gt;Netlify のコンソールにてビルド時のログを確認したところ、以下の内容が出力されていました。
&lt;code&gt;gatsby build&lt;/code&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;11:21:06 AM: $ gatsby build
11:21:07 AM: /opt/build/repo/node_modules/gatsby-cli/lib/init-starter.js:104
11:21:07 AM:   } catch {
11:21:07 AM:           ^
11:21:07 AM: SyntaxError: Unexpected token {
11:21:07 AM:     at createScript (vm.js:80:10)
11:21:07 AM:     at Object.runInThisContext (vm.js:139:10)
11:21:07 AM:     at Module._compile (module.js:617:28)
11:21:07 AM:     at Object.Module._extensions..js (module.js:664:10)
11:21:07 AM:     at Module.load (module.js:566:32)
11:21:07 AM:     at tryModuleLoad (module.js:506:12)
11:21:07 AM:     at Function.Module._load (module.js:498:3)
11:21:07 AM:     at Module.require (module.js:597:17)
11:21:07 AM:     at require (internal/module.js:11:18)
11:21:07 AM:     at Object.&amp;lt;anonymous&amp;gt; (/opt/build/repo/node_modules/gatsby-cli/lib/create-cli.js:28:20)
11:21:07 AM: ​
11:21:07 AM: ┌─────────────────────────────┐
11:21:07 AM: │   &amp;quot;build.command&amp;quot; failed    │
11:21:07 AM: └─────────────────────────────┘
11:21:07 AM: ​
11:21:07 AM:   Error message
11:21:07 AM:   Command failed with exit code 7: gatsby build
11:21:07 AM: ​
11:21:07 AM:   Error location
11:21:07 AM:   In Build command from Netlify app:
11:21:07 AM:   gatsby build&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;SyntaxError&lt;/code&gt; が出ています。
Node のバージョンが怪しいと思いましたので log 上で確認しました。&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;Now using node v8.17.0 (npm v6.13.4)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;v8.17.0&lt;/code&gt; ということで、だいぶ古いものを使っていました。
ローカル環境では&lt;code&gt;v14.12.0&lt;/code&gt; となっていましたので、ここが原因の様子です。&lt;/p&gt;
&lt;h2&gt;対応内容&lt;/h2&gt;
&lt;p&gt;Netlify のビルド時に利用する Node のバージョンを設定します。&lt;/p&gt;
&lt;p&gt;ドキュメントを確認したところ、以下 2つの方法があります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.netlify.com/configure-builds/manage-dependencies/#node-js-and-javascript&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.netlify.com/configure-builds/manage-dependencies/#node-js-and-javascript&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コンソールのEnvironment variables にて &lt;code&gt;NODE_VERSION&lt;/code&gt; を設定する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.nvmrc&lt;/code&gt; をプロジェクトのベースディレクトリに設置する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;今回は「コンソールのEnvironment variables にて &lt;code&gt;NODE_VERSION&lt;/code&gt; を設定する」のやり方で対応しました。&lt;/p&gt;
&lt;p&gt;Netlify にて Site settings の項目へ移動します。
Build &amp;#x26; deploy の画面を開き、Environment variablesの項目に以下の設定ペアを追加します。
実際のバージョンについてはローカルのものと合わせておくのが良いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Key &lt;code&gt;NODE_VERSION&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Value &lt;code&gt;v14.12.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記対応後に再度ビルド・デプロイを行いました。&lt;br&gt;
log 上でのnodeのバージョンは以下になりました。無事にビルドが成功しデプロイも行われたことを確認できました。&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;Now using node v14.12.0 (npm v6.14.8)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ついでにビルド環境の設定の更新&lt;/h2&gt;
&lt;p&gt;ついでですが、Build image selection という項目もあったので設定しておきました。
まだ設定値はBeta版のようですが、対応してみました。&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;Ubuntu Trusty 14.04
Legacy build image for older sites&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;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;Ubuntu Xenial 16.04 (default)
Current default build image for all new site&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;変更を行ったところ、build log がとてもわかりやすくなりました。
特に問題なくビルドもできているので概ね良さそうです。&lt;/p&gt;
&lt;h2&gt;終わりに&lt;/h2&gt;
&lt;p&gt;エラーが発生してしまいましたが、log から原因を突き止めて対応しました。
npm や nvm 周りではよく起きる現象なので、都度バージョンの確認などあたりをつけられるようにしておきたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[github のデフォルトブランチを master から main に変更]]></title><description><![CDATA[少し前ですが、Github にてデフォルトブランチの名前を master ではなく main…]]></description><link>https://honmushi.com/2020/11/04/github-main-branch/</link><guid isPermaLink="false">https://honmushi.com/2020/11/04/github-main-branch/</guid><pubDate>Wed, 04 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;少し前ですが、Github にてデフォルトブランチの名前を master ではなく main にする動きがありました。
新しいリポジトリを作成する際にもその旨が表示されるようになっており、大きくそういう動きがあります。&lt;/p&gt;
&lt;p&gt;あまり日本では気にしていませんでしたが、世界的に取り組まれている方針なので従っていきます。
ここでは、すでに master で稼働していたリポジトリについて、main にデフォルトブランチを変更する手順を記載しておきます。&lt;/p&gt;
&lt;h2&gt;main ブランチの作成&lt;/h2&gt;
&lt;p&gt;デフォルトブランチに設定する main ブランチを作成します。master ブランチの名前を main に変更して作成します。&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;git branch -m master main&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これでローカルにて master ブランチが main ブランチにリネームされました。&lt;/p&gt;
&lt;h2&gt;リモートリポジトリへ push&lt;/h2&gt;
&lt;p&gt;作成した main ブランチをリモートへ push します。&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;git push origin HEAD&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記コマンドでも main という名前のリモートブランチが生成されますが、アップストリームに設定されているブランチが master のままになっています。&lt;/p&gt;
&lt;p&gt;以下のコマンドでアップストリームもセットし直しましょう。pull とか差分の表示とかを行うために必要です。&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;git branch -u origin/main&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Github のリポジトリの Settings にてデフォルトブランチを変更&lt;/h2&gt;
&lt;p&gt;Github の Settings にて、Branches に移動して &lt;code&gt;Default branch&lt;/code&gt; の項目を main に変更します。&lt;/p&gt;
&lt;h2&gt;master ブランチを削除&lt;/h2&gt;
&lt;p&gt;master ブランチは不要になったので削除します。&lt;/p&gt;
&lt;p&gt;リポジトリのブランチの一覧にて、master ブランチをゴミ箱マークをクリックして削除します。&lt;/p&gt;
&lt;h2&gt;終わりに&lt;/h2&gt;
&lt;p&gt;日本の文化ではそれほど気にする人はいないようですが、外国の文化なども考慮していろいろな考え方を知っておくことは大切です。
世界的に大きな動きとして取り扱われていましたので、対応を行うとともに考え方や受け取り方の違いについても考えるきっかけになるといいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[bash から zsh へ移行する]]></title><description><![CDATA[bash を使っていましたが、zshに乗り換えました。 結構前から mac のデフォルトのシェルが zsh になっています。そちらに合わせて zsh 使おうという対応です。
もろもろの設定を備忘のためにメモしています。 zsh の設定ファイル .zshenv…]]></description><link>https://honmushi.com/2020/10/26/zsh-on-mac/</link><guid isPermaLink="false">https://honmushi.com/2020/10/26/zsh-on-mac/</guid><pubDate>Mon, 26 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;bash を使っていましたが、zshに乗り換えました。&lt;/p&gt;
&lt;p&gt;結構前から mac のデフォルトのシェルが zsh になっています。そちらに合わせて zsh 使おうという対応です。
もろもろの設定を備忘のためにメモしています。&lt;/p&gt;
&lt;h2&gt;zsh の設定ファイル&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.zshenv&lt;/code&gt; に、常に反映したい設定を定義を定義します。
&lt;code&gt;.zshrc&lt;/code&gt;にはシェルを起動した環境にて反映する設定を定義します。&lt;/p&gt;
&lt;h3&gt;git のブランチを表示&lt;/h3&gt;
&lt;p&gt;zsh のカレントディレクトリの情報に、現在のブランチ名を表示するように設定します。&lt;/p&gt;
&lt;p&gt;ホームディレクトリに &lt;code&gt;.zsh&lt;/code&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 -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;そして、zshrc に以下を記述します。&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;fpath=(~/.zsh $fpath)
if [ -f ${HOME}/.zsh/git-prompt.sh ]; then
  source ${HOME}/.zsh/git-prompt.sh
fi

setopt PROMPT_SUBST ; PS1=&amp;#39;%F{magenta}%c%f$(__git_ps1 &amp;quot; (%s)&amp;quot;) %F{yellow}\$%f &amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;現在のブランチ名と、その状態が表示されるようになりました。&lt;/p&gt;
&lt;h3&gt;git のコマンド補完&lt;/h3&gt;
&lt;p&gt;zsh にて、git のコマンド補完が動作するように設定します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.zsh&lt;/code&gt; ディレクトリにて、以下のコマンドを実行してスクリプトを取得します。
依存しているため &lt;code&gt;.bash&lt;/code&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 -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;git-completion.zsh&lt;/code&gt; を &lt;code&gt;_git&lt;/code&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;mv git-completion.zsh _git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;そして、zshrc に以下を記述します。&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;if [ -f ${HOME}/.zsh/git-completion.bash ]; then
  zstyle &amp;#39;:completion:*:*:git:*&amp;#39; script ~/.zsh/git-completion.bash
fi
autoload -U compinit
compinit -u&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;tab キーにて git のコマンドやブランチ名などの補完が効くようになりました。&lt;/p&gt;
&lt;h3&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;setopt PROMPT_SUBST ; PS1=&amp;#39;%F{magenta}%c%f$(__git_ps1 &amp;quot; (%s)&amp;quot;) %F{yellow}\$%f &amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ざっくりとは必要ないものを削除して、わかりやすいように色をつけています。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%F{magenta} --- %f&lt;/code&gt; のように &lt;code&gt;%F&lt;/code&gt; で文字色の変更ができ、&lt;code&gt;%f&lt;/code&gt; で文字色の変更を解除できます。
ちなみに f を k にすると、背景色を設定できます。&lt;/p&gt;
&lt;h3&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;RPROMPT=&amp;#39;%F{cyan}%~%f&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;デフォルトのシェルを zsh に変更&lt;/h2&gt;
&lt;p&gt;以下のコマンドを実行することで、デフォルトで起動するシェルをzshに変更できます。&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;chsh -s /bin/zsh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;終わりに&lt;/h2&gt;
&lt;p&gt;zsh に移行できました。他にも bash で使っていたlsコマンドのエイリアスとかも設定しています。&lt;/p&gt;
&lt;p&gt;問題なく動くことが確認できたら、github の dotfiles リポジトリなんかに push しておくと良いですよね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[tmux 上で nvim を使っているときに escape が遅い問題の対処]]></title><description><![CDATA[開発を行う際に tmux 上で Vim を使っています。
最近 nvim を使うようにしたところ、escape キーを押した際の反応が遅くなるという現象を発見しました。 その問題についての対処法のメモです。 結論を先に言うと .tmux.conf…]]></description><link>https://honmushi.com/2020/10/23/tmux-vim-escape/</link><guid isPermaLink="false">https://honmushi.com/2020/10/23/tmux-vim-escape/</guid><pubDate>Fri, 23 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;開発を行う際に tmux 上で Vim を使っています。
最近 nvim を使うようにしたところ、escape キーを押した際の反応が遅くなるという現象を発見しました。&lt;/p&gt;
&lt;p&gt;その問題についての対処法のメモです。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.tmux.conf&lt;/code&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;set -g escape-time 0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;現象&lt;/h2&gt;
&lt;p&gt;インサートモードにて escape キーを押した際に、1秒くらい経過しないとノーマルモードに戻らない状態でした。
&lt;code&gt;ctrl + [&lt;/code&gt; を使えばノーマルモードに戻れるので、私にとっては影響少なめでした。ただ、このままでは気持ち悪いですし、escape キーを全く使わないわけではありません。
対応が必要と考えて、調査・対応を行いました。&lt;/p&gt;
&lt;h2&gt;問題の調査&lt;/h2&gt;
&lt;p&gt;どうやら tmux で escape キー後の操作を待っている状態でした。tmux でも escape キーは意味のあるキーになっており、特別な操作のために入力待ちが発生しているようです。&lt;/p&gt;
&lt;p&gt;特にその入力待ちは不要だと思いましたので、tmux の設定で待機時間を 0にする対応を行いました。&lt;/p&gt;
&lt;h2&gt;tmux の設定ファイル&lt;/h2&gt;
&lt;p&gt;tmux の設定を行うファイル &lt;code&gt;.tmux.conf&lt;/code&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;set -g escape-time 0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで escape キーを押した際、すぐにノーマルモードへ戻るようになりました。&lt;/p&gt;
&lt;h2&gt;終わりに&lt;/h2&gt;
&lt;p&gt;問題解決です。escape キーを押した際の動作に違和感がありましたが修正できました。
tmux + nvim はとても便利なので使いこなしたいです。もちろん vscode 使ってしまうのが手取り早いですが、やっぱり入力とかコマンドとかが便利なので vim 使いたいです。
今のところ特に vim から nvim に移行して、快適になったところはまだ感じ取れていません。ゆっくり使い込んでいきたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native Upgrade Helper の紹介]]></title><description><![CDATA[React Native Upgrade Helper の紹介です。 React Native のバージョンをあげるときの参考にしているサイトで、とても助かっているので紹介します。
公式でも紹介されているのでご存じの方も多いでしょう。 React Native…]]></description><link>https://honmushi.com/2020/10/12/rn-upgrade-helper/</link><guid isPermaLink="false">https://honmushi.com/2020/10/12/rn-upgrade-helper/</guid><pubDate>Mon, 12 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native Upgrade Helper の紹介です。&lt;/p&gt;
&lt;p&gt;React Native のバージョンをあげるときの参考にしているサイトで、とても助かっているので紹介します。
公式でも紹介されているのでご存じの方も多いでしょう。&lt;/p&gt;
&lt;p&gt;React Native をバージョンアップする際には、Info.plistやgradlewなど変更を必要とするファイルがいくつかあります。それらの必要な修正内容を教えてくれるサイトです。&lt;/p&gt;
&lt;h2&gt;URL&lt;/h2&gt;
&lt;p&gt;以下のURLからアクセスできます。getパラメータで対象のバージョンを指定することもできます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://react-native-community.github.io/upgrade-helper/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://react-native-community.github.io/upgrade-helper/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;使い方&lt;/h2&gt;
&lt;p&gt;左側に現在のReact Nativeのバージョン、右側に更新先のバージョンを設定します。
その後真ん中のボタンを押せば、修正が必要なファイルを差分で表示します。&lt;/p&gt;
&lt;p&gt;package.json やPodfile、 Info.plistにbuild.gradleなどの修正が必要な箇所と内容を表示します。
内容に従って、該当ファイルを修正してビルドしましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;React Native のバージョンアップを行うと、関連パッケージの更新やネイティブ関連のライブラリアップデートが必要になるので、エラーを確認しながら都度対応していく必要がありました。
しかし、このページのおかげで必要な修正を簡単に把握できるのでとても助かっています。&lt;/p&gt;
&lt;p&gt;React Native で開発する上でとても便利なページですので紹介しました。他にも便利なものを見つけたら紹介します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[patch packageを使ってnpmパッケージに一時的な修正を行う]]></title><description><![CDATA[patch package の使い方のメモです。 以前に使う機会があったので、説明用にその時の手順をメモしておきます。
簡単にパッケージに対してパッチを当てることができるので、一時対応として使うことが出来ます。 patch package とは ざっくりとは npm…]]></description><link>https://honmushi.com/2020/10/10/patch-package/</link><guid isPermaLink="false">https://honmushi.com/2020/10/10/patch-package/</guid><pubDate>Sat, 10 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;patch package の使い方のメモです。&lt;/p&gt;
&lt;p&gt;以前に使う機会があったので、説明用にその時の手順をメモしておきます。
簡単にパッケージに対してパッチを当てることができるので、一時対応として使うことが出来ます。&lt;/p&gt;
&lt;h2&gt;patch package とは&lt;/h2&gt;
&lt;p&gt;ざっくりとは npm の postinstall を使って、node module 内のパッケージを簡単に修正できる仕組みです。&lt;/p&gt;
&lt;p&gt;もちろん、直接 node module 内のパッケージを書き換えても良いはずです。
しかしこの場合は、npm install の際に修正内容を上書きしてしまう危険があります。他にも、node module 以下を github に push しない場合、自分の環境でのみ修正が行われて他の作業者に共有しにくいなどの状況が考えられます。&lt;/p&gt;
&lt;p&gt;必要なパッケージについて、fork を行い自分で修正・管理して使うこともできます。しかし、元のパッケージの修正や開発に追従していくことや、リポジトリの管理が手間になってしまいます。&lt;/p&gt;
&lt;h2&gt;github&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ds300/patch-package&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/ds300/patch-package&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;使い方&lt;/h2&gt;
&lt;p&gt;まずは npm でインストールします。&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 patch-package --save-dev&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;package.json に以下の記述を追加して、npm install を行った際に pacth package が実行されるように設定します。&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;{
  scripts: {
    &amp;quot;postinstall&amp;quot;: &amp;quot;patch-package&amp;quot;
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その後、npde module 内の修正したいファイルに対して修正を行い、以下コマンドを実行します。&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;npx patch-package 対象のパッケージ名&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;すると &lt;code&gt;/patches&lt;/code&gt; 以下に該当パッケージとバーションがファイル名になっているファイルを生成します。&lt;/p&gt;
&lt;p&gt;これによって、npm の post install にて 実行される patch package でファイルの中身が実行され、該当のパッケージの特定のバージョンに対して修正が行われます。&lt;/p&gt;
&lt;p&gt;このパッチファイルを github に push しておくことで、他の開発者の環境にも共有することが出来ます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単にnpmのパッケージに対してパッチ修正を行うことが出来ました。&lt;/p&gt;
&lt;p&gt;そもそもは、このような修正をしないといけない状況はあまり良い状態ではありません。パッケージのリポジトリにissueを上げたりして、修正を行うことを考えるべきです。ほかバージョンを戻したりして正常に動くようにしたほうが安定することもあるはずです。&lt;/p&gt;
&lt;p&gt;ただ、今すぐ直したいときや一時的な対応ということであれば仕方ない場合もあります。
使うべき状況か・他に解決方法はないかしっかり考えた上で、利用を提案していきたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[xcode で ReactNative のビルドに失敗する時の対応]]></title><description><![CDATA[少し前の話ですが、xcodeでReactNativeのビルドを行おうとした際にエラーが発生してしまい、ビルドが失敗する現象に出会いました。 エラーの内容とか確認しつつ、検索したら原因と解決方法がわかったので、備忘としてメモしておきます。 結論を先に言うと 原因はxcode…]]></description><link>https://honmushi.com/2020/10/09/xcode-node-v/</link><guid isPermaLink="false">https://honmushi.com/2020/10/09/xcode-node-v/</guid><pubDate>Fri, 09 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;少し前の話ですが、xcodeでReactNativeのビルドを行おうとした際にエラーが発生してしまい、ビルドが失敗する現象に出会いました。&lt;/p&gt;
&lt;p&gt;エラーの内容とか確認しつつ、検索したら原因と解決方法がわかったので、備忘としてメモしておきます。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;原因はxcodeでビルドする際に動作する node のバージョンがおかしいことでした。
nvm ではなく homebrew で新しいバージョンのnodeをインストールすることで解決できました。&lt;/p&gt;
&lt;p&gt;私の環境では nvm を使って、動かす node のバージョンを管理しています。
ただ、xcode の GUI によるビルドプロセス上で使われる node のバージョンは、nvmにてインストールしたものではありませんでした。homebrew でインストールした node のものになっていました。&lt;/p&gt;
&lt;p&gt;ずっと homebrew の node についてはアップデートしていなかったので、バージョンは、&lt;code&gt;0.1.1&lt;/code&gt; とかになってました。それは動かなさそうですよね。&lt;/p&gt;
&lt;h2&gt;エラー&lt;/h2&gt;
&lt;p&gt;ざっくりとは &lt;code&gt;const&lt;/code&gt; とか &lt;code&gt;strict mode&lt;/code&gt;とかの場所でエラーが出ており、JavaScript の新しい書き方がことごとくエラーになっていました。新しいと言ってもだいぶ昔から使えるようものなので、おやっ？と思いました。&lt;/p&gt;
&lt;p&gt;node が古そう。そう考えて調べてみた所、同様の現象を見かけたので解決を試しました。&lt;/p&gt;
&lt;h2&gt;node バージョンの確認&lt;/h2&gt;
&lt;p&gt;nvm で使っている defaultの node のバージョンは十分に新しかったのですが、xcode 上からビルドする際には nvm は利用できません。nvm で管理しているものではなく本体の node が動いていました。&lt;/p&gt;
&lt;p&gt;すなわち最初からインストールされていたものや自分でインストールし直したもの。homebrewでインストールしたものと言ったところです。&lt;/p&gt;
&lt;p&gt;私の場合は &lt;code&gt;/usr/local/lib/node/bin&lt;/code&gt; にあるもので、バージョンは0.1.1とかくらいになってました。絶対動かなさそうですね。&lt;/p&gt;
&lt;h2&gt;アップデートする&lt;/h2&gt;
&lt;p&gt;homebrew を使って node をアップデートします。私は一度アンインストールしてインストールし直しました。&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;brew install node
brew link node&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;途中でファイルやディレクトリの権限関連でいくつかエラーが出ました。内容を確認しつつgroupや所有者を変更することで、無事に更新できました。&lt;/p&gt;
&lt;p&gt;homebrew で node のバージョンを上げた結果、xcode でのビルドが正常に完了するようになりました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;cuiからのビルドとかは正常に動いていたのに、xcode でのビルドは失敗するような状態でしたので、原因見つけるのに結構苦戦してしまいました。&lt;/p&gt;
&lt;p&gt;node のバージョン管理に nvm 使っていたので正常なものが使えていると思っていましたが、思わぬ盲点でした。
たまには homebrew で管理しているパッケージとかの管理や整理をしようと思いました。&lt;/p&gt;
&lt;p&gt;あと homebrew で update する際、権限関連で書き込み出来ない旨のエラーが出たので、出力に注意して行いましょう。多分 ですが、mac や 以前使っていた homebrew のバージョンが古かったりすると起きるようです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[chromeのキーボード・ショートカットのmemo]]></title><description><![CDATA[google chromeのショートカット操作のメモです。
基本的なショートカットキーコマンドをよく使うものに絞ってメモしておきます。 自分用メモです。公式サイトに全部載ってます。 参考URL https://support.google.com/chrome/answer…]]></description><link>https://honmushi.com/2020/06/16/chrome-shortcut/</link><guid isPermaLink="false">https://honmushi.com/2020/06/16/chrome-shortcut/</guid><pubDate>Tue, 16 Jun 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;google chromeのショートカット操作のメモです。
基本的なショートカットキーコマンドをよく使うものに絞ってメモしておきます。&lt;/p&gt;
&lt;p&gt;自分用メモです。公式サイトに全部載ってます。&lt;/p&gt;
&lt;h2&gt;参考URL&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://support.google.com/chrome/answer/157179?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://support.google.com/chrome/answer/157179?hl=ja&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;ウィンドウ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ctrl + n&lt;/code&gt; 新しいウィンドウ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + t&lt;/code&gt; 新しいタブ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + shift + n&lt;/code&gt; 新しいシークレットウィンドウ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + shift + t&lt;/code&gt; 閉じたタブを開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + tab&lt;/code&gt; 次のタブ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alt + 右&lt;/code&gt; 次へ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alt + 左&lt;/code&gt; 前へ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + w&lt;/code&gt;タブを閉じる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;機能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;alt + f&lt;/code&gt; メニュー&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + shift + b&lt;/code&gt; ブックマークバー表示 &lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + shift + o&lt;/code&gt; ブックマークマネージャ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + d&lt;/code&gt; ブックマークに追加&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + h&lt;/code&gt; 履歴&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shift + alt + t&lt;/code&gt; ツールバーにフォーカス&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + shift + j&lt;/code&gt; デベロッパーツール&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + u&lt;/code&gt; ソースを表示&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + l&lt;/code&gt; アドレスバーにフォーカス&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + k&lt;/code&gt; 任意の場所から検索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + r&lt;/code&gt; 再読み込み&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + shift + r&lt;/code&gt; キャッシュ無視再読込&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + f&lt;/code&gt; ページ内検索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + g&lt;/code&gt; 検索次へ&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;その他&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ctrl + p&lt;/code&gt; 印刷&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F11&lt;/code&gt; 全画面&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + j&lt;/code&gt; ダウンロード&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shift + esc&lt;/code&gt; chrome タスクマネージャ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl + shift + delete&lt;/code&gt; 閲覧履歴削除&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;覚えておくと快適です。マウス使わずにどれだけインターネントブラウジングができるかということが重要ですね。&lt;br&gt;
拡張機能入れたりしても便利になりますが、私はなるべくデフォルトで使いたい派です。&lt;/p&gt;
&lt;p&gt;個人的にはvivaldiというブラウザ使うことのほうが多いですが、まずはchromeからメモしました。そのうちvivaldiも紹介します。&lt;/p&gt;
&lt;p&gt;忘れたらこの記事見て思い出しながらブラウジングします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[vimのファイルエクスプローラ「NERDTree」の操作メモ]]></title><description><![CDATA[vimのファイルエクスプローラプラグインの1つ「NERDTree」の紹介です。 ざっくりとはVimFilerやNetrwと同様のもので、好みによって使い分けるのがおすすめです。
見た目がGUIのように見やすいのでおすすめです。Unite…]]></description><link>https://honmushi.com/2020/04/20/nerdtree-vim/</link><guid isPermaLink="false">https://honmushi.com/2020/04/20/nerdtree-vim/</guid><pubDate>Mon, 20 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;vimのファイルエクスプローラプラグインの1つ「NERDTree」の紹介です。&lt;/p&gt;
&lt;p&gt;ざっくりとはVimFilerやNetrwと同様のもので、好みによって使い分けるのがおすすめです。
見た目がGUIのように見やすいのでおすすめです。Uniteなど、他の大きいプラグインに依存していないこともおすすめポイントです。&lt;/p&gt;
&lt;p&gt;NERDTree用の拡張プラグインもあるので、色々ためしてみると良いです。&lt;/p&gt;
&lt;h2&gt;URL&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/preservim/nerdtree&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/preservim/nerdtree&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;設定&lt;/h2&gt;
&lt;p&gt;とりあえず以下のコマンドをvimrcに書いておきましょう。&lt;code&gt;CTRL + n&lt;/code&gt;でNERDTreeを起動できます。&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;map &amp;lt;C-n&amp;gt; :NERDTreeToggle&amp;lt;CR&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;コマンド&lt;/h2&gt;
&lt;h3&gt;ファイル&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;o&lt;/code&gt; ファイルを開く &lt;/li&gt;
&lt;li&gt;&lt;code&gt;t&lt;/code&gt; 別タブで開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;T&lt;/code&gt; 別タブでバックグラウンドに開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;i&lt;/code&gt; 画面分割して開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gi&lt;/code&gt; プレビューで開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;s&lt;/code&gt; 画面分割して開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gs&lt;/code&gt; プレビューで開く&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ディレクトリ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;o&lt;/code&gt; 開く・閉じる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;O&lt;/code&gt; 再帰的に開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x&lt;/code&gt; 閉じる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X&lt;/code&gt; 再帰的に閉じる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;treeを開いているときの移動&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;P&lt;/code&gt; rootディレクトリへ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p&lt;/code&gt; 親ディレクトリへ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;K&lt;/code&gt; 最初の要素&lt;/li&gt;
&lt;li&gt;&lt;code&gt;J&lt;/code&gt; 最後の要素&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl-j&lt;/code&gt; 次の要素&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctrl-k&lt;/code&gt; 前の要素&lt;/li&gt;
&lt;li&gt;&lt;code&gt;o&lt;/code&gt; open&lt;/li&gt;
&lt;li&gt;&lt;code&gt;o&lt;/code&gt; open&lt;/li&gt;
&lt;li&gt;&lt;code&gt;o&lt;/code&gt; open&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;移動&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;C&lt;/code&gt; root をここにする&lt;/li&gt;
&lt;li&gt;&lt;code&gt;u&lt;/code&gt; rootを1つ上げる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r&lt;/code&gt; リフレッシュ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;R&lt;/code&gt; 再帰的にリフレッシュ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;m&lt;/code&gt; メニュー開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd&lt;/code&gt; CWD&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CD&lt;/code&gt; rootからのCWD&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;表示&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;I&lt;/code&gt; 隠しファイルの表示&lt;/li&gt;
&lt;li&gt;&lt;code&gt;f&lt;/code&gt; フィルター&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F&lt;/code&gt; ファイルのみ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;B&lt;/code&gt; ブックマークを開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;A&lt;/code&gt; NERDTreeのみにする&lt;/li&gt;
&lt;li&gt;&lt;code&gt;q&lt;/code&gt; 閉じる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;?&lt;/code&gt; ヘルプ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ブックマーク&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;o&lt;/code&gt; 開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t&lt;/code&gt; 別タブで開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;T&lt;/code&gt; 別タブにてバックグラウンドで開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;D&lt;/code&gt; ブックマークから削除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:Bookmark &amp;#x3C;name&gt;&lt;/code&gt; ブックマークに登録&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:OpenBookmark &amp;#x3C;name&gt;&lt;/code&gt; ブックマークを指定して開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:ClearBookmark &amp;#x3C;name&gt;&lt;/code&gt; ブックマークを削除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:ClearAllBookmark&lt;/code&gt; 全部のブックマークを削除&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;こんな感じで使えます。いくつかのコマンド覚えれば使えますし、ファイル作成や削除は基本メニューニマと混ていますので、迷わず使えます。&lt;/p&gt;
&lt;p&gt;VimFilerも使いやすいですが、他プラグインに依存せず使えるNERDTreeもなかなかおすすめです。
つかったことなければぜひつかってみてください。&lt;/p&gt;
&lt;p&gt;好みに合わせていろいろ使ってみるといいですよ。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[gitのバージョンをアップデートする]]></title><description><![CDATA[Githubについて褒めたばかりですが、深刻な脆弱性が発表されました。
内容については各自で見ていただくとして、アップデート方法をまとめて記載しておきます。 以降、またアップデートが必要となった際に対応できるよう、手順をメモしておきます。
UbuntuとMac…]]></description><link>https://honmushi.com/2020/04/20/git-update/</link><guid isPermaLink="false">https://honmushi.com/2020/04/20/git-update/</guid><pubDate>Mon, 20 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Githubについて褒めたばかりですが、深刻な脆弱性が発表されました。
内容については各自で見ていただくとして、アップデート方法をまとめて記載しておきます。&lt;/p&gt;
&lt;p&gt;以降、またアップデートが必要となった際に対応できるよう、手順をメモしておきます。
UbuntuとMacのやり方のみ記載していますので、ご注意ください。&lt;/p&gt;
&lt;h2&gt;バージョン確認&lt;/h2&gt;
&lt;p&gt;インストールされているgitのバージョンを確認します。&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;git --version&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;パッチが当たっているバージョンが共有されていますので、そちらに該当しない場合は以下の手順でgitのアップデートを行いましよう。&lt;/p&gt;
&lt;h2&gt;Ubuntu&lt;/h2&gt;
&lt;h3&gt;apt-get&lt;/h3&gt;
&lt;p&gt;Ubuntuのaptの標準パッケージリストでは最新版のgitが登録されていませんでした。
ですので、そのままupgradeしても、更新が反映されません。&lt;/p&gt;
&lt;p&gt;パッチが当たっていないバージョンでは脆弱性が残っていますので、プライベートなパッケージ情報を使って最新版を取得します。
aptの公式ではないだけで出処は公式のgitです。心配することは特に無いです。&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;sudo add-apt-repository ppa:git-core/ppa
sudo apt update
apt list --upgradable
sudo apt upgrade &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Mac&lt;/h2&gt;
&lt;h3&gt;Homebrew&lt;/h3&gt;
&lt;p&gt;特に難しいことはないです。brew使って管理していれば簡単です。&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;brew update
brew upgrade git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;version確認&lt;/h2&gt;
&lt;p&gt;パッチ適用バージョンは、2.17.4、2.18.3、2.19.4、2.20.3、2.21.2、2.22.3、2.23.2、2.24.2、2.25.3、2.26.1。
ですので、上記のどれか以上になっていれば問題解決です。&lt;/p&gt;
&lt;p&gt;アップデートした所、&lt;code&gt;2.26.1&lt;/code&gt; になりました！脆弱性解決です！&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;無料のアカウントの有効範囲が増えて喜んでいたところに、ヒヤッとするニュースが飛び込んできましたね。&lt;/p&gt;
&lt;p&gt;脆弱性についてはしっかりとソフトのアップデートを行うことで、攻撃を防ぐことができます。
意識して情報のキャッチと反映を行っていくようにしましょう。gitくらいになればほっておいても情報入ってきますが、そうでもないマイナーなソフトや開発が停止してるものなどは気をつけるようにしましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Ubuntuのキーボードショートカットのmemo]]></title><description><![CDATA[Ubuntuのショートカット操作のメモです。 基本的なウインドウの操作やワークスペースの操作について、コマンドをメモしておきます。 マウス使わずにキーボードだけでどんなことができるかに着眼点をおいて、操作を紹介します。 ターミナル CTRL + ALT + t…]]></description><link>https://honmushi.com/2020/04/19/ubuntu-windows/</link><guid isPermaLink="false">https://honmushi.com/2020/04/19/ubuntu-windows/</guid><pubDate>Sun, 19 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ubuntuのショートカット操作のメモです。&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;&lt;code&gt;CTRL + ALT + t&lt;/code&gt; 端末を開く&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ウインドウ操作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SUPER + →←&lt;/code&gt; ウインドウを画面の半分に固定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + TAB&lt;/code&gt; アプリケーション切り替え&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT + TAB&lt;/code&gt; アプリケーション切り替え&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT + ESC&lt;/code&gt; ウインドウ切り替え&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + SHIFT + PAGEUP&lt;/code&gt; ウインドウを上のワークスペースに移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + SHIFT + PAGEDOWN&lt;/code&gt; ウインドウを下のワークスペースに移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + F10&lt;/code&gt; アプリメニュー表示&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT + SPACE&lt;/code&gt; ウインドウメニュー表示&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT + F4&lt;/code&gt; ウインドウを閉じる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT + F7&lt;/code&gt; ウインドウを移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT + F8&lt;/code&gt; ウインドウのサイズ変更&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ワークスペース操作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SUPER&lt;/code&gt; アクティビティ画面&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + q&lt;/code&gt; Dockのアプリに数字を表示&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + 1&lt;/code&gt; Dockのアプリの1を起動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + SHIFT + 1&lt;/code&gt; Dockのアプリの1を別ウインドウで起動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + a&lt;/code&gt; アプリを検索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUPER + m&lt;/code&gt; カレンダー&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CTRL + ALT + ↑&lt;/code&gt; 上のワークスペースへ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CTRL + ALT + ↓&lt;/code&gt; 下のワークスペースへ&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;スクリーン&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Print Screen&lt;/code&gt; 画面のスクリーンショット&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt + Print Screen&lt;/code&gt; ウィンドウのスクリーンショット&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Shift + Print Screen&lt;/code&gt; 選択領域のスクリーンショット&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Print Screen&lt;/code&gt; 画面のスクリーンショットをクリップボードにコピー&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Alt + Print Screen&lt;/code&gt; ウィンドウのスクリーンショットをクリップボードにコピー&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + Print Screen&lt;/code&gt; 選択領域のスクリーンショットをクリップボードにコピー&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;以上です。Ubuntu使って操作する際の参考になるかな。どうでしょうか。&lt;/p&gt;
&lt;p&gt;特にアプリを入れなくてもウインドウの操作やワークスペースの操作ができるようになっているので、使いこなすととても快適です。&lt;/p&gt;
&lt;p&gt;良ければぜひUbuntu使ってみてください。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Githubから「GitHub is now free for teams」のお知らせがあった]]></title><description><![CDATA[「GitHub is now free for teams」というお知らせが有りました。
すごく嬉しいですね。 https://github.blog/2020-04-14-github-is-now-free-for-teams/ private…]]></description><link>https://honmushi.com/2020/04/15/github-team-free/</link><guid isPermaLink="false">https://honmushi.com/2020/04/15/github-team-free/</guid><pubDate>Wed, 15 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「GitHub is now free for teams」というお知らせが有りました。
すごく嬉しいですね。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.blog/2020-04-14-github-is-now-free-for-teams/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.blog/2020-04-14-github-is-now-free-for-teams/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;privateリポジトリへのコラボレータの追加が制限なしに。&lt;br&gt;
organizationを作成しての管理やメンバー追加も無制限に！&lt;/p&gt;
&lt;p&gt;すごいですね！無料でほとんどのことができるのでは！&lt;/p&gt;
&lt;p&gt;しかし、CIやgithub Actions、リポジトリのサイズ制限などはあるので、フリーアカウントでは実現できないことも有ります。
運用面のセキュリティなどの面で支払いを検討することがありえます。&lt;/p&gt;
&lt;h2&gt;無制限のコラボレーター&lt;/h2&gt;
&lt;p&gt;プライベートリポジトリは自分しか見れないのですが、コラボレーターに追加すればそのアカウントと共有して、一緒に開発することが出来ます。&lt;/p&gt;
&lt;p&gt;無料アカウントでは人数に制限が有りましたが、好きなだけ登録できるようになりました。&lt;/p&gt;
&lt;h2&gt;前回の大ニュース&lt;/h2&gt;
&lt;p&gt;以前に、無料アカウントでもプライベートリポジトリを利用できるようになったと記事を書きました。2019年1月8日に書いています。
あれから時間がたってteamや複数人での利用もできるようになるとは！とてもうれしいです。&lt;br&gt;
&lt;a href=&quot;/2019/01/08/github-private/&quot;&gt;以前書いた記事:GitHubのプライベートリポジトリが無料枠でも使えるようになった&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;余裕が出たらteamアカウント等作成してCIやActionsを使い倒すつもりです。&lt;/p&gt;
&lt;p&gt;このNewsが嬉しかったので記事にしました。よく使っている人、そうでない人もGithubを活用してもらえればとうれしいです。&lt;/p&gt;
&lt;p&gt;Githubすごい！ありがとうGithub！&lt;/p&gt;</content:encoded></item><item><title><![CDATA[VimFilerの紹介]]></title><description><![CDATA[VimFilerの紹介です。
Vimのファイルのエクスプローラプラグインのひとつです。
他にはNetrwとかNERDtreeなど有りますね。 デフォルトで使えるNetrwも十分に便利なのですが、私はVimFilerを愛用しています。 以前からDefx.nvim…]]></description><link>https://honmushi.com/2020/04/14/vimfiler/</link><guid isPermaLink="false">https://honmushi.com/2020/04/14/vimfiler/</guid><pubDate>Mon, 13 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;VimFilerの紹介です。
Vimのファイルのエクスプローラプラグインのひとつです。
他にはNetrwとかNERDtreeなど有りますね。&lt;/p&gt;
&lt;p&gt;デフォルトで使えるNetrwも十分に便利なのですが、私はVimFilerを愛用しています。&lt;/p&gt;
&lt;p&gt;以前からDefx.nvimという代替となるプラグインがあるので、これからはそちらを使うほうが良さそうです。NeoVimとdeinを使うのであればDefx.nvimのほうが良さそうです。&lt;/p&gt;
&lt;p&gt;私も機会があれば移行していきますが、vimやNeoVimのバージョンなどによって正常に動かなかったりしました。落ち着くまではVimFiler使います。&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;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 g:vimfiler_as_default_explorer = 1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;使い方&lt;/h2&gt;
&lt;p&gt;基本的には&lt;code&gt;:VimFiler&lt;/code&gt;とか&lt;code&gt;:VimFilerSplit&lt;/code&gt;を入力すればエクスプローラーを開くことが出来ます。&lt;/p&gt;
&lt;h3&gt;開く&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;v プレビュー&lt;/li&gt;
&lt;li&gt;e 開く&lt;/li&gt;
&lt;li&gt;E 画面を分割して開く&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;表示&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;t ツリーを開く&lt;/li&gt;
&lt;li&gt;T ツリーをすべて開く&lt;/li&gt;
&lt;li&gt;. 隠しファイルを表示&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ファイル操作&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;c コピー&lt;/li&gt;
&lt;li&gt;m 移動&lt;/li&gt;
&lt;li&gt;K ディレクトリ作成&lt;/li&gt;
&lt;li&gt;N ファイル作成&lt;/li&gt;
&lt;li&gt;d 削除&lt;/li&gt;
&lt;li&gt;r 名前変更&lt;/li&gt;
&lt;li&gt;gs セーフモードの切り替え&lt;/li&gt;
&lt;li&gt;yy フルパスのヤンク&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;その他&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x デフォルトのアプリで開く&lt;/li&gt;
&lt;li&gt;Y pushd&lt;/li&gt;
&lt;li&gt;P popd&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;特にこだわりはないので他のプラグインを使ってもいいのですが、私の好みでVimfilerを使っています。
使いやすくて気に入っています。&lt;/p&gt;
&lt;p&gt;必要なときのためにデフォルトのNetrwの使い方もメモしておこうかなと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Vimでよく使われるプラグイン5つ]]></title><description><![CDATA[Vimでよく見るプラグイン5つをまとめて紹介です。
VSCodeのVimプラグインでもこれらが利用できるようになっていましたので、人気も高いです。 具体的には以下の5つで、どれも便利です。
neoBundle…]]></description><link>https://honmushi.com/2020/04/14/vim-plugin-5/</link><guid isPermaLink="false">https://honmushi.com/2020/04/14/vim-plugin-5/</guid><pubDate>Mon, 13 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Vimでよく見るプラグイン5つをまとめて紹介です。
VSCodeのVimプラグインでもこれらが利用できるようになっていましたので、人気も高いです。&lt;/p&gt;
&lt;p&gt;具体的には以下の5つで、どれも便利です。
neoBundleなどプラグイン管理を利用できるように設定したら、最初に入れておくと便利です。もちろん無くても十分便利です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CamelCaseMotion&lt;/li&gt;
&lt;li&gt;vim-easymotion&lt;/li&gt;
&lt;li&gt;ReplaceWithRegister&lt;/li&gt;
&lt;li&gt;vim-sneak&lt;/li&gt;
&lt;li&gt;vim-surround&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基本的な使い方をメモしています。VimはもちろんVSCodeでVimプラグイン使うときの参考としても参考にしていく想定です。&lt;/p&gt;
&lt;h2&gt;CamelCaseMotion&lt;/h2&gt;
&lt;p&gt;CamelCaseで移動できるようになります。&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 g:camelcasemotion_key = &amp;#39;&amp;lt;leader&amp;gt;&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;w&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;b&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;とかで移動することが出来ます。&lt;/p&gt;
&lt;h2&gt;vim-easymotion&lt;/h2&gt;
&lt;p&gt;画面内の任意の場所に素早く移動できます。検索を行った結果、一致する場所に表示されるキーを入力することで、その場所に素早く移動できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;&amp;#x3C;Leader&gt;s&lt;/code&gt; 1文字で検索して移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;&amp;#x3C;Leader&gt;w&lt;/code&gt; 下の単語へ移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;&amp;#x3C;Leader&gt;b&lt;/code&gt; 上の単語へ移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;&amp;#x3C;Leader&gt;e&lt;/code&gt; 下の単語末へ移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;&amp;#x3C;Leader&gt;ge&lt;/code&gt; 上の単語末へ移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;&amp;#x3C;Leader&gt;f{char}&lt;/code&gt; 下の入力文字へ移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;&amp;#x3C;Leader&gt;F{char}&lt;/code&gt; 上の入力文字へ移動&lt;/li&gt;
&lt;/ul&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;nmap &amp;lt;Leader&amp;gt;s &amp;lt;Plug&amp;gt;(easymotion-s2)
map &amp;lt;Leader&amp;gt;j &amp;lt;Plug&amp;gt;(easymotion-j)
map &amp;lt;Leader&amp;gt;k &amp;lt;Plug&amp;gt;(easymotion-k)
nmap g/ &amp;lt;Plug&amp;gt;(easymotion-sn)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;s&lt;/code&gt; 2文字で検索して移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;j&lt;/code&gt; 任意の行に移動 下&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;Leader&gt;k&lt;/code&gt; 任意の行に移動 上&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g/&lt;/code&gt; 任意の文字数で検索して移動&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ReplaceWithRegister&lt;/h2&gt;
&lt;p&gt;レジスタを利用した置換が簡単になります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;griw&lt;/code&gt;&lt;br&gt;
&lt;code&gt;&quot;_diw&lt;/code&gt; + &lt;code&gt;p&lt;/code&gt; と同じような操作になります。 ブラックホールレジスタを使って削除した後に、レジスタの中身を貼り付けます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通常、&lt;code&gt;diw&lt;/code&gt;とすると削除したものが無名レジスタに上書きされてしまうので、もともとヤンクしていた内容が消えてしまいます。
削除するときに&lt;code&gt;&quot;_diw&lt;/code&gt;とすれば、ブラックホールレジスタみたいなものに上書きされるので、ヤンクしてたものは消えません。&lt;br&gt;
ちょっとめんどくさいなと思ったときにこのプラグインの出番です。&lt;/p&gt;
&lt;h2&gt;vim-sneak&lt;/h2&gt;
&lt;p&gt;画面内を素早く移動出来ます。fやF・tなどの検索を、行をまたいで動けるようにするイメージです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;s{char}{char}&lt;/code&gt;&lt;br&gt;
2文字まで入力すると一致する場所がハイライトされます。その後セミコロン;で次へ、カンマ,で前へ移動できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;vim-surround&lt;/h2&gt;
&lt;p&gt;“とかで囲まれているところを指定できるオペレータです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ds&quot;&lt;/code&gt; &quot;&quot;で囲まれている部分を削除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cs&quot;&apos;&lt;/code&gt; &quot;&quot;で囲まれてる部分の&quot;&quot;を”に置換&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ysiw]&lt;/code&gt; wordのまわりに[]を付ける&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ysiw[&lt;/code&gt; wordのまわりに[  ]を付ける スペースがつく&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;Leader&gt;&lt;/code&gt;で動作したりgで動作したりプラグインによって異なるので自分の使いやすいようにカスタマイズしたいところではあります。しかし、やりすぎても混乱してしまいますし、他の環境で動かしたときにわからなくなります。&lt;br&gt;
私個人はなるべくデフォルトの設定で使いたいと考えています。&lt;/p&gt;
&lt;p&gt;先にも述べていますがVSCodeのVimプラグインでも使えるものを集めました。VSCode上ではコマンドが少し違ったりしていますが、基本は同じように使えます。&lt;/p&gt;
&lt;p&gt;今まで使っていなかった人も一度試しに使ってみましょう。是非！&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Neovimを使ってみる]]></title><description><![CDATA[特に必要ではないのですが、Neovim使ってみます。 結構前から存在は知っていたのですが、移行するのがめんどくさくて後回しにしていました。
少しずつNeovimにへ移行していきたい。よりシンプルで動作も早いそうなので。 ちなみに環境はUbuntuです。 概要 Neovim…]]></description><link>https://honmushi.com/2020/04/13/neovim/</link><guid isPermaLink="false">https://honmushi.com/2020/04/13/neovim/</guid><pubDate>Sun, 12 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;特に必要ではないのですが、Neovim使ってみます。&lt;/p&gt;
&lt;p&gt;結構前から存在は知っていたのですが、移行するのがめんどくさくて後回しにしていました。
少しずつNeovimにへ移行していきたい。よりシンプルで動作も早いそうなので。&lt;/p&gt;
&lt;p&gt;ちなみに環境はUbuntuです。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Neovimのインストール&lt;/li&gt;
&lt;li&gt;Neovimを起動&lt;/li&gt;
&lt;li&gt;init.vim を作成&lt;/li&gt;
&lt;li&gt;プラグインマネージャ dein.vim を準備&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Neovimのインストール&lt;/h2&gt;
&lt;p&gt;aptでインストールします。すなわち以下です。python3が正常に動作しないとダメなようです。なにかうまくいかない方はpython3の動作チェックを行うと良さそうです。&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;sudo apt install neovim&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Neovimを起動&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;nvim&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;で起動します。vimと共存しておくこともできるようなので、何かあっても引き続きvimの環境も使えます。安心ですね。&lt;/p&gt;
&lt;h2&gt;init.vim を作成&lt;/h2&gt;
&lt;p&gt;vimの.vimrcに当たるファイルです。
&lt;code&gt;.config/nvim/init.vim&lt;/code&gt; に作成します。このファイルに.vimrcのような設定を書いていくことになります。&lt;/p&gt;
&lt;h2&gt;プラグインマネージャ dein.vim を準備&lt;/h2&gt;
&lt;p&gt;vimではneobundleを使ってました。せっかくなのでdein.vimを使ってみます。
以下のURLに従って進めれば問題ないです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Shougo/dein.vim&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/Shougo/dein.vim&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下コマンドでdein.vimをインストール。&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 https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh &amp;gt; installer.sh
sh ./installer.sh ~/.cache/dein&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下をinit.vimに記述して動作を確認しましょう。&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;if &amp;amp;compatible
  set nocompatible
  endif
  &amp;quot; Add the dein installation directory into runtimepath
  set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim

if dein#load_state(&amp;#39;~/.cache/dein&amp;#39;)
  call dein#begin(&amp;#39;~/.cache/dein&amp;#39;)

  call dein#add(&amp;#39;~/.cache/dein/repos/github.com/Shougo/dein.vim&amp;#39;)
  call dein#add(&amp;#39;Shougo/deoplete.nvim&amp;#39;)
  if !has(&amp;#39;nvim&amp;#39;)
    call dein#add(&amp;#39;roxma/nvim-yarp&amp;#39;)
    call dein#add(&amp;#39;roxma/vim-hug-neovim-rpc&amp;#39;)
  endif

  call dein#end()
  call dein#save_state()
endif

filetype plugin indent on
syntax enable&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その後でnvim開いて、以下のコマンドを実行しましょう。&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;:call dein#install()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;terminalを使ってみる&lt;/h2&gt;
&lt;p&gt;nvimではterminalウィンドウを使うことが出来ます。nvim内でシェルコマンドを実行できます。&lt;/p&gt;
&lt;p&gt;以下コマンドでterminalウインドウが起動します。&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;:terminal&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最初はコマンドモードのようになっていて、画面内を移動できます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;i&lt;/code&gt; を入力すればインサートモードになり、terminalにコマンドを入力できるようになります。&lt;br&gt;
&lt;code&gt;&amp;#x3C;C-/&gt;&amp;#x3C;C-n&gt;&lt;/code&gt;でインサートモードを抜けます。通常のVimウインドウとは少し違うので注意しましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;とりあえず上記でNeovimの起動とプラグインマネージャdein.vimの設定。
後は.vimrcに変わるファイルinit.vimの定義が出来ました。あとあh基本的にvimと同様に設定して行けば問題ないです。&lt;/p&gt;
&lt;p&gt;ただNeovimのバージョン等の問題で利用できないプラグインがあったりするので注意しましょう。引き続きvimも併用して使えますので特に慌てる必要はありません。ゆっくり移行していこうと考えています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[vimでtypescript使うときのオススメプラグイン「tsuquyomi」]]></title><description><![CDATA[「tsuquyomi」というvimプラグインの紹介です。 vimでTypeScriptをコーディングする際にとても便利なものです。
文法の補完や、定義へのジャンプ・利用箇所の表示・文法チェックなどができます。 TypeScript…]]></description><link>https://honmushi.com/2020/04/04/tsukuyomi-vim-ts/</link><guid isPermaLink="false">https://honmushi.com/2020/04/04/tsukuyomi-vim-ts/</guid><pubDate>Fri, 03 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「tsuquyomi」というvimプラグインの紹介です。&lt;/p&gt;
&lt;p&gt;vimでTypeScriptをコーディングする際にとても便利なものです。
文法の補完や、定義へのジャンプ・利用箇所の表示・文法チェックなどができます。&lt;/p&gt;
&lt;p&gt;TypeScript使う場合は、リアルタイムにもろもろのチェックが動くと便利です。多分VSCode使うのが一番便利そうです。でも、Vimでやりたい日も有りますよね。そんなときにtsuquyomiを使うとかなり便利に出来ます。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;インストール&lt;/li&gt;
&lt;li&gt;使い方&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考URL&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Quramy/tsuquyomi&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/Quramy/tsuquyomi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基本的に上記公式Githubに書かれていることを自分用にメモした内容です。
便利な設定等もメモしているので環境の再構築・移動時の参考にする予定です。&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;まずは以下が必要です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vim (vim7.4 or later)&lt;/li&gt;
&lt;li&gt;Node.js &amp;#x26; TypeScript&lt;/li&gt;
&lt;li&gt;Shougo/vimproc.vim &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そしてNeoBundle使って以下でインストールします。&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;NeoBundle &amp;#39;Shougo/vimproc.vim&amp;#39;, {
\ &amp;#39;build&amp;#39; : {
\     &amp;#39;windows&amp;#39; : &amp;#39;tools\\update-dll-mingw&amp;#39;,
\     &amp;#39;cygwin&amp;#39; : &amp;#39;make -f make_cygwin.mak&amp;#39;,
\     &amp;#39;mac&amp;#39; : &amp;#39;make -f make_mac.mak&amp;#39;,
\     &amp;#39;linux&amp;#39; : &amp;#39;make&amp;#39;,
\     &amp;#39;unix&amp;#39; : &amp;#39;gmake&amp;#39;,
\    },
\ }

NeoBundle &amp;#39;Quramy/tsuquyomi&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;使い方&lt;/h2&gt;
&lt;h3&gt;Completion&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;C-x&gt; &amp;#x3C;C-o&gt;&lt;/code&gt;で補完が使えます。&lt;/p&gt;
&lt;h3&gt;Navigations&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;C-]&gt;&lt;/code&gt;でカーソル下の要素の定義へジャンプ。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;C-t&gt;&lt;/code&gt;で戻る。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:TsuTypeDefinition&lt;/code&gt;でカーソル下の要素の型定義へジャンプ。&lt;/p&gt;
&lt;h3&gt;Reference&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;C-^&gt;&lt;/code&gt;でカーソル下の要素が参照されている場所を表示します。&lt;/p&gt;
&lt;h3&gt;Keyword search&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;:TsuSearch {keyword}&lt;/code&gt; で開いているファイル・参照されているファイルからキーワード検索ができます。&lt;/p&gt;
&lt;h3&gt;Show compile errors&lt;/h3&gt;
&lt;p&gt;バッファを保存したときにチェックが行われます。もしくは&lt;code&gt;:TsuGeterr&lt;/code&gt;です。&lt;br&gt;
&lt;code&gt;:TsuGeterrProject&lt;/code&gt;でプロジェクト全体をチェック出来ます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:TsuQuickFix&lt;/code&gt;で修正を行えます。&lt;/p&gt;
&lt;h3&gt;Configure compile options&lt;/h3&gt;
&lt;p&gt;tsconfig.jsonで設定できます。&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;{
  &amp;quot;compilerOptions&amp;quot;: {
      &amp;quot;noImplicitAny&amp;quot;: true,
      &amp;quot;target&amp;quot;: &amp;quot;es5&amp;quot;,
      &amp;quot;module&amp;quot;: &amp;quot;commonjs&amp;quot;
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Refuctor&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;:TsuRenameSymbol&lt;/code&gt;シンボルをリネーム。&lt;br&gt;
&lt;code&gt;:TsuRenameSymbolC&lt;/code&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;autocmd FileType typescript nmap &amp;lt;buffer&amp;gt; &amp;lt;Leader&amp;gt;e &amp;lt;Plug&amp;gt;(TsuquyomiRenameSymbol)
autocmd FileType typescript nmap &amp;lt;buffer&amp;gt; &amp;lt;Leader&amp;gt;E &amp;lt;Plug&amp;gt;(TsuquyomiRenameSymbolC)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;tooltip&lt;/h3&gt;
&lt;p&gt;以下の設定をvimrcにしておくことで型定義などのツールチップを表示できます。
&lt;code&gt;&amp;#x3C;Leader&gt;t&lt;/code&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;set ballooneval
autocmd FileType typescript nmap &amp;lt;buffer&amp;gt; &amp;lt;Leader&amp;gt;t : &amp;lt;C-u&amp;gt;echo tsuquyomi#hint()&amp;lt;CR&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Create es6 import declaration&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;:TsuImport&lt;/code&gt;をモジュールの上で実行すると、そのモジュールのインポート宣言がファイル上部に追加されます。&lt;/p&gt;
&lt;p&gt;なるべく短いパスを指定したい場合は以下の設定をvimrcに追加します。&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 g:tsuquyomi_shortest_import_path = 1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;syntasticと組み合わせて使う&lt;/h2&gt;
&lt;p&gt;別のプラグイン「syntastic」と組み合わせて使うことで、タイプチェックの動作や表示をわかりやすくすることが出来ます。&lt;/p&gt;
&lt;p&gt;デフォルトでは、バッファ保存時にコンパイルエラーをウィンドウで表示しています。行数などが表示されますが、パッと見ではわかりにくいことも有りますね。&lt;/p&gt;
&lt;p&gt;syntasticと組み合わせて使うことで、エラー行の行数の左にエラーマークが出たり、カーソルを合わせるとエラーの内容が表示されるような動作にできます。&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;&amp;quot;let g:tsuquyomi_disable_quickfix = 1
&amp;quot;let g:syntastic_typescript_checkers = [&amp;#39;tsuquyomi&amp;#39;] &amp;quot; You shouldn&amp;#39;t use &amp;#39;tsc&amp;#39; checker.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;syntasticの仕組み上仕方ないのですが、ファイル保存時のコンパイルチェックの動作が少し重くなりました。
それ以外で、ファイルを開くのが遅いときは以下の設定を無効にすると良いです。&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 g:syntastic_check_on_open = 1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;TypeScript使う上でとても便利なプラグインです。他のプラグインも使ったことが有りますが、tsuquyomiは一通り揃っていて簡単に導入できますし、安定しているのでおすすめです。&lt;/p&gt;
&lt;p&gt;ただ、大きなプロジェクトとかでチームで開発する場合であれば、他の人と環境を合わせることが大切だったりします。
VScodeを使ってリアルタイムでのチェック等を走らせながら開発するほうが安心です。&lt;/p&gt;
&lt;p&gt;一人で個人開発するときはVimで開発できると快適です。ぜひtsuquyomiを利用してVimでTypeScriptの開発を楽しみましょう！&lt;/p&gt;</content:encoded></item><item><title><![CDATA[bashにgitのブランチ情報を表示する]]></title><description><![CDATA[bashの表示カスタマイズの続きです。 今回はgitの現在チェックアウトしているブランチ名を表示します。 間違えてmasterにpush…]]></description><link>https://honmushi.com/2020/04/02/bash-display-git-branch/</link><guid isPermaLink="false">https://honmushi.com/2020/04/02/bash-display-git-branch/</guid><pubDate>Thu, 02 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;bashの表示カスタマイズの続きです。&lt;/p&gt;
&lt;p&gt;今回はgitの現在チェックアウトしているブランチ名を表示します。&lt;/p&gt;
&lt;p&gt;間違えてmasterにpushしたりすることもなくなりますし、作業しやすくなる便利な設定です。簡単に出来ますのでぜひ！&lt;/p&gt;
&lt;h2&gt;必要なスクリプトを取得&lt;/h2&gt;
&lt;p&gt;以下のファイルを取得します。プロンプトにgitのブランチ情報を表示するための公式スクリプトです。
&lt;a href=&quot;https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;wget使って取得するなら以下のコマンドになります。&lt;code&gt;-O&lt;/code&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;wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;chmod a+x ~/git-prompt.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;.bashrcにスクリプトの場所を記述&lt;/h2&gt;
&lt;p&gt;上記で取得したスクリプトの場所を.bashrcに記述します。&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;source ~/.git-prompt.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;PS1にスクリプトの出力を追加&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;$(__git_ps1 &amp;quot;(%s)&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;オプション&lt;/h2&gt;
&lt;p&gt;いくつかオプションがあるようです。stagingに履いているファイルの存在とか、stashしているファイルがあるかどうかを表示できるようです。また調べて追記します。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単にbashにブランチ名を表示できました。
長いブランチ名になるとちょっと見にくくなってしまいますが、&lt;code&gt;git status&lt;/code&gt;等使わなくてもブランチがすぐに把握できます。push等しやすくなるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;何より間違えてmasterにpushしたみたいな事故が防げます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[gitコマンドの補完を有効にする]]></title><description><![CDATA[bashにおいてgitコマンドのtab補完を有効にする方法です。 ubuntuでは最初からtab補完ができたのですが、macだと出来なかったので困っていました。
やり方わかったので忘れないように記事にします。とても簡単です。 補完の設定ファイルを探して、.bashrc…]]></description><link>https://honmushi.com/2020/04/02/git-completion/</link><guid isPermaLink="false">https://honmushi.com/2020/04/02/git-completion/</guid><pubDate>Thu, 02 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;bashにおいてgitコマンドのtab補完を有効にする方法です。&lt;/p&gt;
&lt;p&gt;ubuntuでは最初からtab補完ができたのですが、macだと出来なかったので困っていました。
やり方わかったので忘れないように記事にします。とても簡単です。&lt;/p&gt;
&lt;p&gt;補完の設定ファイルを探して、.bashrcにパスを渡すだけです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git status&lt;/code&gt;とかの補完はもちろんで、&lt;code&gt;git checkout feature/user-login-form&lt;/code&gt;みたいなブランチ名なんかもtabで補完できます。
とても便利ですね。&lt;/p&gt;
&lt;h2&gt;設定ファイルを探す&lt;/h2&gt;
&lt;p&gt;多分gitをインストールしたときに、一緒に設定ファイルもインストールされているようです。その場所を探しましょう。
必要であればsudo使いましょう。&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;find / -name git-completion.bash&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;/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;.bashrcに記述する&lt;/h2&gt;
&lt;p&gt;上記で取得したパスを.bashrcに記述します。
これで完了です。bash起動しなおせば、tab補完が有効になっているはずです。&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;source ~~~取得したパス~~~/git-completion.bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;とても簡単です。一度やれば特に再設定の必要もないので、記事にするほどのことでもありませんね。
別の環境に移行するときなんかに便利なので記事にしました。&lt;/p&gt;
&lt;p&gt;未設定の方や、何故かtab補完ができなくて不便に思っている方はぜひ試してみてください。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[bashの表示をカスタマイズ]]></title><description><![CDATA[bash の表示をカスタマイズします。 bash にて左側の部分にディレクトリがいっぱい表示されたり、パソコンの名前？が表示されてかっこ悪く思った経験あるのではないでしょうか。 表示する内容や色などを変更しておくと作業もしやすくておすすめです。bash…]]></description><link>https://honmushi.com/2020/03/30/bash-custom/</link><guid isPermaLink="false">https://honmushi.com/2020/03/30/bash-custom/</guid><pubDate>Mon, 30 Mar 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;bash の表示をカスタマイズします。&lt;/p&gt;
&lt;p&gt;bash にて左側の部分にディレクトリがいっぱい表示されたり、パソコンの名前？が表示されてかっこ悪く思った経験あるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;表示する内容や色などを変更しておくと作業もしやすくておすすめです。bash のカスタマイズなんて今更ですが、たまに共有することがあるので記事にまとめておきます。&lt;/p&gt;
&lt;h2&gt;.bashrc を作成&lt;/h2&gt;
&lt;p&gt;ホームディレクトリに「&lt;code&gt;.bashrc&lt;/code&gt;」を作成します。
bash 関連の設定をここに記載することで、色々と変更できます。&lt;/p&gt;
&lt;h2&gt;.bash_profile との違い&lt;/h2&gt;
&lt;p&gt;似た役割を果たすファイルとして「&lt;code&gt;.bash_profile&lt;/code&gt;」というものも有ります。
一般的な設定は特に理由がなければ.bashrc の方に書けば問題ないです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.bash_profile
ログイン時に1回だけ実行&lt;/li&gt;
&lt;li&gt;.bashrc
シェルを起動する度に実行&lt;/li&gt;
&lt;/ul&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;PS1=&amp;quot;\[\e[95m\]\W $ \[\e[0m\]&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;基本的には \と 1文字で表示する内容を定義。
[]で囲んだ部分はスケープシーケンスといって太字やフォントカラーなどを調整できます。&lt;/p&gt;
&lt;h3&gt;意味のある記号&lt;/h3&gt;
&lt;p&gt;表示する内容を指定する要素は以下です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;\h ホスト名&lt;/li&gt;
&lt;li&gt;\u ユーザ名&lt;/li&gt;
&lt;li&gt;\w ディレクトリ（フルパス）&lt;/li&gt;
&lt;li&gt;\W ディレクトリ&lt;/li&gt;
&lt;li&gt;\t 時間&lt;/li&gt;
&lt;li&gt;\d 日付&lt;/li&gt;
&lt;li&gt;\D 日時&lt;br&gt;
\D{%y/%m/%d %H:%M:%S} + 18/06/20 23:29:38&lt;/li&gt;
&lt;li&gt;\n 改行&lt;/li&gt;
&lt;li&gt;$ 一般ユーザーは「$」、root なら「#」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;エスケープシーケンス&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;\[ \]&lt;/code&gt;で囲まれているところは内容ではなく表示スタイルを指定します。以降すべてにスタイル指定がかかるので、範囲を指定する場合は無効にするエスケープシーケンスで閉じます。&lt;/p&gt;
&lt;p&gt;シーケンス内で&lt;code&gt;\e[&lt;/code&gt;に続けて設定を記述します。&lt;code&gt;;&lt;/code&gt;を指定することで複数の設定を定義できます。&lt;/p&gt;
&lt;h4&gt;文字装飾&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;0m 装飾なし&lt;/li&gt;
&lt;li&gt;1m 太字&lt;/li&gt;
&lt;li&gt;2m 細字 (未対応)&lt;/li&gt;
&lt;li&gt;3m イタリック体&lt;/li&gt;
&lt;li&gt;4m 下線&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;文字色&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;0m 装飾なし&lt;/li&gt;
&lt;li&gt;30m 黒&lt;/li&gt;
&lt;li&gt;31m 赤&lt;/li&gt;
&lt;li&gt;32m 緑&lt;/li&gt;
&lt;li&gt;33m 黄&lt;/li&gt;
&lt;li&gt;34m 青&lt;/li&gt;
&lt;li&gt;35m 紫&lt;/li&gt;
&lt;li&gt;36m 水&lt;/li&gt;
&lt;li&gt;37m 灰&lt;/li&gt;
&lt;li&gt;39m デフォルト&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;90以降にも割当がある様子です。&lt;/p&gt;
&lt;h4&gt;背景色&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;40m 黒&lt;/li&gt;
&lt;li&gt;41m 赤&lt;/li&gt;
&lt;li&gt;42m 緑&lt;/li&gt;
&lt;li&gt;43m 黄&lt;/li&gt;
&lt;li&gt;44m 青&lt;/li&gt;
&lt;li&gt;45m 紫&lt;/li&gt;
&lt;li&gt;46m 水&lt;/li&gt;
&lt;li&gt;47m 灰&lt;/li&gt;
&lt;li&gt;49m デフォルト&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;100以降にも割り当てがある様子です。&lt;/p&gt;
&lt;p&gt;最後は &lt;code&gt;\[\e[0m\]&lt;/code&gt; にすることで、bash右側の入力部分の修飾が無効になります。忘れないようにしましょう。&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;PS1=&amp;quot;\h:\W \u\$ &amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単にですがbashの表示をカスタマイズできます。
ちょっとしたことしか出来ませんが、自分の見やすいように設定しておくと良いです。各種環境でも使えるようにお気に入りの指定をメモしておきましょう。&lt;/p&gt;
&lt;p&gt;他にもgitのブランチを表示したりすることもできますので、機会があれば紹介します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[エラー System limit for number of file watchers reachedの対応]]></title><description><![CDATA[React Nativeでアプリを開発しているときに、developmentサーバを立ち上げようとすると以下のエラーが発生しました。 Node.jsなどを利用しているときに発生することがある様子で、Linux…]]></description><link>https://honmushi.com/2020/02/26/linux-sys-limit-file-num/</link><guid isPermaLink="false">https://honmushi.com/2020/02/26/linux-sys-limit-file-num/</guid><pubDate>Wed, 26 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeでアプリを開発しているときに、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;Error: ENOSPC: System limit for number of file watchers reached,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Node.jsなどを利用しているときに発生することがある様子で、Linuxでファイル監視を行う処理がシステムで設定されている監視対象ファイルの上限数に到達すると起こります。
原因と対応方法について備忘のためにまとめました。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;原因&lt;/li&gt;
&lt;li&gt;inotifyの状態を確認&lt;/li&gt;
&lt;li&gt;一時的な対応&lt;/li&gt;
&lt;li&gt;恒久的な対応&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;原因&lt;/h2&gt;
&lt;p&gt;Linuxではinotifyという仕組みを使ってファイル監視を行っています。
システムのデフォルトで監視対象の上限数が8192に設定されており、割と簡単にこれを越えることが有ります。&lt;/p&gt;
&lt;h2&gt;inotifyの状態を確認&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;cat /proc/sys/fs/inotify/max_user_watches&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;一時的な対応&lt;/h2&gt;
&lt;p&gt;一時的に変更したいだけであれば以下のsysctlを使って変更できます。&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;sudo sysctl fs.inotify.max_user_watches=24288&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;変更後はもう一度設定内容を確認して、変更内容が正しいことを確認しましょう。&lt;/p&gt;
&lt;h2&gt;恒久的な対応&lt;/h2&gt;
&lt;p&gt;設定をずっと書き換えておきたい場合は以下のコマンドを実行します。
大きな数値にしすぎるとパフォーマンスに影響するかもしれません。必要な分だけ数値を上げることが望ましいです。
どれくらいの数値が必要なのかを調べる方法がわからないので、動かしてみないとわかりません。
いったん、2倍ずつ上げていくとか段階を踏んですこしずつ増やしていくのがおすすめです。&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;echo fs.inotify.max_user_watches=24288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;それほど難しい問題でなくてよかったです。いつか、また同じエラーが出たら、ここにメモしたことを思い出して対処します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React NativeでLottieを使ってアニメーション実装]]></title><description><![CDATA[React Nativeで作成したアプリにLottieでアニメーションを実装する手順の紹介です。 Lottieはairbnbが開発したアニメーションライブラリーで、Web上で利用できる他にReact Nativeでも実装が可能です。
大きな特徴としては、AdobeのAfter…]]></description><link>https://honmushi.com/2020/02/25/rn-lottie/</link><guid isPermaLink="false">https://honmushi.com/2020/02/25/rn-lottie/</guid><pubDate>Tue, 25 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeで作成したアプリにLottieでアニメーションを実装する手順の紹介です。&lt;/p&gt;
&lt;p&gt;Lottieはairbnbが開発したアニメーションライブラリーで、Web上で利用できる他にReact Nativeでも実装が可能です。
大きな特徴としては、AdobeのAfter Effectsを使って作成したアニメーションをLottie用にエクスポートして実装します。
Lottie用にエクスポートされたデータはJsonファイルとなっており、容量の削減などが期待できます。&lt;/p&gt;
&lt;p&gt;各OSのネイティブで実装できる他に、Webでの実装やReact Nativeでの実装が用意されています。マルチプラットフォームで利用できることも大きな特徴と言えるでしょう。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ドキュメント&lt;/li&gt;
&lt;li&gt;After Effectsの設定&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;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://airbnb.io/lottie/#/README&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://airbnb.io/lottie/#/README&lt;/a&gt;&lt;br&gt;
概要です。After EffectsでインストールするBody movinのことなども説明されています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://airbnb.io/lottie/#/react-native&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://airbnb.io/lottie/#/react-native&lt;/a&gt;&lt;br&gt;
こちらはReact Nativeすなわちアプリ側での実装方法です。&lt;/p&gt;
&lt;h2&gt;After Effectsの設定&lt;/h2&gt;
&lt;p&gt;まずはAdobe After Effects側の設定からです。「Bodymovin」というライブラリをインストールする必要が有ります。
基本的に以下のドキュメントに従って進めれば問題ないです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/airbnb/lottie-web&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/airbnb/lottie-web&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;Go to Edit &amp;gt; Preferences &amp;gt; Scripting &amp;amp; Expressions... &amp;gt; and check on &amp;quot;Allow Scripts to Write Files and Access Network&amp;quot;
[編集]&amp;gt; [設定]&amp;gt; [スクリプトと式...]に移動し、[スクリプトによるファイルの書き込みとネットワークへのアクセスを許可する]をオンにします&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;設定がおわったらアニメーションを作成しましょう。先程インストールした「Bodymovin」は完成したアニメーションをjsonで書き出すときに使用します。&lt;/p&gt;
&lt;p&gt;ウインドウ &gt; 拡張機能 &gt; Bodymovin と選択してライブラリを起動します。
書き出すアニメーションを選択して出力先のディレクトリやファイル名を入力したら、チェックをつけてRenderをクリックするとjsonファイルが出力されます。&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;いつもどおりです。npmやyarnでインストールします。&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 lottie-react-native&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その後 react-native linkを実行しましょう。jsのみではなくネイティブのコードも含まれているライブラリであるため、react-native linkを行う必要が有ります。&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;react-native link lottie-react-native&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;LottieViewコンポーネントをインポートして、アニメーションjsonファイルを渡して書き出せば良いです。
コンポーネント自体に高さと幅を定義しておかないと要素自体が表示されませんでした。気をつけましょう。&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 LottieView from &amp;quot;lottie-react-native&amp;quot;;
~~~

&amp;lt;View style={styles.animationContainer}&amp;gt;
    &amp;lt;LottieView
        ref={animation =&amp;gt; {
            this.animation = animation;
        }}
        style={{
            width: 200,
            height: 200,
        }}
        source={require(&amp;#39;./assets/anime.json&amp;#39;)}
    /&amp;gt;
&amp;lt;/View&amp;gt;
~~~&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;refでanimationを格納しています。アニメーションの開始や停止、再動作などを操作する場合はこのようにしてrefに格納しておきましょう。
以下のようにanimationに用意されたメソッドで挙動を制御できます。&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.animation.reset();
this.animation.play();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;上手くいかなかったポイント&lt;/h2&gt;
&lt;h3&gt;未対応のエフェクトがある&lt;/h3&gt;
&lt;p&gt;After Effectsのすべての機能やエフェクトに対応しているわけではないらしく、思ったように動作しない・表示されない現象に出会いました。以下のリンク先で対応しているエフェクトの種類が把握できますので、対応しているものを使ってアニメーションをつくるようにしましょう。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://airbnb.io/lottie/#/supported-features&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://airbnb.io/lottie/#/supported-features&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;アニメーション作成の前には必ずチェックするようにします。&lt;/p&gt;
&lt;h3&gt;アニメーションの動作チェック&lt;/h3&gt;
&lt;p&gt;上記の未対応のエフェクトなどもあるので、アニメーションが動かないときは原因の切り分けをしっかりやりましょう。&lt;/p&gt;
&lt;p&gt;方法としては、Web版のprevierで動作を確認、その後、端末のLottieクライアントアプリでも確認。そしてアプリで実装して確認、というフローが用意できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web版プレビュー&lt;br&gt;
&lt;a href=&quot;https://lottiefiles.com/preview&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://lottiefiles.com/preview&lt;/a&gt;&lt;br&gt;
会員登録が必要です。出力したjsonファイルをアップロードして動作の確認ができます。&lt;/li&gt;
&lt;li&gt;Lottieクライアントアプリ&lt;br&gt;
各OSのストアからインストールできます。&lt;br&gt;
上記のWeb版プレビューを行うとQRコードが取得できます。それをクライアントアプリで読み込めば、アニメーションの動作チェックを行えます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここまで正常に動作していれば、実際のアプリでも動作するはずです。
アプリで対応していないエフェクトであれば、クライアントアプリで動作確認した際に、動かない・表示されない・エラーで停止するといった現象が発生します。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;実装はとても簡単でした。After Effectsの使い方や、アニメーションの作り方のほうが難しかったです。
アニメーションの作成に慣れれば、アプリのUI表現も豊かになります。簡単なアイコンなどもアニメーションで状態遷移するようできれば完成度がぐっと上がります。&lt;/p&gt;
&lt;p&gt;Adobeのチュートリアル動画を見ながら進めましたが、わりとReact Nativeでは対応していないエフェクトを使っていたようです。textなどのアニメーションで実機にて動かないものがあったため、少し時間を取られました。&lt;/p&gt;
&lt;p&gt;作りたいアニメーションを実現できるかエフェクトの対応状況を確認してからアニメーション作成に入るように注意しましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React NativeでStorybookを使ってUIコンポーネントを管理]]></title><description><![CDATA[React NativeでのStorybookの使い方です。 StorybookはReacやVueなどのUIコンポーネントの管理を簡単にしてくれるツールです。ざっくり言うと、コンポーネントを表示・確認するデバッグルームのようなものを用意します。ここでUI…]]></description><link>https://honmushi.com/2020/02/24/storybook-rn/</link><guid isPermaLink="false">https://honmushi.com/2020/02/24/storybook-rn/</guid><pubDate>Sun, 23 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React NativeでのStorybookの使い方です。&lt;/p&gt;
&lt;p&gt;StorybookはReacやVueなどのUIコンポーネントの管理を簡単にしてくれるツールです。ざっくり言うと、コンポーネントを表示・確認するデバッグルームのようなものを用意します。ここでUIコンポーネントの表示の確認・調整・管理を行います。&lt;/p&gt;
&lt;p&gt;ロジック・データとデザインを分離して表示することで、UI表示のみに注目した状態で監理できるようにしておきます。
このことにより、仮想環境の用意やデバッグツールの利用などに苦戦してしまうエンジニア以外の人にも、表示の確認や調整がしやすくなります。デザイナーやテスター、ディレクターやクライアントなども含まれるでしょう。&lt;/p&gt;
&lt;p&gt;React Nativeでも利用することが出来ますので、今回はそちらを紹介します。Storybook for React Nativeを使って、アプリにUIコンポーネント管理ツールを用意する方法の紹介です。Storybookをアプリ内に設置する方法と、別でstorybook serverを用意する方法の2つが有りました。&lt;/p&gt;
&lt;p&gt;ただ、React NativeでStorybook for React Nativeを使う方法は、あまり使いやすい環境とは言えないと感じました。
どうやら、React Native for Web と React版のStorybookを使うのが良さそうです。今度やってみたら別で記事にします。&lt;/p&gt;
&lt;h2&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;li&gt;アドオン定義ファイルを作成&lt;/li&gt;
&lt;li&gt;ストーリーブックにアクセス&lt;/li&gt;
&lt;li&gt;ストーリーを記述&lt;/li&gt;
&lt;li&gt;Storybook サーバーによる起動&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://storybook.js.org/docs/guides/guide-react-native/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://storybook.js.org/docs/guides/guide-react-native/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;いつもどおりです。npmやyarnを使ってインストールしましょう。&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-dev @storybook/react-native&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;エントリーファイルを用意&lt;/h2&gt;
&lt;p&gt;ますは&lt;code&gt;storybook&lt;/code&gt;ディレクトリをプロジェクトに作成します。ここにStorybook用のファイルをまとめて作成しれば管理しやすくなります。&lt;/p&gt;
&lt;p&gt;つぎにエントリーファイルとなる&lt;code&gt;storybook/index.js&lt;/code&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;import { AppRegistry } from &amp;#39;react-native&amp;#39;;
import { getStorybookUI, configure } from &amp;#39;@storybook/react-native&amp;#39;;

import &amp;#39;./rn-addons&amp;#39;;

// import stories
configure(() =&amp;gt; {
  require(&amp;#39;./stories&amp;#39;);
}, module);

// Refer to https://github.com/storybookjs/storybook/tree/master/app/react-native#start-command-parameters
// To find allowed options for getStorybookUI
const StorybookUIRoot = getStorybookUI({});

// If you are using React Native vanilla write your app name here.
// If you use Expo you can safely remove this line.
AppRegistry.registerComponent(&amp;#39;%APP_NAME%&amp;#39;, () =&amp;gt; StorybookUIRoot);

export default StorybookUIRoot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このファイルでは必要なモジュールのインポートを行います。そのうえで、利用するアドオンを定義したファイル&lt;code&gt;rn-addons&lt;/code&gt;のインポート。ストーリーを定義したファイルのインポートを&lt;code&gt;stories&lt;/code&gt;ディレクトリから行います。&lt;/p&gt;
&lt;h2&gt;アドオン定義ファイルを作成&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;storybook/rn-addons.js&lt;/code&gt;を作成します。このファイルにStorybookで利用するアドオンを定義します。アドオンはブラウザ等にあるものと同じで追加機能みたいなものです。ログ機能だったり、メモ機能だったり色々です。&lt;/p&gt;
&lt;p&gt;例えば以下のようにします。React Nativeの場合はWebで利用するときとは別で用意されたAddonになるので注意しましょう。&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 &amp;#39;@storybook/addon-ondevice-knobs/register&amp;#39;;
import &amp;#39;@storybook/addon-ondevice-notes/register&amp;#39;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ストーリーブックにアクセス&lt;/h2&gt;
&lt;p&gt;React Nativeで利用する際は、Storybookを表示するスクリーンを用意します。デバッグルームみたいなものをアプリ内に用意する必要があります。Devモードなら表示するとか、開発中は設置しておいてビルドするときに削除するとかしたらいいのでしょうか。ちょっと製品のソースコードに混ざってしまうのはイマイチですね。&lt;/p&gt;
&lt;p&gt;任意の画面を用意して以下のようにstorybookのエントリーポイントを表示します。
StorybookのエントリーポイントはViewコンポーネントと同じように利用できます。&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;export default from &amp;#39;./storybook&amp;#39;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ストーリーを記述&lt;/h2&gt;
&lt;p&gt;いよいよStorybookで管理するためのストーリーファイルを作成します。エントリーポイントに定義したように&lt;code&gt;stories&lt;/code&gt;ディレクトリに定義します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;storybook/stories/index.js&lt;/code&gt;に以下のファイルを作成します。ここに任意のコンポーネントをimportして、表示するようにすればStorybookにリストされます。&lt;/p&gt;
&lt;p&gt;Storybookの画面からアクセスして、表示・管理ができるようになりました。こんな感じで各コンポーネントのストーリを定義していくことで、管理ができるようになります。&lt;/p&gt;
&lt;p&gt;Storybook for ReactNativeではまだ&lt;code&gt;storiesOf&lt;/code&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;import React from &amp;#39;react&amp;#39;;
import { storiesOf } from &amp;#39;@storybook/react-native&amp;#39;;
import { View, Text } from &amp;#39;react-native&amp;#39;;

const style = {
  flex: 1,
  justifyContent: &amp;#39;center&amp;#39;,
  alignItems: &amp;#39;center&amp;#39;,
  backgroundColor: &amp;#39;#F5FCFF&amp;#39;,
};

const CenteredView = ({ children }) =&amp;gt; &amp;lt;View style={style}&amp;gt;{children}&amp;lt;/View&amp;gt;;

storiesOf(&amp;#39;CenteredView&amp;#39;, module).add(&amp;#39;default view&amp;#39;, () =&amp;gt; (
  &amp;lt;CenteredView&amp;gt;
      &amp;lt;Text&amp;gt;Hello Storybook&amp;lt;/Text&amp;gt;
  &amp;lt;/CenteredView&amp;gt;
));&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Storybook サーバーによる起動&lt;/h2&gt;
&lt;p&gt;アプリ内にスクリーンを用意する以外にも、専用のサーバを立ち上げてそちらを端末で起動する方法も有ります。&lt;code&gt;storyBook-server&lt;/code&gt;をインストールして使います。&lt;/p&gt;
&lt;p&gt;使ってみましたが、storybook-serverだけではストーリーの確認はできず、並列でアプリケーションを実行する必要が有ります。
storybook-serverとdevelopment-serverを同時に動かしておく必要が有り、ちょっと大げさだなと感じました。&lt;/p&gt;
&lt;p&gt;拡張子やディレクトリなどの条件で、storybook-serverにストーリを定義したファイルを渡すことができます。そのため、アプリのソースコードにstorybook用スクリーンやリンクを設置しないですみます。ソースコードは汚れませんが、都度サーバを2つ立ち上げるのが手間に感じました。わりと用意するハードルが高いと感じました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;UIコンポーネントを表示のみ独立して監理できることはとても便利です。ぜひReact・React Nativeを使っていて、利用したことがない人には一度使ってみてほしいです。&lt;/p&gt;
&lt;p&gt;AtomicデザインなどコンポーネントUI設計の手法とも相性がよく、設計・開発がとても便利になります。Addonを利用することでテストにも使えるようにできますので追って紹介します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoを利用しReact Native for Web製アプリをNetlifyで発信する]]></title><description><![CDATA[React Native for Webを使うことで、ネイティブアプリと同じ感覚でWebアプリを作成できます。 スマホアプリ用に作ったものをブラウザ版として公開するのもいいです。
あとからのスマホアプリ展開を見越してブラウザアプリをReactNative…]]></description><link>https://honmushi.com/2020/02/21/expo-web-netlify/</link><guid isPermaLink="false">https://honmushi.com/2020/02/21/expo-web-netlify/</guid><pubDate>Fri, 21 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Native for Webを使うことで、ネイティブアプリと同じ感覚でWebアプリを作成できます。&lt;/p&gt;
&lt;p&gt;スマホアプリ用に作ったものをブラウザ版として公開するのもいいです。
あとからのスマホアプリ展開を見越してブラウザアプリをReactNativeでつくることも意味が有ります。
アプリ開発時のテスト検証用としてブラウザで動かせるようにするのもいいですし、簡易版として公開することもできます。&lt;/p&gt;
&lt;p&gt;React Native for Webの使いみちは多い印象です。開発もコンポーネントUI設計で進められます。&lt;/p&gt;
&lt;p&gt;今回は、Web上で簡単な便利ツールを作りたかったので、React Native for Webで作成してNetlifyで公開してみました。
Expoを使っての開発のため、全般とても簡単・快適に進められました。&lt;/p&gt;
&lt;p&gt;いくつか覚えておきたいポイントがあったので、記録しておきます。
整理すると、Expo + React Native for Web + Netlify によるWebブラウザアプリの公開についてです。何かの参考になれば。&lt;/p&gt;
&lt;h2&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;li&gt;デプロイ方法&lt;/li&gt;
&lt;li&gt;Netlify側の設定&lt;/li&gt;
&lt;li&gt;Expo-cliがpackage.jsonに必要&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;使用する技術&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;React Native&lt;br&gt;
クロスプラットフォームアプリ開発の仕組みです。Webアプリもつくることが出来ます。React Native for Web。&lt;/li&gt;
&lt;li&gt;Expo&lt;br&gt;
React Nativeによる開発を手助けするSDKです。Web版の開発にも大いに役立ってくれます。
特にネイティブのAPIを呼ぶこともないので、Web版であればExpo利用するのが手っ取り早くていいです。&lt;/li&gt;
&lt;li&gt;Netlify&lt;br&gt;
静的なコンテンツを発信できるホスティングサービスです。HTML・CSS・JavaScriptのホスティング、他にも簡単な関数であったりフォームやCDNとしての使い方もできます。&lt;br&gt;
データベースが必要な場合、Firebaseなど他のサービスが必要ですが、 今回はデータ登録などはなくリクエストにレスポンスを返すだけなので、これで十分と判断しました。&lt;br&gt;
リクエストの量やデータサイズなどによって料金プランが有りますが、とりあえずつかってみるのには 無料の範囲で十分です。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;構築&lt;/h2&gt;
&lt;p&gt;今回は &lt;code&gt;create React native app&lt;/code&gt;コマンドを使って雛形を用意しました。Android・iOSの両OSに加えて、Webの設定も初期値に含まれているのですぐに動かすことができます。&lt;/p&gt;
&lt;p&gt;その後&lt;code&gt;expo start&lt;/code&gt;を実行してサーバを立ち上げブラウザで確認します。 wキーを押すことでWeb版のアプリが立ち上がり、ブラウザでタブが表示されます。&lt;/p&gt;
&lt;p&gt;スマホアプリでは使えるけどWeb版では使えないコンポーネントやAPIもありますが、基本的なものはほとんど使える印象です。
ライブラリも同様に対応しているものがおおく、アプリとほぼ同じ感覚で構築できます。&lt;/p&gt;
&lt;p&gt;画面の大きさが異なるのでそこは注意しましょう。幅を指定しておくか、最大値を設定して真ん中寄せにするなどしておけばいいです。&lt;/p&gt;
&lt;p&gt;「React Navigation」や「React Native Paper」なども十分にWeb版で利用できますので活用しましょう。
エラーが出たときは表示に従って、必要なパッケージをインストールすれば問題なく動作しました。&lt;/p&gt;
&lt;h2&gt;ビルドしてみる&lt;/h2&gt;
&lt;p&gt;一通り機能が出来上がったら、ビルドを試しましょう。以下コマンドでWeb版のビルドが可能です。&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;expo build:web&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;デプロイ方法&lt;/h2&gt;
&lt;p&gt;Netlifyへのデプロイの設定です。
ローカルでビルドした結果を手動でアップロードすることも出来ますが、githubのリポジトリを連携させてNetlifyでビルドするのがおすすめです。&lt;/p&gt;
&lt;p&gt;Githubにリポジトリを用意しておき、プロジェクトをpushしておきます。 Netlify側で&lt;code&gt;New site from Git&lt;/code&gt;を選択してサイトを追加します。&lt;br&gt;
リポジトリの選択に今回のプロジェクトがない場合は、Githubがわで連携の設定を行うことで表示されるようになります。&lt;/p&gt;
&lt;p&gt;連携が完了すれば、gihubへのpushをNetlifyが感知するようになります。
リモートリポジトリへのpushを完治すると、Githubから最新のコードを取得しNetlifyのサーバでビルドをおこないます。
ビルドが正常に完了すれば生成されたファイルを発信してくれます。&lt;/p&gt;
&lt;p&gt;こんなふうにgithubへリモートプッシュするだけでNetlify側でビルド・デプロイを行ってくれるようになります。とても便利です。
間違えてデプロイした場合も、GUIでデプロイ履歴からロールバックすることも可能ですし、ログなども確認できます。&lt;/p&gt;
&lt;h2&gt;Netlify側の設定&lt;/h2&gt;
&lt;p&gt;「Setting」の「Build &amp;#x26; deploy」の項目にて以下の設定をしておきましょう。&lt;/p&gt;
&lt;h3&gt;Build settings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Build command&lt;br&gt;
&lt;code&gt;expo build:web --no-pwa&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Publish directory&lt;br&gt;
&lt;code&gt;web-build/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;簡単に使いたかったのでPWAは動作しないようにしています。&lt;br&gt;
SEOのことやパフォーマ数を考慮するなら&lt;code&gt;--no-pwa&lt;/code&gt;のパラメータは取ってしまいましょう。&lt;/p&gt;
&lt;h3&gt;Deploy contexts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Production branch&lt;br&gt;
&lt;code&gt;master&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Deploy previews&lt;br&gt;
&lt;code&gt;Don’t deploy pull requests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Branch deploys&lt;br&gt;
&lt;code&gt;Deploy only the production branch&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記の設定をしないと、devやfeatureなどのブランチをリモートへプッシュした際にもビルド・デプロイが実行されてしまいました。&lt;br&gt;
ですので、productionブランチとして設定されているものだけが対象となるようにしています。今回のproductionブランチはmasterです。&lt;/p&gt;
&lt;p&gt;他にもビルドを行うOSのシステムや、nodeのバージョンなども指定できます。必要に応じて設定しましょう。&lt;/p&gt;
&lt;h2&gt;Expo-cliがpackage.jsonに必要&lt;/h2&gt;
&lt;p&gt;最初にデプロイを試した際はビルドコマンドが見つからないというログが出力され、Netlifyのビルドが失敗していました。
&lt;code&gt;expo-cli&lt;/code&gt;がNetlify上に無いことが原因です。&lt;/p&gt;
&lt;p&gt;大抵の場合は&lt;code&gt;npm install -g expo-cli&lt;/code&gt;としてグローバルな場所にイントールしており、プロジェクト内には無いため発生してました。
プロジェクト内のpackage.jsonに追加して、Netlifyのサーバでも取得してもらうようにすれば解決です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install expo-cli&lt;/code&gt;でpackage.jsonに追加しておけば問題ないです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単にWebアプリを作成し発信できました。&lt;/p&gt;
&lt;p&gt;Expoを利用することで簡単にReact Natvie for WebでWebアプリを構築できます。
さらに静的な処理であれば、Netlifyでビルド・デプロイも自動で行うことができます。無料です。&lt;/p&gt;
&lt;p&gt;Netlifyとても快適です。ドメインの紐付けもできますしSSHにも対応しています。かなり便利です。
今回の組み合わせはかなり快適だと感じました。もっと使いこなして、いろんなサービス立ち上げていきます。&lt;/p&gt;
&lt;p&gt;NetlifyによるJAMStackの書籍も無料で公開されているので、時間見つけて読んでみます。英語ですが。
&lt;a href=&quot;https://www.netlify.com/oreilly-jamstack/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.netlify.com/oreilly-jamstack/&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Ubuntuにて「apt update」にエラーが出るときの対処]]></title><description><![CDATA[sudo apt updateを行ったときに以下のエラーが出ました。関係するパッケージについて正しくアップデートされなかった様子です。 yarn…]]></description><link>https://honmushi.com/2020/02/21/apt-yarn-update/</link><guid isPermaLink="false">https://honmushi.com/2020/02/21/apt-yarn-update/</guid><pubDate>Fri, 21 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code&gt;sudo apt update&lt;/code&gt;を行ったときに以下のエラーが出ました。関係するパッケージについて正しくアップデートされなかった様子です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;yarn&lt;/code&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;署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。
https://dl.yarnpkg.com/debian/dists/rc/InRelease の取得に失敗しました  
いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。&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;a href=&quot;https://github.com/yarnpkg/yarn/issues/4505#issuecomment-332698773&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/yarnpkg/yarn/issues/4505#issuecomment-332698773&lt;/a&gt;&lt;br&gt;
issueが上がってました。この内容を参考にすれば解決できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://classic.yarnpkg.com/en/docs/install/#debian-stable&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://classic.yarnpkg.com/en/docs/install/#debian-stable&lt;/a&gt;&lt;br&gt;
あまり関係ないですが、yarnのインストール手順はコチラです。&lt;/p&gt;
&lt;h2&gt;対処方&lt;/h2&gt;
&lt;p&gt;yarnのキーの更新を行います。OKと出力されます。
yarnの共通鍵を取得して、aptのキーリストに追加しているという事です。&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 -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;改めて apt update&lt;/h2&gt;
&lt;p&gt;共通鍵を新しいものに更新下とで、&lt;code&gt;apt update&lt;/code&gt;を再度行うと正常にパッケージの更新ができます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;定期的にキーの更新を行う必要があるようです。
&lt;code&gt;apt update&lt;/code&gt;を行った際にyarnで同様のエラーがでた際にこの手順で対処するようにしましょう。&lt;/p&gt;
&lt;p&gt;大した問題でなくてよかったです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Nativeでjestを使ってスナップショットテストを行う]]></title><description><![CDATA[React Natvie でも jest を用いることで簡単にテストを準備できます。 今回はReact Nativeにおける、 jest のセットアップとスナップショットテストの実施についての説明です。
jest…]]></description><link>https://honmushi.com/2020/02/21/rn-jest-snapshot-test/</link><guid isPermaLink="false">https://honmushi.com/2020/02/21/rn-jest-snapshot-test/</guid><pubDate>Fri, 21 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Natvie でも jest を用いることで簡単にテストを準備できます。&lt;/p&gt;
&lt;p&gt;今回はReact Nativeにおける、 jest のセットアップとスナップショットテストの実施についての説明です。
jestを使えば大規模な開発はもちろん個人開発など小さなプロジェクトでもテストを簡単に取り入れるられます。テストによる恩恵は大きいのでぜひ身につけておきたい知識です。&lt;/p&gt;
&lt;p&gt;jest ではユニットテストも行うことができるのですが、いくつか関連ライブラリを利用することになりますので別の機会に説明します。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;React Native での jest を使ったスナップショットテストの導入方法です。&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;Expo を利用する場合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://jestjs.io/docs/ja/tutorial-react-native&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://jestjs.io/docs/ja/tutorial-react-native&lt;/a&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;npm install --save-dev jest
npm install --save-dev react-test-renderer&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;package.json に以下のコマンドエイリアスを登録しておきましょう。&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;{
  &amp;quot;scripts&amp;quot;: {
    &amp;quot;test&amp;quot;: &amp;quot;jest&amp;quot;
  },
  &amp;quot;jest&amp;quot;: {
    &amp;quot;preset&amp;quot;: &amp;quot;react-native&amp;quot;
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下コマンドを実行することで jest の設定ファイルを作成することもできます。&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;jest --init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;react-native init&lt;/code&gt;にて作成したプロジェクトの場合は、セットアップ済みなので初めから利用可能です。&lt;/p&gt;
&lt;h2&gt;テストコード&lt;/h2&gt;
&lt;p&gt;テストコードは基本的に「__test__」に書いていきましょう。ソースコードとは分けておくことで管理がしやすくなります。
ソースコードとディレクトリの構成を合わせると管理しやすいです。&lt;/p&gt;
&lt;p&gt;例えば&lt;code&gt;__test__/components/header.test.js&lt;/code&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;import React from &amp;#39;react&amp;#39;;
import Header from &amp;#39;../components/header&amp;#39;;

import renderer from &amp;#39;react-test-renderer&amp;#39;;

test(&amp;#39;header snapshot&amp;#39;, () =&amp;gt; {
  const tree = renderer.create(&amp;lt;Header /&amp;gt;).toJSON();
  expect(tree).toMatchSnapshot();
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;スナップショットテストなので&lt;code&gt;toMatchSnapshot()&lt;/code&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;npm run test&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;問題なく実行できればテストは完了し結果が表示されます。&lt;/p&gt;
&lt;p&gt;コンポーネントが正しくレンダリング出来ない場合などは、コンポーネントに引数を渡すなど工夫が必要になります。
Redux やナビゲーションが必要なときなどテストが難しくなるパターンも有りますが、大抵の場合はテストの記述が出来ます。&lt;/p&gt;
&lt;p&gt;できる限りシンプルなコンポーネントを目指すことで、テストがしやすくなり管理も簡単になるので心がけると良いです。&lt;/p&gt;
&lt;h2&gt;結果&lt;/h2&gt;
&lt;p&gt;いくつのテストが行われ、いくつ成功・いくつ失敗したのかが記述されます。
テストで取得したスナップショットは&lt;code&gt;__test__/__snapshots__/&lt;/code&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;npm run test -- -u&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;意図してない場所に影響がある場合は、必要に応じて修正を行いましょう。&lt;/p&gt;
&lt;h2&gt;Expo を利用する場合&lt;/h2&gt;
&lt;p&gt;Expo を利用する場合は&lt;code&gt;jest-expo&lt;/code&gt;を利用するのが推奨されています。
基本的にテスト記述などは同様に使うことができます。&lt;/p&gt;
&lt;h3&gt;ドキュメント&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v36.0.0/guides/testing-with-jest/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v36.0.0/guides/testing-with-jest/&lt;/a&gt;&lt;/p&gt;
&lt;h3&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;npm install --save-dev jest-expo
npm install --save-dev react-test-renderer&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;package.json&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;&amp;quot;scripts&amp;quot;: {
  ...
  &amp;quot;test&amp;quot;: &amp;quot;jest&amp;quot;
},
&amp;quot;jest&amp;quot;: {
  &amp;quot;preset&amp;quot;: &amp;quot;jest-expo&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;jest を用いることで簡単にテストを行うことが出来ました。今回説明したテストはスナップショットテストとなっています。
前回の構築から変更されたコンポーネントをわかるようにして、意図的に変更した所以外に影響が無いかをチェックできます。&lt;/p&gt;
&lt;p&gt;直接変更を加えてコード以外の場所で、思わぬところに影響が出たとか動かなくなったということを未然に防ぐことができます。&lt;/p&gt;
&lt;p&gt;jest と他のライブラリを合わせることで、詳細にユニットテストを実装することもできます。今後ユニットテストの方法についても紹介します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Application Loaderがなくなった→TransporterでApp Storeにアップロード]]></title><description><![CDATA[久しぶりにiOSアプリのアップデートをしたいので、Xcodeを開き「Application Loader」を起動しようとした所、該当の箇所からなくなっていました。Xcode11からはApplication Loaderは利用できなくなったようです。 React Native…]]></description><link>https://honmushi.com/2020/02/18/ios-transporter/</link><guid isPermaLink="false">https://honmushi.com/2020/02/18/ios-transporter/</guid><pubDate>Tue, 18 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;久しぶりにiOSアプリのアップデートをしたいので、Xcodeを開き「Application Loader」を起動しようとした所、該当の箇所からなくなっていました。Xcode11からはApplication Loaderは利用できなくなったようです。&lt;/p&gt;
&lt;p&gt;React Native + Expo でビルドを行った場合、Expoからipaファイルをダウンロードして自分でアップロードする必要があります。
その際、私はApplication Loaderを使っていました。&lt;/p&gt;
&lt;p&gt;この度それが使えなくなったので代わりの方法を探していた所、「Transporter」という公式のアプリケーションを見つけました。
Transporterを利用して無事にアップロードできました。その時の手順をメモしておきます。&lt;/p&gt;
&lt;p&gt;他にも&lt;code&gt;xcrun altool&lt;/code&gt;というコマンドでもアップロードができるようでしたので、そちらについても記載しておきます。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ApplicationLoaderがない&lt;/li&gt;
&lt;li&gt;「Transporter」がApp Storeに公開されている&lt;/li&gt;
&lt;li&gt;Transporterをつかってipaファイルをアップロード&lt;/li&gt;
&lt;li&gt;「xcrun altool」というコマンドでも可能らしい&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ApplicationLoaderがない&lt;/h2&gt;
&lt;p&gt;「Xcodeを起動し、&lt;code&gt;Xcode&lt;/code&gt;の&lt;code&gt;Open Developer tool&lt;/code&gt;から&lt;code&gt;Application Loader&lt;/code&gt;を起動する」のがいつものフローなのですがなくなってました。どうやらXcodeのアップデートがあり、現在のバージョンではApplication Loaderが利用できなくなったようです。困りました。&lt;/p&gt;
&lt;h2&gt;「Transporter」がApp Storeに公開されている&lt;/h2&gt;
&lt;p&gt;利用できなくなった代替として「Transporter」というアプリケーションがApp Storeに公開されていました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://apps.apple.com/jp/app/transporter/id1450874784&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://apps.apple.com/jp/app/transporter/id1450874784&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;Transporterは、Appleにコンテンツをデリバリするためのシンプルで簡単な方法です。
App Store、Apple Music、Apple TV App、Apple Books、またはiTunes Storeで配布するApp、ミュージック、映画、テレビ番組、ブックを簡単に送信できます。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;通常のアプリと同様にApp storeからMacにインストールします。&lt;/p&gt;
&lt;h2&gt;Transporterをつかってipaファイルをアップロード&lt;/h2&gt;
&lt;p&gt;App Store Connectのアカウントのログインが必要なので、入力してログイン。
その後手元のipaファイルを選択すれば、問題無くApp Storeへのアップドードができました！&lt;/p&gt;
&lt;h2&gt;「xcrun altool」というコマンドでも可能らしい&lt;/h2&gt;
&lt;p&gt;私は試さなかったのですが、&lt;code&gt;xcrun altool&lt;/code&gt;というコマンドでもipaファイルをApp Storeにアップロード可能なようです。
困ったときに使える用メモしておきます。&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;xcrun altool --upload-app -f ファイル名.ipa -t ios -u アカウントID -p パスワード&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;なんとなく、ApplicationLoaderはサポートされなくなる気がしていましたが、案の定でした。かわりにTransporterという便利なアプリが追加されたので良かったです。まったく詰まることも無くアップロードできたので良かったです。&lt;/p&gt;
&lt;p&gt;調べるとすぐに出てきたのでそんなに困らないでしょう。
Expoなどと同様にビルドファイルが手元にある場合はTransporterを使ってApp Storeにアップロードしましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React NativeでInput要素の入力後に画面を塞ぐキーボードを隠す]]></title><description><![CDATA[スマホアプリにおいて、インプット要素でソフトウェアキーボードにより要素が隠れてしまうことがあります。
スマホにおいて、キーボードは画面の3分の1から2分の1を占領するため、画面に表示できる要素が少なくなります。 Android…]]></description><link>https://honmushi.com/2020/02/17/rn-textinput-dis/</link><guid isPermaLink="false">https://honmushi.com/2020/02/17/rn-textinput-dis/</guid><pubDate>Mon, 17 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;スマホアプリにおいて、インプット要素でソフトウェアキーボードにより要素が隠れてしまうことがあります。
スマホにおいて、キーボードは画面の3分の1から2分の1を占領するため、画面に表示できる要素が少なくなります。&lt;/p&gt;
&lt;p&gt;Androidでは戻るボタンがハードキーで用意されている、またはホームボタンの横にあることが多いのでキーボードを簡単にしまえます。&lt;br&gt;
しかし、iOSでは戻るボタンが無いのでキーボードをしまえずに困る場合があります。&lt;/p&gt;
&lt;p&gt;この現象を回避するために以下のような方法が考えられます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;入力後にインプット要素以外をタップするとキーボードが隠れる&lt;/li&gt;
&lt;li&gt;KeybordAvoidingViewを使って、表示したい要素をキーボードを避けて上に移動させる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今回は、「入力後にインプット以外をタップするとキーボードが隠れる」実装を紹介します。&lt;br&gt;
&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;を使った実装については以前にblogで紹介していますので、参考にご活用ください。&lt;br&gt;
&lt;a href=&quot;/2019/12/24/keybord-avoiding/&quot;&gt;React NativeでKeyboardAvoidingViewが意図通りに動かない場合&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;TouchableWithoutFeedback&lt;/code&gt;を利用して、インプット要素以外をタップした際に&lt;code&gt;Keyboard.dismiss()&lt;/code&gt;を実行します。&lt;/p&gt;
&lt;p&gt;インプット要素を含む画面内のなるべく大きい範囲を&lt;code&gt;TouchableWithoutFeedback&lt;/code&gt;で囲みます。その上で、&lt;code&gt;onPress&lt;/code&gt;にキーボードを閉じる処理&lt;code&gt;Keyboard.dismiss()&lt;/code&gt;を設定します。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TouchableWithoutFeedback&lt;/li&gt;
&lt;li&gt;Keyboard.dismiss()&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;TouchableWithoutFeedback&lt;/h2&gt;
&lt;h3&gt;ドキュメント&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://facebook.github.io/react-native/docs/touchablewithoutfeedback&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/react-native/docs/touchablewithoutfeedback&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;React Nativeの標準コンポーネントです。タップ時に任意の処理を実行できます。&lt;/p&gt;
&lt;p&gt;他のTouchable〜コンポーネントとの違いは、タップ時の視覚的なフィードバックが無いことです。うんともすんとも言わないです。
ですので、このようなフォーカスが外れるといったようなキャンセル処理に向いているとも言えます。&lt;br&gt;
通常のボタンやリンクなどでは使わないほうがいいです。&lt;/p&gt;
&lt;h3&gt;インポート&lt;/h3&gt;
&lt;p&gt;以下のようにインポートして使います。通常はViewやTextもありますのでその場合は一緒に指定しましょう。&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 { TouchableWithoutFeedback } from &amp;#39;react-native&amp;#39;; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;実装&lt;/h3&gt;
&lt;p&gt;インプット要素を含む形で親コンポーネントにします。このコンポーネントをタップした際にonPressが実行されます。
今回の要件であれば、なるべく画面全体が含まれるようにします。&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;&amp;lt;TouchableWithoutFeedback
  onPress={() =&amp;gt; {
    // 実行したい処理
  }}&amp;gt;
  &amp;lt;View&amp;gt;
    &amp;lt;Input&amp;gt;
    &amp;lt;Input&amp;gt;
  &amp;lt;/View&amp;gt;
&amp;lt;/TouchableWithoutFeedback&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;TouchableWithoutFeedbackの子要素は単一コンポーネントのみ受け付けます。並列に2つ以上の子要素をもたせるとエラーになるので注意しましょう。
上記のようにViewで囲んでしまえば大丈夫です。&lt;/p&gt;
&lt;h2&gt;Keyboard.dismiss()&lt;/h2&gt;
&lt;h3&gt;ドキュメント&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://facebook.github.io/react-native/docs/keyboard&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/react-native/docs/keyboard&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;端末のキーボードに関わるイベントを管理するモジュールです。詳細は上記のドキュメントで確認できます。
キーボードを非表示にするほかにも、表示・非表示などのイベントに関数をaddListenerできます。&lt;/p&gt;
&lt;h3&gt;インポート&lt;/h3&gt;
&lt;p&gt;こちらもreact-native からインポートします。他のコンポーネントと同様ですので一緒に指定しましょう。&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 { TouchableWithoutFeedback,Keyboard } from &amp;#39;react-native&amp;#39;; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;実装&lt;/h3&gt;
&lt;p&gt;今回はキーボードをしまう&lt;code&gt;Keyboard.dismiss()&lt;/code&gt;を利用します。&lt;br&gt;
先程の&lt;code&gt;TouchableWithoutFeedback&lt;/code&gt;の&lt;code&gt;onPress&lt;/code&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;&amp;lt;TouchableWithoutFeedback
  onPress={() =&amp;gt; {
    Keyboard.dismiss()
  }}&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、Inputをタップして入力を行った後に、Input以外の場所をタップするとキーボードが隠れるようになりました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;今回の実装は、KeyboardAvoidingViewを使うよりも簡単です。動作も直感的にわかりやすいのでシンプルになります。
ただユーザー側で一度余計なタップが必要になりますので、UI的に検討したほうがいいです。&lt;/p&gt;
&lt;p&gt;なんとなく、「インプット以外をタップするとフォーカスが外れてキーボードが隠れる」は、ユーザーが想定できる動きに私は感じます。
ただ、実際のすべてのユーザーがそうなのかわかりません。リテラシーやスマホの使い方、経験によっても異なりますのでUIの検討の必要がありそうです。&lt;/p&gt;
&lt;p&gt;どちらにしても、キーボードをしまえないのは困るのでインプット要素を実装する際は、できるだけこの実装を行いましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「あるあるデザイン」を読んだ]]></title><description><![CDATA[デザインに関するアイデア集です。 以前ブログで紹介した余白を活かす『けっきょく、よはく』と同じ作者「ingectar-e」による執筆です。 さまざまなデザインのパターンにキャッチーなタイトルをつけて紹介しています。 4…]]></description><link>https://honmushi.com/2020/02/17/aruaru-design/</link><guid isPermaLink="false">https://honmushi.com/2020/02/17/aruaru-design/</guid><pubDate>Mon, 17 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;デザインに関するアイデア集です。&lt;/p&gt;
&lt;p&gt;以前ブログで紹介した&lt;a href=&quot;/2019/05/21/yohaku/&quot;&gt;余白を活かす『けっきょく、よはく』&lt;/a&gt;と同じ作者「ingectar-e」による執筆です。&lt;br&gt;
さまざまなデザインのパターンにキャッチーなタイトルをつけて紹介しています。&lt;/p&gt;
&lt;p&gt;45種類のパターンが掲載されており、つけられたタイトルが面白く実例も載っています。注目すべきポイントがわかりやすくなっていますのですぐに真似して使うことができます。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4844368427/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4844368427&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=4fbf64812947e9530cf49dd227a84dc5&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4844368427&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4844368427&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&gt;パターンにつけられたタイトルがおもしろい&lt;/h2&gt;
&lt;p&gt;デザインに特長を出すためのパターンを紹介している本ですが、注目すべきはそれぞれにキャッチーなタイトルをつけているところです。
「丸インパクト」「ななめスタイリッシュ」などそのまんまであり、かつ短く覚えやすいタイトルになっています。&lt;br&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;それぞれのパターン紹介は4ページくらいとなっているので、詳細なテクニックや応用などは書かれていません。&lt;br&gt;
大きなポイントは理解できますが、細かい部分や揃えるべき点の調整やより細部の隠れたポイントなどについては、解説が欲しくなりました。&lt;/p&gt;
&lt;p&gt;しかし、その分サクサク読めますし45通りのパターンを知ることが出来ます。デザインのアイデアに困ったときなどに読むと大いに助けられそうです。&lt;/p&gt;
&lt;h2&gt;組み合わせて使ってみるのも良い&lt;/h2&gt;
&lt;p&gt;基本的に1つのテクニックを使うことでスッキリかつ目を引くデザインにできます。応用として2つ以上のパターンを組み合わせてみるのもおもしろいです。相性も有りますが、使いこなすことができれば強い武器になります。いくつも採用しすぎてモリモリにするとかっこ悪くなるので注意しましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;この本のようにデザインを言語化するというのは学習においてとても重要なことです。自分なりの言葉を使って言語化することで、デザインセオリーを他人に伝えることができるようになります。メタファーを使ったり抽象化・具象化したりすることですね。そこまで来てやっと使いこなせていると言えるのではないでしょうか。
実際にデザインをつくることも大切ですが、言語化して他人に説明するというのもデザインの訓練になると感じました。&lt;/p&gt;
&lt;p&gt;書かれているパターンを真似してみることで、細かい部分の工夫や意味に気づくことができます。それぞれのパターンで共通の要素などもありますので、タグ付けを行い整理してみるのもおもしろいです。&lt;/p&gt;
&lt;p&gt;分類することで対象的な部分や共通の部分に気づくことができ、デザインの型のようなものが浮かび上がってきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Reduxについての概要]]></title><description><![CDATA[以前からReact/React NativeにてReduxを利用したアプリを作成しています。 Reduxの概念について説明する機会があったので、簡単にですがまとめておきます。
いったんキーワードベースでの解説としいます。サンプルコード等は少なくしました。 基本的にRedux…]]></description><link>https://honmushi.com/2020/02/15/redux-start/</link><guid isPermaLink="false">https://honmushi.com/2020/02/15/redux-start/</guid><pubDate>Fri, 14 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前からReact/React NativeにてReduxを利用したアプリを作成しています。&lt;/p&gt;
&lt;p&gt;Reduxの概念について説明する機会があったので、簡単にですがまとめておきます。
いったんキーワードベースでの解説としいます。サンプルコード等は少なくしました。&lt;/p&gt;
&lt;p&gt;基本的にReduxはstateの管理を1つのストアで集約的に管理するものです。
これを使うことでコンポーネントから一元管理されたstateへアクセスできるようになります。
使わない場合はprops等でやり取りすることになりますね。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ドキュメント&lt;/li&gt;
&lt;li&gt;Store&lt;/li&gt;
&lt;li&gt;Actions&lt;/li&gt;
&lt;li&gt;Reducer&lt;/li&gt;
&lt;li&gt;Connect&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://redux.js.org/introduction/getting-started&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://redux.js.org/introduction/getting-started&lt;/a&gt;&lt;br&gt;
reduxのドキュメントです。基本これのチュートリアルを順番に読んでいくことで理解が進みます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://react-redux.js.org/introduction/basic-tutorial&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://react-redux.js.org/introduction/basic-tutorial&lt;/a&gt;&lt;br&gt;
reduxをreactで使うためのライブラリーです。reduxはreact以外のフレームワークでも使えるようで、それぞれに対応したライブラリーを使うことがおすすめされています。
reactに対してはこの&lt;code&gt;react-redux&lt;/code&gt;が公式でもオススメとされています。&lt;/p&gt;
&lt;h2&gt;Store&lt;/h2&gt;
&lt;p&gt;ReduxではアプリケーションのすべてのStateをひとつのオブジェクト「Store」にて管理する。&lt;/p&gt;
&lt;p&gt;StoreはgetStoreによりデータにアクセスが可能で、dispatchによってデータの更新を行う。
subscribeによってリスナーを登録することもでき、解除もできる。&lt;/p&gt;
&lt;p&gt;データを分割したい場合、Storeを複数つくるのではなくReducerの分割を行います。&lt;/p&gt;
&lt;p&gt;アプリケーションに対してStoreは1つという決まり。&lt;/p&gt;
&lt;p&gt;このStoreにてデータを一元管理すること・できることがReduxの肝心なところ。&lt;/p&gt;
&lt;h2&gt;Actions&lt;/h2&gt;
&lt;p&gt;Storeに情報を渡すためのオブジェクト。&lt;/p&gt;
&lt;p&gt;オブジェクトでありプロパティとして「type」が必要。
typeの値には定数文字列が推奨されており、文字列リテラルでも良い。
「ActionTypes」としてファイルを切り出して定義しておくのがオススメ。&lt;/p&gt;
&lt;p&gt;payloadとしてストアに渡されるデータをまとめて定義することもある。&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;// Action 純粋なオブジェクト
const addTodoAction = {
  type: ADD_TODO,
  payload: {
    id: ++nextTodoId,
    content
  }
}
;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;ActionCreator&lt;/h3&gt;
&lt;p&gt;引数を受け取りActionを返すメソッド。
これを「dispatch」でStoreに渡すことでStoreの更新を行う。&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;// これは引数を受けとり、Actionを返すのでActionCreator
export const addTodo = content =&amp;gt; ({
  type: ADD_TODO,
  payload: {
    id: ++nextTodoId,
    content
  }
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Reducer&lt;/h2&gt;
&lt;p&gt;Storeへ渡されるActionに応じて、State更新の内容を定義しておく。&lt;br&gt;
Actionの「type」によって更新内容を切り分ける。&lt;/p&gt;
&lt;p&gt;Reducerは前のStateとActionを受け取り、次のstateを返す。
Stateに書き込むのではなく別のオブジェクトを返す。したがって、Stateを直接書き換えてはいけない。
前のStateの中身を展開したものと、更新するパラメータをオブジェクトにしてまとめて返す。すなわち更新後のState。&lt;/p&gt;
&lt;p&gt;意図せず未定義のアクションが渡された場合は前のStateをそのまま返す。&lt;br&gt;
一番最初はStateが空なはずなので、Stateの初期値を与えておく。&lt;/p&gt;
&lt;h3&gt;Reducerでやってはいけない３つのこと&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;引数に与えられたものを直接書き換えてはいけない&lt;br&gt;
書き換えるのではなく、新しいStateをつくって返す&lt;/li&gt;
&lt;li&gt;APIの呼び出しやルーティング処理をしてはいけない  &lt;/li&gt;
&lt;li&gt;純粋でない関数を呼んではいけない&lt;br&gt;
dateとかrandomとか&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;CombineReducer&lt;/h3&gt;
&lt;p&gt;データ定義や関連するドメインなどで分割して子Reducerを作っておき、合成して親Reducerとして扱うと良い。
Stateの一部を管理するような子Reducerを複数作成して、CombineReducerにて結合するのが良い。&lt;/p&gt;
&lt;p&gt;動作としてはDispatchにActionを渡すと、全ての子ReducerにActionを渡して帰ってきた新しいStateを結合しているらしい？。&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;export default combineReducers({ todos, visibilityFilter });&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Connect&lt;/h2&gt;
&lt;p&gt;Connectを使ってコンポーネントをラップすることでコンテナ化する。
こうしてコンテナ化することで、Storeからのデータ取得やdispatchによるデータ更新を可能にする。&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;export default connect(
  mapStateToProps,
  mapDispatchToProps
)(Component);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;mapStateToProps&lt;/h3&gt;
&lt;p&gt;Connectの1つ目の引数。&lt;br&gt;
Storeにアクセスしてデータを取得する処理を行い、stateをコンポーネントのpropsに渡します。
Storeから必要なデータを取得・変換・編集してコンポーネントのpropsへ渡すことが目的です。&lt;/p&gt;
&lt;p&gt;基本的にReduxはStoreに何らかの更新があると、データが再取得され再レンダリングの対象になるようです。&lt;/p&gt;
&lt;p&gt;このメソッドを定義しなかった場合はStoreがコンポーネントのpropsに渡される？ようです。
nullとかを渡せば、更新不要なコンポーネントとして定義できるかな。&lt;/p&gt;
&lt;h3&gt;mapDispatchToProps&lt;/h3&gt;
&lt;p&gt;Connectの2つ目の引数。&lt;br&gt;
Storeにdispatchして更新するための処理をコンポーネントのpropsに渡します。&lt;/p&gt;
&lt;p&gt;コンポーネント内でdispatchを実行してもいいのですが、こちらで定義しておくことも出来ます。
定義しなかった場合はdispatchがコンポーネントに渡されるので、コンポーネント内でpropsのdispatchを実行します。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Reduxは理解するのに時間がかかるという話を聞きますが、それほどで難しいものではないです。
時間を取ってドキュメントを見れば簡単に理解できます。大きなフレームワークではなく小さなライブラリーですので。&lt;/p&gt;
&lt;p&gt;ドキュメントが英語なのでとっつきにくいですが、勉強してみるとおもしろい仕組みです。
コンポーネント間で正しくデータを管理して渡せば、Reduxが無くても実装は可能です。しかし、Reduxを選択肢として使えるととても便利です。&lt;/p&gt;
&lt;p&gt;React・React Nativeで実装するに当たって、主要ライブラリの1つですのでしっかり身につけておきたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Nativeのセットアップ]]></title><description><![CDATA[React Nativeでスマホアプリをつくる際の環境立ち上げのメモです。
人に教える機会があったのでついでにまとめておきます。Ubuntuの場合です。 基本はとても簡単です。端末の接続や稼働環境の準備など必要ですが、そのあたりも追々まとめます。
Expo…]]></description><link>https://honmushi.com/2020/02/10/react-native-setup/</link><guid isPermaLink="false">https://honmushi.com/2020/02/10/react-native-setup/</guid><pubDate>Tue, 11 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeでスマホアプリをつくる際の環境立ち上げのメモです。
人に教える機会があったのでついでにまとめておきます。Ubuntuの場合です。&lt;/p&gt;
&lt;p&gt;基本はとても簡単です。端末の接続や稼働環境の準備など必要ですが、そのあたりも追々まとめます。
Expoを使うとさらに簡単です。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ドキュメント&lt;/li&gt;
&lt;li&gt;Expoを使う場合&lt;/li&gt;
&lt;li&gt;React native cliを使う場合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://facebook.github.io/react-native/docs/getting-started.html#android-development-environment&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/react-native/docs/getting-started.html#android-development-environment&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上記ドキュメントに従って進めれば問題ありません。&lt;/p&gt;
&lt;h2&gt;Expoを使う場合&lt;/h2&gt;
&lt;p&gt;Expoを使う場合はとても簡単です。いくつかできなくなることも有りますが、とりあえず動かしてみるのには十分なのでとても便利です。最初はコチラを利用するのがおすすめです。&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 -g expo-cli&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記を行うだけでExpoを使ってのデフォルトアプリの用意などできるようになります。&lt;/p&gt;
&lt;p&gt;あとは、実際に端末で動かすために各OSストアにてExpoのクライアントアプリをインストールすればオッケーです。&lt;/p&gt;
&lt;h2&gt;React native cliを使う場合&lt;/h2&gt;
&lt;p&gt;Expoを使わない場合です。ちょっと手順が複雑になりますがネイティブ部分の実装などが必要な場合、コチラの手順が必要になります。&lt;/p&gt;
&lt;p&gt;以下3つが必要ですのでインストールします。&lt;/p&gt;
&lt;h4&gt;Node&lt;/h4&gt;
&lt;p&gt;nvmなどを使ってインストールしましょう。&lt;/p&gt;
&lt;h4&gt;JAVA開発キット&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://adoptopenjdk.net/installation.html#linux-pkg&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://adoptopenjdk.net/installation.html#linux-pkg&lt;/a&gt;&lt;br&gt;
このページの内容に従って進めます、aptでインストールします。&lt;/p&gt;
&lt;h4&gt;Android開発環境&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Android studioをインストールします。別記事でまとめました。参考にどうぞ。&lt;br&gt;
&lt;a href=&quot;/2020/02/10/android-studio/&quot;&gt;Android studioのインストール手順&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android SDKのインストール&lt;br&gt;
Android studioのSDKマネージャーにてインストールを行います。
「Configure」から「SDKManager」を開き、以下2箇所の設定をおこないインストールします。&lt;br&gt;
右下の「Show Package Details」にチェックをつけておきましょう、詳細な情報が表示されます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;SDK Platformsタブにて以下の項目にチェックをつけます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Android 9 (Pie)&lt;/code&gt;の&lt;code&gt;Android SDK Platform 28&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Intel x86 Atom_64 System Image または Google APIs Intel x86 Atom System Image&lt;/code&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SDK Toolsタブにて&lt;code&gt;Android SDK Build-Tools&lt;/code&gt;の&lt;code&gt;28.0.3&lt;/code&gt;にチェック。&lt;/p&gt;
&lt;p&gt;OKをクリックして規約等のチェックを行い、インストールします。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;環境変数にANDROID_HOMEを設定&lt;br&gt;
&lt;code&gt;$HOME/.bashrc&lt;/code&gt;か&lt;code&gt;$HOME/.bash_profile&lt;/code&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;export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-too&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;設定変更後、bashに反映します。再度起動するか&lt;code&gt;source $HOME/.bashrc&lt;/code&gt;を実行。&lt;br&gt;
その後、&lt;code&gt;echo $PATH&lt;/code&gt;で環境変数にANDROID_HOMEが追加されていることを確認しておきましょう。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;必要ならWatchmanをインストール&lt;/h3&gt;
&lt;p&gt;パフォーマンス的にあったほうがいいそうです。推奨されています。&lt;br&gt;
&lt;a href=&quot;https://facebook.github.io/watchman/docs/install.html#buildinstall&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/watchman/docs/install.html#buildinstall&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;基本的には上記で&lt;code&gt;react-native init&lt;/code&gt;コマンド、または&lt;code&gt;expo init&lt;/code&gt;にてデフォルトのアプリを始めることが出来ます。
Expoを使っている場合はそのまま端末でのデバッグ等可能ですが、そうでない場合は物理端末との接続・連携が必要になります。&lt;/p&gt;
&lt;p&gt;端末の接続・連携についてはまた別記事で紹介します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[AndroidデバイスでReact Nativeアプリを実行する準備]]></title><description><![CDATA[仮想端末では無く物理的な端末と接続してReact Nativeのアプリを動かすための準備です。
やっぱり実際の端末で動かしたほうが確実ですので、設定しておくのがおすすめです。 UbuntuとAndroid端末を接続して、開発中のReact Native…]]></description><link>https://honmushi.com/2020/02/11/android-device-setup/</link><guid isPermaLink="false">https://honmushi.com/2020/02/11/android-device-setup/</guid><pubDate>Tue, 11 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;仮想端末では無く物理的な端末と接続してReact Nativeのアプリを動かすための準備です。
やっぱり実際の端末で動かしたほうが確実ですので、設定しておくのがおすすめです。&lt;/p&gt;
&lt;p&gt;UbuntuとAndroid端末を接続して、開発中のReact Nativeアプリを実機で動作確認します。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ドキュメント&lt;/li&gt;
&lt;li&gt;端末側にてUSBデバッグを有効にする&lt;/li&gt;
&lt;li&gt;USBで端末と接続&lt;/li&gt;
&lt;li&gt;アプリを起動する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://facebook.github.io/react-native/docs/running-on-device&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/react-native/docs/running-on-device&lt;/a&gt;&lt;br&gt;
基本ドキュメント通りに進めます。ほぼ問題なくできるくらい簡単になっます。&lt;/p&gt;
&lt;h2&gt;端末側にてUSBデバッグを有効にする&lt;/h2&gt;
&lt;p&gt;スマホの設定画面から、ビルドBuild Numberを数回タップすることで開発者オプションを変更できるようになります。そこで、USBデバッグを有効にします。&lt;/p&gt;
&lt;h2&gt;USBで端末と接続&lt;/h2&gt;
&lt;p&gt;USBでPCと接続します。&lt;/p&gt;
&lt;h3&gt;製造元コードを確認&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;lsusb&lt;/code&gt;コマンドでmanufacturer code:製造元コードを確認します。&lt;br&gt;
接続前と接続後で実行して、差分として出てくるものがスマホ端末のものです。&lt;/p&gt;
&lt;p&gt;デバイスIDの先の4桁をメモしておきます。&lt;/p&gt;
&lt;h3&gt;udev rulesに追加&lt;/h3&gt;
&lt;p&gt;以下コマンドでudev rulesに追加します。&lt;br&gt;
&lt;code&gt;22b8&lt;/code&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;echo &amp;#39;SUBSYSTEM==&amp;quot;usb&amp;quot;, ATTR{idVendor}==&amp;quot;22b8&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&amp;#39; | sudo tee /etc/udev/rules.d/51-android-usb.rules&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;確認する&lt;/h3&gt;
&lt;p&gt;以下コマンドを実行するとdeveiceが追加されていることがわかります。&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;adb devices&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&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;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;react-native run-android&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以降アプリの更新を行いながら開発する場合は、development serverを起動させておくことでプログラムを更新します。
デフォルトのプロジェクトでは以下コマンドで起動できます。&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;react-native start&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;よくあるエラー&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;port:8081にて通信するので,ファイアウォールの設定が必要になる場合が有る&lt;br&gt;
&lt;code&gt;ufw&lt;/code&gt;などのコマンドを使って設定しましょう。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;仮想端末のバージョンによってはhttp 通信を受け付けない設定になっている&lt;br&gt;
&lt;code&gt;android.manifest&lt;/code&gt;に設定を追加すれば通信が許可されます。
ローカルで通信に使うIPアドレスを調べて、ホワイトリストに入れて通信できるようにします。
端末側で表示されるエラー内にリクエストしているIPが出力されてますので確認しておきましょう。&lt;br&gt;
以下を&lt;code&gt;/android/app/src/main/res/xml/network_security_config.xml&lt;/code&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;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;network-security-config&amp;gt;
&amp;lt;domain-config cleartextTrafficPermitted=&amp;quot;true&amp;quot;&amp;gt;
&amp;lt;domain includeSubdomains=&amp;quot;true&amp;quot;&amp;gt;localhost&amp;lt;/domain&amp;gt;
&amp;lt;domain includeSubdomains=&amp;quot;true&amp;quot;&amp;gt;10.0.2.2&amp;lt;/domain&amp;gt; &amp;lt;!-- ← ここにローカルIPアドレス指定 --&amp;gt;
&amp;lt;/domain-config&amp;gt;
&amp;lt;/network-security-config&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;./android⁩/app⁩/src⁩/main⁩/AndroidManifest.xml&lt;/code&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;&amp;lt;application
android:networkSecurityConfig=&amp;quot;@xml/network_security_config&amp;quot;&amp;gt; 
&amp;lt;/application&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;コチラも簡単にできます。躓く所としては端末側の設定か、環境変数などです。
エミュレータでの開発でも十分ですので、難しければそちらに頼りましょう。ただ実際の端末で動かすことができると確認がとても便利ですので実ビルドの前に一度は試しておきたいです。&lt;/p&gt;
&lt;p&gt;他にエミュレータの起動等についても別の記事でまとめる予定です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[仮想端末でReact Nativeアプリを動かす準備]]></title><description><![CDATA[PCでAndroidの仮想端末を立ち上げて、React Nativeアプリを動かすための準備です。 Android studioのAVDマネージャーを使うことで簡単に設定ができます。 以下Ubuntuで作業した際の手順のメモです。 概要 ドキュメント AVDマネージャー Pie…]]></description><link>https://honmushi.com/2020/02/11/virtual-device-setup/</link><guid isPermaLink="false">https://honmushi.com/2020/02/11/virtual-device-setup/</guid><pubDate>Tue, 11 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;PCでAndroidの仮想端末を立ち上げて、React Nativeアプリを動かすための準備です。&lt;/p&gt;
&lt;p&gt;Android studioのAVDマネージャーを使うことで簡単に設定ができます。&lt;/p&gt;
&lt;p&gt;以下Ubuntuで作業した際の手順のメモです。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ドキュメント&lt;/li&gt;
&lt;li&gt;AVDマネージャー&lt;/li&gt;
&lt;li&gt;Pie API Level 28 imageを選択&lt;/li&gt;
&lt;li&gt;アプリを動かしてみる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://facebook.github.io/react-native/docs/getting-started&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/react-native/docs/getting-started&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上記ページの「Using a virtual device」のあたりを参考に進めれば問題ないです。&lt;/p&gt;
&lt;h2&gt;AVDマネージャー&lt;/h2&gt;
&lt;p&gt;Android studioにて「Configure」からAVDマネージャーを起動します。
デフォルトで端末が用意されているようですが、新しく作成しておきましょう。&lt;/p&gt;
&lt;p&gt;「create a new AVD」を選択して次へ進みます。&lt;/p&gt;
&lt;h3&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;/dev/kvm device: permission denied.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;メッセージの内容通りですが、現在のユーザーに&lt;code&gt;/dev/kvm&lt;/code&gt;への権限がないため発生しています。
権限を持つグループに所属させるなどして実行できるようにしましょう。&lt;/p&gt;
&lt;h3&gt;再起動するとまたエラーになる場合&lt;/h3&gt;
&lt;p&gt;再起動すると&lt;code&gt;/dev/kvm&lt;/code&gt;の所属グループが&lt;code&gt;root&lt;/code&gt;に戻る現象があるようです。
以下の手順を行うことで対応出来ます。
&lt;code&gt;qemu-kvm&lt;/code&gt;をaptでインストールすると、&lt;code&gt;/dev/kvm&lt;/code&gt;のグループが&lt;code&gt;kvm&lt;/code&gt;になり再起動しても変わらなくなります。&lt;br&gt;
その後ログインしているユーザーをkvmグループに所属させましょう。&lt;br&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;sudo apt install qemu-kvm
sudo gpasswd -a $USER kvm&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Pie API Level 28 imageを選択&lt;/h2&gt;
&lt;p&gt;Pie API Level 28 image.を選択して進みます。最初はimageファイルがないのでダウンロードする必要が有ります。ダウンロード後は該当のものを選択して次へ進めるようになります。&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;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;react-native run-android&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&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;Unable to load script from assets index.android.bundle&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これは&lt;code&gt;index.android.bundle&lt;/code&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;mkdir android/app/src/main/assets
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Android studio のSDKマネージャーとAVDマネージャーは、ReactNativeでのAndroidアプリ開発に重要なものですので、しっかり使いこなしておきたいです。ビルドやアプリの稼働チェックなど利用する機会は多いです。&lt;/p&gt;
&lt;p&gt;ちなみにExpo使う場合は特に必要有りません、Bareで開発する場合は必須です。&lt;/p&gt;
&lt;p&gt;どちらもわかりやすく便利ですので、それほど苦戦することはないでしょう。慌てず落ち着いてエラー等解決していきましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Android studioのインストール手順]]></title><description><![CDATA[UbuntuにてAndroid Studioをインストール手順についてまとめました。 ドキュメントにしっかり手順が書かれているので躓く点はありませんが、ずっと昔に作業したので手順を忘れていました。
人に教える機会があったので、ここにまとめておきます。 同じようにAndroie…]]></description><link>https://honmushi.com/2020/02/10/android-studio/</link><guid isPermaLink="false">https://honmushi.com/2020/02/10/android-studio/</guid><pubDate>Mon, 10 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;UbuntuにてAndroid Studioをインストール手順についてまとめました。&lt;/p&gt;
&lt;p&gt;ドキュメントにしっかり手順が書かれているので躓く点はありませんが、ずっと昔に作業したので手順を忘れていました。
人に教える機会があったので、ここにまとめておきます。&lt;/p&gt;
&lt;p&gt;同じようにAndroie Studioを使い始める人は参考にどうぞ。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ドキュメント&lt;/li&gt;
&lt;li&gt;zipファイルをダウンロード&lt;/li&gt;
&lt;li&gt;アプリケーションを移動&lt;/li&gt;
&lt;li&gt;studio.shを実行&lt;/li&gt;
&lt;li&gt;アプリケーションのセットアップ&lt;/li&gt;
&lt;li&gt;シンボリックリンクの設定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/studio/install?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://developer.android.com/studio/install?hl=ja&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;zipファイルをダウンロード&lt;/h2&gt;
&lt;p&gt;aptなどのパッケージ管理ツールではインストールできない様子です。
zipファイルを自分でダウンロードして任意の場所で一度解凍しておきます。&lt;/p&gt;
&lt;h2&gt;アプリケーションを移動&lt;/h2&gt;
&lt;p&gt;わかりやすい場所に移動しておきましょう。/usr/lib/とかですかね。&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;mv ~/Download/android-studio /usr/lib/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;上記の場所へ移動して studio.shを実行&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;cd /usr/lib/android-studio/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;移動先のディレクトリへcd。&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;./studio.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;アプリケーションを実行。&lt;/p&gt;
&lt;h2&gt;アプリケーションのセットアップ&lt;/h2&gt;
&lt;p&gt;studio.shを実行するとセットアップが始まります。
順番に選択していって進めて行けばオッケーです。&lt;/p&gt;
&lt;p&gt;ReactNative等使って、端末のデバッグ・エミュレータでの確認等を行う場合は
「カスタム」セットアップを選択して以下のチェックボックスがオンになっていることを確認して進めましょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Android SDK&lt;/li&gt;
&lt;li&gt;Android SDK Platform&lt;/li&gt;
&lt;li&gt;Android Virtual Device&lt;/li&gt;
&lt;/ul&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;cd /usr/bin
sudo ln -s /usr/lib/android-studio/bin/studio.sh  ./android-studio &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;android studioのインストールとその後のセットアップによって「Android SDK」と「Android Virtual Device」もインストールされている事を覚えておきましょう。
それぞれandroidの開発キットと仮想端末ということになります。
アプリのビルドやエミュレータでの確認のため、必要なものが一緒にインストールされます。&lt;/p&gt;
&lt;p&gt;一通りAndroid studioを使ってみたり、設定をいじってみましょう。
便利なIDEとして利用できます。&lt;/p&gt;
&lt;p&gt;Android での開発では仮想端末での検証などでどうしても必要になりますので、ある程度触って慣れておくと良いです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[xselコマンドを使ってクリップボードにアクセス]]></title><description><![CDATA[私はLinuxにてターミナルを常に使っています。ブラウザなどへのコピーペーストが面倒くさいので、簡単にできるしくみを探していた所見つけたTipsです。
tmux や vim…]]></description><link>https://honmushi.com/2020/02/04/linux-xsel/</link><guid isPermaLink="false">https://honmushi.com/2020/02/04/linux-xsel/</guid><pubDate>Tue, 04 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;私はLinuxにてターミナルを常に使っています。ブラウザなどへのコピーペーストが面倒くさいので、簡単にできるしくみを探していた所見つけたTipsです。
tmux や vim を使うと選択やコピーについて、上手くいかないことがありました。それが解決できたのでだいぶ便利になりました。&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;cat 01_sample.txt | xsel -bi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下内容のメモです。&lt;/p&gt;
&lt;h2&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;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;標準では入っていないのでaptでインストールします。&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;sudo apt-get install xsel&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;cat 01_sample.txt | xsel -bi&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;xsel -b &amp;gt;&amp;gt; 01_sample.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;-i&lt;/h3&gt;
&lt;p&gt;入力をセレクションに設定。&lt;/p&gt;
&lt;h3&gt;-a&lt;/h3&gt;
&lt;p&gt;入力をセレクションに追記。&lt;/p&gt;
&lt;h3&gt;-0&lt;/h3&gt;
&lt;p&gt;セレクションの内容を標準出力に出力。&lt;/p&gt;
&lt;h3&gt;-b&lt;/h3&gt;
&lt;p&gt;セレクションを3.CLIPBOARDにする。&lt;/p&gt;
&lt;h3&gt;-p&lt;/h3&gt;
&lt;p&gt;セレクションを1.PRIMARYにする。&lt;/p&gt;
&lt;h3&gt;-s&lt;/h3&gt;
&lt;p&gt;セレクションを2.SECONDARYにする。&lt;/p&gt;
&lt;p&gt;引数なしでxselを実行すると、PRIMARYセレクションの内容が標準出力に出力されます。&lt;/p&gt;
&lt;h2&gt;セレクションについて&lt;/h2&gt;
&lt;p&gt;セレクションという3つの領域がある。以下の3つ。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PRIMARY&lt;br&gt;
選択したテキストが格納されている、コピーとかしなくてもドラッグなどで選択しただけのものもここに入る。&lt;/li&gt;
&lt;li&gt;SECONDARY&lt;br&gt;
通常使わないもの？詳細はまだ不明です。&lt;/li&gt;
&lt;li&gt;CLIPBOARD&lt;br&gt;
いわゆるクリップボード。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単にクリップボードに内容を追加、出力ができるようになりました。なんで標準で入っていないのでしょうか。&lt;/p&gt;
&lt;p&gt;tmuxでコピーモードにして選択、とかやるのがめんどくさかったので捗ります。xsel覚えておきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[NetlifyのFormsを活用してブログに問い合わせを設置]]></title><description><![CDATA[このブログはNetlifyで配信しています。
ブログのソースはGatsbyで生成しているため静的コンテンツなのですが、Netlify…]]></description><link>https://honmushi.com/2020/01/17/netlify-form/</link><guid isPermaLink="false">https://honmushi.com/2020/01/17/netlify-form/</guid><pubDate>Fri, 17 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このブログはNetlifyで配信しています。
ブログのソースはGatsbyで生成しているため静的コンテンツなのですが、Netlifyの機能でフォームを設置してデータを受け取ることができるそうです。&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;ドキュメント&lt;/li&gt;
&lt;li&gt;手順&lt;/li&gt;
&lt;li&gt;送信を確認&lt;/li&gt;
&lt;li&gt;recapthaも簡単に設置&lt;/li&gt;
&lt;li&gt;無料の枠でどれくらい&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.netlify.com/forms/setup/#html-forms&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.netlify.com/forms/setup/#html-forms&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;手順&lt;/h2&gt;
&lt;p&gt;驚くほど簡単です。&lt;/p&gt;
&lt;p&gt;Formタグを配置して必要な入力と決定ボタンを設置。Formタグに&lt;code&gt;data-netlify=&quot;true&quot;&lt;/code&gt;または&lt;code&gt;netlify&lt;/code&gt;属性を加えれば、サブミットしたときのデータをNetlifyが受け取り管理画面で表示してくれるそうです。&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;&amp;lt;form name=&amp;quot;contact&amp;quot; method=&amp;quot;POST&amp;quot; data-netlify=&amp;quot;true&amp;quot;&amp;gt;

    ~~~~~~
    ~~~~~~
    ~~~~~~

&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;action属性が未設定の場合はそのフォームに送信受付のメッセージが出るそうです。action属性に任意のURLを指定すれば完了画面として表示してくれるそうです。&lt;/p&gt;
&lt;h2&gt;送信を確認&lt;/h2&gt;
&lt;h2&gt;recapthaも簡単に設置&lt;/h2&gt;
&lt;p&gt;スパムなどを防ぐための仕組みも簡単に利用できます。recapthaを設置してみます。&lt;/p&gt;
&lt;p&gt;formタグに属性を追加してform内に特定の属性を持つ空のdivを設置すれば、その場所に表示されます。こちらも簡単。&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;&amp;lt;form name=&amp;quot;contact&amp;quot; method=&amp;quot;POST&amp;quot; data-netlify-recaptcha=&amp;quot;true&amp;quot; data-netlify=&amp;quot;true&amp;quot;&amp;gt;
  &amp;lt;p&amp;gt;
    &amp;lt;label&amp;gt;Email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&amp;lt;/label&amp;gt;
  &amp;lt;/p&amp;gt;
  &amp;lt;div data-netlify-recaptcha=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;p&amp;gt;
    &amp;lt;button type=&amp;quot;submit&amp;quot;&amp;gt;Send&amp;lt;/button&amp;gt;
  &amp;lt;/p&amp;gt;
&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;無料の枠でどれくらい&lt;/h2&gt;
&lt;p&gt;値段については以下ドキュメントに記載されています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.netlify.com/pricing/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.netlify.com/pricing/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;無料なら月100件。ファイルの添付は月10MBまで。
まあ個人のページであれば十分でしょうか？&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;すごく簡単にフォームを設置できました。Gatsbyで作成したブログですのでバックエンドのプログラムがありません。フォームの内容を受け取ったり、どこかに保存したりは通常できませんが、Netlifyなら代わりにやってくれます。
実装もすごく簡単で、formタグに属性を追加するだけです。なんて便利なんだ。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ソースコードフォーマッター「Prettier」を導入してみる]]></title><description><![CDATA[「Prettier」というツールの紹介です。コードフォーマッターと呼ばれるもので、ソースコードのインデントやスペースなどを整えてくれるものです。 https://prettier.io 以前 「Expo JavaScript Style Guide…]]></description><link>https://honmushi.com/2020/01/16/prettier/</link><guid isPermaLink="false">https://honmushi.com/2020/01/16/prettier/</guid><pubDate>Thu, 16 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「Prettier」というツールの紹介です。コードフォーマッターと呼ばれるもので、ソースコードのインデントやスペースなどを整えてくれるものです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://prettier.io&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://prettier.io&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以前 &lt;a href=&quot;/2019/10/25/expo-style-guide/&quot;&gt;「Expo JavaScript Style Guide」を読んでみる&lt;/a&gt; という記事で見つけてなんとなく利用していたのですが、改めて使い方をまとめておきます。&lt;/p&gt;
&lt;p&gt;これ入れておけばソースコードのインデントやコーディングルールなどがある程度統一できるのでとても便利です。チーム開発でももちろんですし、個人で書いているコードも綺麗になるのでおすすめです。&lt;/p&gt;
&lt;h2&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;li&gt;実行してみる&lt;/li&gt;
&lt;li&gt;pretty-quick で コミットのhookで実行&lt;/li&gt;
&lt;li&gt;vimで利用する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;npmでインストールするなら以下です。&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 prettier --save-dev --save-exact&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ルールを作成する&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.prettierrc&lt;/code&gt;を作成して、例えば以下のようにします。Expoのリポジトリで使われているものを参考にコピーしました。&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;{
  &amp;quot;printWidth&amp;quot;: 100,
  &amp;quot;tabWidth&amp;quot;: 2,
  &amp;quot;singleQuote&amp;quot;: true,
  &amp;quot;jsxBracketSameLine&amp;quot;: true,
  &amp;quot;trailingComma&amp;quot;: &amp;quot;es5&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;指定できるパラメータの詳細&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Print Width&lt;br&gt;
行の折り返し、デフォルト80&lt;/li&gt;
&lt;li&gt;Tab Width&lt;br&gt;
インデントのスペースの数 デフォルト2&lt;/li&gt;
&lt;li&gt;Tabs&lt;br&gt;
インデントをスペースでなくタブにする デフォルト false&lt;/li&gt;
&lt;li&gt;Semicolons&lt;br&gt;
ステートメントの最後にセミコロン デフォルト true&lt;/li&gt;
&lt;li&gt;Quotes&lt;br&gt;
“のかわりに’を使う デフォルト false&lt;/li&gt;
&lt;li&gt;Quote Props&lt;br&gt;
オブジェクトのプロパティにクオートする&lt;/li&gt;
&lt;li&gt;JSX Quotes&lt;br&gt;
jsxでは”のかわりに’を使う デフォルト false&lt;/li&gt;
&lt;li&gt;Trailing Commas&lt;br&gt;
最後の要素のコンマを出力 デフォルト none&lt;/li&gt;
&lt;li&gt;Bracket Spacing&lt;br&gt;
オブジェクトリテラルの{}の間にスペース デフォルト true&lt;/li&gt;
&lt;li&gt;JSX Brackets&lt;br&gt;
jsxの最後の&gt;を単独行でなく、最後の行末につける デフォルト false&lt;/li&gt;
&lt;li&gt;Arrow Function Parentheses&lt;br&gt;
関数の引数が一つでも()を付ける デフォルト avoid&lt;/li&gt;
&lt;li&gt;Range&lt;br&gt;
対象とする範囲を指定&lt;/li&gt;
&lt;li&gt;Require pragma&lt;br&gt;
ファイル先頭にプラグマのあるファイルのみを対象にする
デフォルトfalse&lt;/li&gt;
&lt;li&gt;Insert Pragma&lt;br&gt;
ファイル先頭にプラグマを追加
デフォルトfalse&lt;/li&gt;
&lt;li&gt;HTML Whitespace Sensitivity&lt;br&gt;
HTMLのスペースの扱いを指定&lt;/li&gt;
&lt;li&gt;Vue files script and style tags indentation&lt;br&gt;
Vueファイルのタグ内のコードをインデントするかどうか デフォルト false&lt;/li&gt;
&lt;li&gt;End of Line&lt;br&gt;
改行コードの指定。改行コードは維持するか最初に出てきたコードに合わせるそうです。デフォルト auto&lt;br&gt;
&lt;code&gt;lf&lt;/code&gt;に設定することで、Linuxやmacの\nとWindowsの\r\nの違いをこれで統一できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;適用しないファイルの指定&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.prettierignore&lt;/code&gt;にprettierによる整形の対象としないファイルを指定できます。指定の仕方は&lt;code&gt;gitignore&lt;/code&gt;と同じです。&lt;br&gt;
&lt;code&gt;/node_module/&lt;/code&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;// prettier-ignore&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実行してみる&lt;/h2&gt;
&lt;p&gt;まずはルールに従っているかのチェックを行います。対象のファイルを指定して実行します。&lt;br&gt;
&lt;code&gt;All matched files use Prettier code style!&lt;/code&gt;と出力されればルールに従っており修正する箇所が必要ありません。&lt;br&gt;
&lt;code&gt;Code style issues found in the above file(s). Forgot to run Prettier?&lt;/code&gt;と出力される場合はルールに沿っていない箇所があり、prettierでformatできます。&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;prettier --check &amp;quot;src/**/*.js&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;--write&lt;/code&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;prettier --write src/index.js&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;pretty-quick&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pretty-quick&lt;/code&gt;はgitなどのバージョン管理でステージングにあるファイルを対象に、prettierを実行できるパッケージです。&lt;/p&gt;
&lt;h3&gt;husky と組み合わせる&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;husky&lt;/code&gt;はgit のコミット時などに簡単にhooksを追加できるパッケージです。これを組み合わせれば、コミット時に対象ファイルにpretty-quickを実行できます。&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 husky --save-dev&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;package.jsonに以下を追加&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;{
  &amp;quot;husky&amp;quot;: {
    &amp;quot;hooks&amp;quot;: {
      &amp;quot;pre-commit&amp;quot;: &amp;quot;pretty-quick --staged&amp;quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コミットするとprettierによるチェックが行われ結果が返されます。ルールに従っていた場合はコミットが通りますが、修正が必要な箇所がある場合はコミットが取りやめとなります。自分で修正するかprettierで整形をおこないコミットし直しましょう。&lt;/p&gt;
&lt;h2&gt;vimで利用する&lt;/h2&gt;
&lt;p&gt;いくつか利用可能なプラグインがあります。&lt;code&gt;vim-prettier&lt;/code&gt;が良さそうでしたので私はこちらを利用しています。簡単に利用できます。&lt;/p&gt;
&lt;p&gt;vimrcに以下を追加します。&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;NeoBundle &amp;#39;prettier/vim-prettier&amp;#39;
let g:prettier#config#print_width = 100
let g:prettier#config#single_quote = &amp;#39;true&amp;#39;
let g:prettier#config#jsx_bracket_same_line = &amp;#39;true&amp;#39;
let g:prettier#config#bracket_spacing = &amp;#39;true&amp;#39;
let g:prettier#config#trailing_comma = &amp;#39;es5&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単に導入でき、コードのフォーマットが自動で行われるので便利でした。ソースコードのルールが統一され見やすくなります。
ソースコードを書くときはもちろんですがそれ以外の手順書などのテキストを書くときにも役に立つと思います。&lt;/p&gt;
&lt;p&gt;コミット時に自動で実行できるようにしたり、とても便利なのでプロジェクトに導入してみてはいかがでしょうか。
わたしもこれからは積極的に導入していこうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[OSSへのコントリビュートするときのリポジトリの設定]]></title><description><![CDATA[OSS…]]></description><link>https://honmushi.com/2020/01/15/oss-contribute/</link><guid isPermaLink="false">https://honmushi.com/2020/01/15/oss-contribute/</guid><pubDate>Wed, 15 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;OSSへのコントリビュートを経験しました。
その際、リポジトリの用意など調べながら進めたのでこの記事にメモしておきます。&lt;/p&gt;
&lt;p&gt;元のリポジトリをフォークして、修正してプルリクエストを出す。という作業をするためのリモート・ローカルリポジトリの構成の説明です。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;自分のアカウントへフォークする&lt;/li&gt;
&lt;li&gt;ローカルへcloneする&lt;/li&gt;
&lt;li&gt;作業を行うブランチを作成&lt;/li&gt;
&lt;li&gt;リモートにブランチをpush&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;h2&gt;自分のアカウントへフォークする&lt;/h2&gt;
&lt;p&gt;OSSのリポジトリは間違いなく書き込む権限がありません。直接cloneしてもリモートへpushできませんし、リモートにbranchを作ることもできないと思います。&lt;/p&gt;
&lt;p&gt;まずは自分のアカウントにフォークを行います。リポジトリの右上のボタンでできます。&lt;br&gt;
自分のアカウント以下に同じリポジトリがコピーして作成されます。ここは自分の管理下なので書き込み等を行うことができます。&lt;/p&gt;
&lt;h2&gt;ローカルへcloneする&lt;/h2&gt;
&lt;p&gt;フォークしたリモートリポジトリをローカルにcloneします。&lt;/p&gt;
&lt;h2&gt;作業を行うブランチを作成&lt;/h2&gt;
&lt;p&gt;フローやコミュニティのルールにもよると思いますが、とりあえずmasterに変更を加えるのではなくローカルに作業ブランチを作成しましょう。&lt;/p&gt;
&lt;h2&gt;リモートにブランチをpush&lt;/h2&gt;
&lt;p&gt;フォークした自分のリモートリポジトリへpushして、リモートリポジトリにも作業ブランチを作成します。&lt;br&gt;
以降、作業ブランチで構築を行いcommitして、リモートの作業ブランチへpushします。&lt;/p&gt;
&lt;h2&gt;プルリクエストを作る&lt;/h2&gt;
&lt;p&gt;作業が完了したらプルリクエストを作ります。&lt;br&gt;
自分のアカウントのリモート作業ブランチのリポジトリにプルリクエストを作成するボタンがあるので、そこから作成します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;自分のアカウント:リポジトリ名/作業ブランチ&lt;/code&gt; から &lt;code&gt;OSS管理者:リポジトリ名/master&lt;/code&gt;へのプルリクエストを行います。開発フローによってはdevelopブランチへのプルリクエストなどもあると思いますので注意しましょう。&lt;/p&gt;
&lt;p&gt;作業の進捗がわかるようにとか、議論ができるように早めにプルリクエストを作っておくといいそうです。
コミュニティのルールや方針にもよると思います。&lt;/p&gt;
&lt;h2&gt;必要なら修正&lt;/h2&gt;
&lt;p&gt;以降はローカルの作業ブランチで修正、リモートの作業ブランチへpush。&lt;br&gt;
作業が完了したら、githubにて管理者のリポジトリのmasterブランチへプルリクエストを出します。&lt;/p&gt;
&lt;h2&gt;フォーク元リポジトリの更新を反映する&lt;/h2&gt;
&lt;p&gt;フォークした自分のリポジトリには、fork元リポジトリに行われた管理者や他の開発者の変更が反映されません。放置しておくと差異が大きくなり衝突が起きる可能性が大きくなるので、pushの前などこまめに反映しておく必要が有ります。&lt;/p&gt;
&lt;p&gt;フォーク元リポジトリ、すなわち&lt;code&gt;OSS管理者:リポジトリ/master&lt;/code&gt; をリモートに追加して、そこからfetchとmergeをおこないます。&lt;/p&gt;
&lt;p&gt;以下のコマンドでフォーク元のリポジトリをremoteに追加します。「upstream」という名前で登録しています。&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;git remote add upstream git@github.com:oss管理者/リポジトリ.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;リモートupstreamから情報をfetchします。&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;git fetch upstream&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ローカルのブランチへ変更をmergeします。&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;git merge upstream/master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;書き込み権限があるなら&lt;/h2&gt;
&lt;p&gt;直接リポジトリをcloneして、作業するブランチを作成。ブランチで作業が終わったらリモートにbranchを作成して、そこからリモートのmasterへプルリクエストすれば良いです。&lt;/p&gt;
&lt;p&gt;管理が減るのでこっちのほうがスッキリしますね。OSSでは通常無いのかなと思います。管理者やプロジェクトに入ればできると思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;OSSへのコントリビュートできる機会があったのでやってみましたが、とても簡単な内容でしたのでそんなに自慢できるものでもありません。&lt;/p&gt;
&lt;p&gt;ただ、初めてやってみてとても興味を持てたので、機会を見つける・自分で立ち上げる等してOSSへの貢献を目指したいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[yarnインストールの際にエラーがでた]]></title><description><![CDATA[ずっとnodeモジュールの管理にnpmを使っていたのですが、ふと思い立ったのでyarnを使えるようにしてみました。 特に必要はないかもしれませんが、npmよりもyarn…]]></description><link>https://honmushi.com/2020/01/15/yarn-install/</link><guid isPermaLink="false">https://honmushi.com/2020/01/15/yarn-install/</guid><pubDate>Wed, 15 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ずっとnodeモジュールの管理にnpmを使っていたのですが、ふと思い立ったのでyarnを使えるようにしてみました。&lt;/p&gt;
&lt;p&gt;特に必要はないかもしれませんが、npmよりもyarnのほうが動作が早いとかコマンドが短いなどの利点があるようです。詳細はあまり知りませんが、大抵の場合どちらかが使えれば大丈夫かなと思います。&lt;/p&gt;
&lt;p&gt;今回aptを使ってyarnをインストールした際に、引っかかることがあったのでメモしておきます。
Ubuntuにて発生しました。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;aptでインストールしたyarnのバージョンが古いものだったらしく、正常に動作しなかったようです。&lt;/p&gt;
&lt;p&gt;バージョン情報を更新してからinstallし直すことで解消し、正常に動作するようになりました。&lt;/p&gt;
&lt;h2&gt;エラーの内容&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;yarn&lt;/code&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;ERROR: There are no scenarios; must have at least one.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;yarn install&lt;/code&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;ERROR: [Errno 2] No such file or directory: &amp;#39;install&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;解決方法&lt;/h2&gt;
&lt;p&gt;yarnの最新バージョンを確認して再インストールすれば解消しました。&lt;/p&gt;
&lt;h3&gt;yarnを削除する&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;sudo apt remove cmdtest
sudo apt remove yarn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;パッケージの情報を更新&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;curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo &amp;quot;deb https://dl.yarnpkg.com/debian/ stable main&amp;quot; | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;再インストール&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;sudo apt-get install yarn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで正常に動作するようになりました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;yarnが無事にインストールできました。
npmでも特に困ってなかったのでどちらでもいいのですが、せっかくなので使ってみます。何か気づくことがあったらまた記事にします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[GithubにSSH公開鍵を登録]]></title><description><![CDATA[GithubにSSH公開鍵を登録して、手元の秘密鍵でアクセスできるようにする方法です。
いちいちID/PWを入力する必要がなくなりますので早いうちにやっておくと良いです。
私はずっと前から対応していましたが、人に説明する機会があったので手順をメモしておきます。 Github…]]></description><link>https://honmushi.com/2020/01/14/github-ssh/</link><guid isPermaLink="false">https://honmushi.com/2020/01/14/github-ssh/</guid><pubDate>Tue, 14 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;GithubにSSH公開鍵を登録して、手元の秘密鍵でアクセスできるようにする方法です。
いちいちID/PWを入力する必要がなくなりますので早いうちにやっておくと良いです。
私はずっと前から対応していましたが、人に説明する機会があったので手順をメモしておきます。&lt;/p&gt;
&lt;p&gt;Github使っている人に取ってはいまさらですが、これから使う人の参考になればと思います。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;秘密鍵公開鍵ペアを作る&lt;/li&gt;
&lt;li&gt;ssh-agentに秘密鍵を登録&lt;/li&gt;
&lt;li&gt;Githubに公開鍵を登録&lt;/li&gt;
&lt;li&gt;接続確認&lt;/li&gt;
&lt;li&gt;リポジトリの設定の変更が必要な場合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;秘密鍵と公開鍵のペアを作る&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;手元で秘密鍵と公開鍵のペアを作ります。このうち公開鍵をGithubに渡しておき、手元の秘密鍵を使ってログインできるようになります。公開鍵は他人に知られても大丈夫ですが、秘密鍵は他人に知られてはいけません。しっかりと管理しましょう。&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;ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ssh-agentに鍵を登録&lt;/h2&gt;
&lt;p&gt;以下のコマンドを実行して、ssh-agentに鍵を登録します。ssh時に使う鍵の候補に追加されます。&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;ssh-add ~/.ssh/id_rsa&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Githubに公開鍵を登録&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;.ssh/以下に出力されている&lt;code&gt;id_rsa.pub&lt;/code&gt;が公開鍵です。この内容をgithubのsettingのSSH keyの項目にて追加・登録します。&lt;/p&gt;
&lt;p&gt;ここまでできれば準備完了です。必要なものが揃ったので接続を試します。&lt;/p&gt;
&lt;h2&gt;接続確認&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://help.github.com/en/github/authenticating-to-github/testing-your-ssh-connection&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://help.github.com/en/github/authenticating-to-github/testing-your-ssh-connection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;コマンドを実行しましょう。githubへssh接続を試します。&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;ssh -T git@github.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下のようなメッセージが表示されますので&lt;code&gt;yes&lt;/code&gt;と入力します。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The authenticity of host ‘github.com (IP ADDRESS)’ can’t be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;問題なければ以下のメッセージが続けて表示されます。これでsshによる接続の準備ができました。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi username! You’ve successfully authenticated, but GitHub does not
provide shell access.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;リポジトリの設定の変更が必要な場合&lt;/h2&gt;
&lt;p&gt;gitのremoteの設定が&lt;code&gt;https://github.com/[ユーザー名]/[リポジトリ]&lt;/code&gt;のような指定方法になっていると、SSH接続が上手くいかずID/PWの入力を求められます。以下のコマンドでremoteの接続先の指定を更新することで解消できます&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;git remote set-url origin git@github.com:[ユーザー名]/[リポジトリ].git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;別にssh鍵を登録しなくてもID/PWでリクエストは行なえますが、pushやpullのたびに入力するのは面倒なので対応しておくといいでしょう。秘密鍵・公開鍵を使ったssh接続の基礎的な理解にもつながると思います。それほど難しくもないので困ることも少ないです。&lt;/p&gt;
&lt;p&gt;もしも上手くいかない場合は、秘密鍵と公開鍵をまちがえているとかssh-agentに正しく登録されていないなど考えられます。エラーの内容を読んで落ち着いて対処しましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[VimでReact NativeとTypeScript向けの設定に「tsuquyomi」を利用]]></title><description><![CDATA[React Nativeのアプリを作っていて、すこしずつTypeScriptの利用を進めています。 せっかくTypeScriptを使っているので、静的な型チェックなど便利な機能を使いたいです。
普段使っているエディタVim…]]></description><link>https://honmushi.com/2020/01/14/vim-reactnative/</link><guid isPermaLink="false">https://honmushi.com/2020/01/14/vim-reactnative/</guid><pubDate>Tue, 14 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeのアプリを作っていて、すこしずつTypeScriptの利用を進めています。&lt;/p&gt;
&lt;p&gt;せっかくTypeScriptを使っているので、静的な型チェックなど便利な機能を使いたいです。
普段使っているエディタVimの設定をカスタマイズしました。&lt;/p&gt;
&lt;p&gt;同じような環境で作業している方の参考になればと思います。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;いくつか試してみて簡単に動かせた、「tsuquyomi」というVimプラグインを利用しました。
さまざまなところでおすすめされているのを見かけるので良さそうです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Quramy/tsuquyomi&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/Quramy/tsuquyomi&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;プラグインのインストール&lt;/li&gt;
&lt;li&gt;tsconfig.jsonの設置&lt;/li&gt;
&lt;li&gt;利用を見送ったプラグイン&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;プラグインのインストール&lt;/h2&gt;
&lt;p&gt;NeoBundleを利用しているのであればvimrcにて以下を記述。依存で必要なプラグインがあるのでそちらも一緒にインストールしましょう。&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;NeoBundle &amp;#39;Quramy/tsuquyomi&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;npm などを使いTypeScriptをインストールしておきtsserverを動作できるようにしておく必要があると思います。他にも&lt;code&gt;@types/react&lt;/code&gt; と&lt;code&gt;@types/react-native&lt;/code&gt;もインストールしました。&lt;/p&gt;
&lt;h2&gt;tsconfig.jsonの設置&lt;/h2&gt;
&lt;p&gt;tsconfig.jsonを設置することでビルド時の設定を変更できます。正常にビルドチェックが発生しない場合はこれを見直すといいです。&lt;/p&gt;
&lt;p&gt;いくつかチェックのルールも変更できますので、共通の設定を作った上でチームに配布等すれば簡単にコーディングルールを配布できます。&lt;/p&gt;
&lt;h3&gt;サンプル&lt;/h3&gt;
&lt;p&gt;現在利用しているtsconfigのサンプルです。各パラメータの意味などはTypeScriptの「compiler-options」のドキュメントに載っているので参考に設定します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.typescriptlang.org/docs/handbook/compiler-options.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.typescriptlang.org/docs/handbook/compiler-options.html&lt;/a&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;{
 &amp;quot;compilerOptions&amp;quot;: {
   &amp;quot;target&amp;quot;: &amp;quot;esnext&amp;quot;,
   &amp;quot;module&amp;quot;: &amp;quot;esnext&amp;quot;,
   &amp;quot;lib&amp;quot;: [&amp;quot;esnext&amp;quot;],
   &amp;quot;jsx&amp;quot;: &amp;quot;react-native&amp;quot;,
   &amp;quot;noEmit&amp;quot;: true,
   &amp;quot;moduleResolution&amp;quot;: &amp;quot;node&amp;quot;,
   &amp;quot;strict&amp;quot;: true,
   &amp;quot;esModuleInterop&amp;quot;: true,

   &amp;quot;noFallthroughCasesInSwitch&amp;quot;: true,
   &amp;quot;noImplicitReturns&amp;quot;: true,
   &amp;quot;noUnusedLocals&amp;quot;: true,
   &amp;quot;noUnusedParameters&amp;quot;: true,
   &amp;quot;resolveJsonModule&amp;quot;: true,

   &amp;quot;allowUnreachableCode&amp;quot;: false,
   &amp;quot;allowUnusedLabels&amp;quot;: false,

   &amp;quot;noImplicitAny&amp;quot;:false_
  },
  &amp;quot;exclude&amp;quot;: [&amp;quot;node_modules&amp;quot;, &amp;quot;babel.config.js&amp;quot;, &amp;quot;metro.config.js&amp;quot;, &amp;quot;jest.config.js&amp;quot;]
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;利用を見送ったプラグイン&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;vim-lsp&lt;/li&gt;
&lt;li&gt;vim-lsp-typescript&lt;br&gt;
tsconfig.jsonを設置して型チェックの動作はできたました。しかしチェック内容が正常でなかった様子？なのと設定が難しそうだったので早めに諦めました。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;とりあえず&lt;code&gt;.tsx&lt;/code&gt;ファイルの保存時にコンパイルチェックが行われ、エラーが報告されます。tsconfigの設定などまだまだよくわかっていないので、少しずつ最適化していこうと思います。&lt;/p&gt;
&lt;p&gt;定義へのジャンプや補間なども用意されているのでかなり便利になりました。また便利な設定やコツなど見つけたら紹介します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「GitHub実践入門」を読んだ]]></title><description><![CDATA[Gitに関する本です。基本的な概念説明から導入準備、実際の使い方やコマンドの紹介、チームでの利用やGit Flow・Github Flowの紹介などGit…]]></description><link>https://honmushi.com/2020/01/09/github-memo/</link><guid isPermaLink="false">https://honmushi.com/2020/01/09/github-memo/</guid><pubDate>Thu, 09 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Gitに関する本です。基本的な概念説明から導入準備、実際の使い方やコマンドの紹介、チームでの利用やGit Flow・Github Flowの紹介などGitの多岐にわたる内容を紹介しています。&lt;/p&gt;
&lt;p&gt;この一冊を読めば大抵のことは理解でき、使いこなせるようになります。使い始めのときに読んでおくと学習が捗ります。
実際に使ってみるのが一番わかり易いと思いますので、勉強中の方やGitを利用する予定のある方は本を読みつつ実際にGitHubを触ってみましょう。&lt;/p&gt;
&lt;p&gt;プルリクエストの送り方や対応方法なども書かれていて、実際の現場でのフローがわかるのではないかと思います。
入門の内容なので特殊な使い方やいざというときの対処方法はそれほど書かれていません、コンフリクトの解消や間違ったコミットの巻き戻しなどそういった点には注意しましょう。&lt;/p&gt;
&lt;p&gt;業務で使ったことがあるので内容はすでに知っているものでしたが、備忘や共有の際にまとまっていると便利なのでこの記事にまとめておきます。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/477416366X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=477416366X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6559bc93582db802879273e5e98d9801&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=477416366X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=477416366X&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&gt;よく使うコマンドのメモ&lt;/h2&gt;
&lt;p&gt;Gitでよく使うコマンドのメモです。&lt;/p&gt;
&lt;h3&gt;init&lt;/h3&gt;
&lt;p&gt;リポジトリの初期化。&lt;code&gt;.git&lt;/code&gt;ディレクトリが生成される。&lt;/p&gt;
&lt;h3&gt;status&lt;/h3&gt;
&lt;p&gt;リポジトリの状態確認。&lt;/p&gt;
&lt;h3&gt;add&lt;/h3&gt;
&lt;p&gt;ステージに追加。
対象とする範囲を指定できる。&lt;code&gt;.&lt;/code&gt;で現在のディレクトリ以下全部、ディレクトリやファイル名を指定するとその範囲のみが対象になる。&lt;/p&gt;
&lt;h3&gt;commit&lt;/h3&gt;
&lt;p&gt;ステージ領域のファイルをコミット。
メッセージは1行目にコミットの内容の要約、2行目が空行、3行目以降が詳細な理由や目的、とするのが一般的です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-m&lt;/code&gt;でメッセージをオプションに渡せる。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-a&lt;/code&gt; でaddを行っていなくても、自動で変更・削除されたファイルをコミットします。
新規作成したファイルは対象になりません。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--amend&lt;/code&gt;で直前のコミットメッセージを修正できます。&lt;/p&gt;
&lt;p&gt;メッセージに「#1」を含めることで該当するIssueに関連付けさせて表示することができます。
また、「fix #1」とすればIssueをCloseできます。&lt;/p&gt;
&lt;h3&gt;log&lt;/h3&gt;
&lt;p&gt;リポジトリのコミットログを確認する。
ディレクトリやファイル名を渡すと、その範囲が対象になります。
&lt;code&gt;-p&lt;/code&gt;を付けると差分が表示されます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-graph&lt;/code&gt; ブランチのマージなどの状況が視覚的に表示されます。&lt;/p&gt;
&lt;h3&gt;diff&lt;/h3&gt;
&lt;p&gt;現在のワークツリーとステージ領域の差分を表示。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;HEAD&lt;/code&gt;を付けることで、ワークツリーと最新コミットの差分が確認できます。この場合の&lt;code&gt;HEAD&lt;/code&gt;は作業しているブランチの最新コミットを参照するポインタとなってます。&lt;/p&gt;
&lt;h3&gt;branch&lt;/h3&gt;
&lt;p&gt;リポジトリのブランチを一覧表示します。
名前を渡すと新規でブランチを作成できます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-a&lt;/code&gt; でリモートブランチも含めた情報を表示。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-D xxx&lt;/code&gt; xxxブランチを削除します。&lt;/p&gt;
&lt;h3&gt;checkout&lt;/h3&gt;
&lt;p&gt;ブランチを切り替えます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-b xxx&lt;/code&gt; を付けると、xxxという名前のブランチを新規作成し切り替えます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-&lt;/code&gt; を付けると、1つ前にいたブランチに移動できます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-b xxx yyy&lt;/code&gt; とするとyyyブランチを元にxxxブランチを作成して切り替えます。origin/xxxを指定して使うことがたまに有ります。&lt;/p&gt;
&lt;h3&gt;merge —no-ff xxx&lt;/h3&gt;
&lt;p&gt;xxxブランチを現在のブランチにマージします。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--no-ff&lt;/code&gt; を付けることでマージコミットが発生して、あとからの参照や取り消しがやりやすくなります。&lt;/p&gt;
&lt;h3&gt;reset&lt;/h3&gt;
&lt;p&gt;指定した状態にワーキングツリーを戻します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--hard ハッシュ値&lt;/code&gt; コミットのハッシュ値を指定してその位置まで戻ることができます。&lt;/p&gt;
&lt;h3&gt;rebase&lt;/h3&gt;
&lt;p&gt;コミットを押しつぶして改変する&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-i HEAD~2&lt;/code&gt; とするとHEADを含めた2つのコミットを対象に合体させて、新しい一つのコミットとして書き換えます。&lt;/p&gt;
&lt;h3&gt;remote&lt;/h3&gt;
&lt;p&gt;登録されているリモートリポジトリを確認。参照用の名前を表示する。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-v&lt;/code&gt; でpushとfetchの対象になっているURLを表示&lt;/p&gt;
&lt;p&gt;&lt;code&gt;add&lt;/code&gt; ローカルリポジトリに指定したリモートリポジトリを登録。 &lt;/p&gt;
&lt;p&gt;&lt;code&gt;git remote add origin git@github.com:xxx/yyy.git&lt;/code&gt; でoriginという名前でリモートリポジトリを指定する。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;remove xxx&lt;/code&gt; xxxで参照しているリモートリポジトリを削除。&lt;br&gt;
&lt;code&gt;rename xxx yyy&lt;/code&gt; xxxで参照しているリモートリポジトリをyyyにリネーム。&lt;/p&gt;
&lt;h3&gt;push&lt;/h3&gt;
&lt;p&gt;リモートリポジトリに送信。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git push -u origin master&lt;/code&gt; とすると、現在のローカルリポジトリの内容をoriginという名前のリモートリポジトリの、masterブランチに送信します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-u&lt;/code&gt; でupstreamの設定を同時に行うことができ、以降pull・pushコマンドの対象がorigin masterに設定されます。&lt;/p&gt;
&lt;h3&gt;fetch&lt;/h3&gt;
&lt;p&gt;現在のブランチにリモートリポジトリのデータを取得。&lt;/p&gt;
&lt;h3&gt;pull&lt;/h3&gt;
&lt;p&gt;最新のリモートリポジトリを取得。fetchとmergeを行っている。&lt;/p&gt;
&lt;h3&gt;clone&lt;/h3&gt;
&lt;p&gt;リモートリポジトリを取得。
cloneした直後はmasterブランチなはずで、originという名前でリモートリポジトリが参照できる。&lt;/p&gt;
&lt;h3&gt;tag&lt;/h3&gt;
&lt;p&gt;タグの一覧を表示&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tag xxx&lt;/code&gt; でxxxという名前の軽量タグを作成、現在のブランチの最新コミット（すなわちHEAD）につく&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-a&lt;/code&gt; 注釈付きのタグとなり、作成者や日付・メッセージなどの情報がつく&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tag -a xxx -m &apos;release&apos;&lt;/code&gt; -m でメッセージを指定できる&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tag -a xxx コミットのハッシュ&lt;/code&gt; 過去のコミットにタグを付けることも可能&lt;/p&gt;
&lt;p&gt;&lt;code&gt;push origin xxx&lt;/code&gt; タグは通常リモートにpushされないので、明示的にpushする必要がある&lt;/p&gt;
&lt;p&gt;&lt;code&gt;push origin --tags&lt;/code&gt; ローカルのタグを全部リモートへpush&lt;/p&gt;
&lt;h2&gt;Gitを用いた開発フローの例&lt;/h2&gt;
&lt;p&gt;リモートリポジトリのforkは行わないことが前提のフロー。
各メンバーがローカルリポジトリとリモートリポジトリのみ管理すれば良くなるためシンプル。&lt;/p&gt;
&lt;h3&gt;GitHub Flow&lt;/h3&gt;
&lt;p&gt;シンプルなワークフローで頻繁にデプロイすることを前提としてものです。覚えやすくとっつきやすいですが、masterブランチの状態をしっかり安全にしておくために注意する必要があります。&lt;/p&gt;
&lt;p&gt;シンプルなことも有り高速な開発フローに向いているそうです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;masterブランチは常にデプロイ可能な状態を保つ。&lt;/li&gt;
&lt;li&gt;作業を行うときはローカルでブランチを作成してコミット。&lt;/li&gt;
&lt;li&gt;リモートにも同名のブランチを作っておく。&lt;/li&gt;
&lt;li&gt;定期的にリモートの同名ブランチへpushする。&lt;/li&gt;
&lt;li&gt;必要であればmasterへプルリクエストを行いレビュー等をする。&lt;/li&gt;
&lt;li&gt;作業が完了したら、masterへマージする。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;新しいブランチはmasterから作成する。ブランチ名はやる内容がわかるようにして、レビュー等を受けやすいようにコミットの粒度をなるべく小さくする。
常にデプロイできるマスターブランチを維持するためにテストやCIがとても重要です。&lt;/p&gt;
&lt;h3&gt;Git Flow&lt;/h3&gt;
&lt;p&gt;上記のGitHub Flowよりも結構ややこしいですが、その分実際の現場では役に立つことが多いと思います。
コマンドとしてGit Flowをサポートするツールがあるので、そちらを使うと快適に開発に参加できます。&lt;/p&gt;
&lt;p&gt;可能であれば仕組みやフローの理解のために、自分で環境を用意して動かしてみるといいです。&lt;/p&gt;
&lt;p&gt;基本的には以下のブランチができます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;master&lt;/li&gt;
&lt;li&gt;develop&lt;/li&gt;
&lt;li&gt;feature(機能ごとに名前を付ける)&lt;/li&gt;
&lt;li&gt;release(バージョンごとに名前を付ける)&lt;/li&gt;
&lt;li&gt;hotfix(バージョンごとに名前を付ける)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;開発からリリースまでの手順の概要は以下です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;developから作業用ブランチfeatureを作成し作業を行う&lt;/li&gt;
&lt;li&gt;作業が終わるとリモートのfeatureブランチへpush&lt;/li&gt;
&lt;li&gt;developへプルリクエスト問題なければmergeする&lt;/li&gt;
&lt;li&gt;featureは削除&lt;/li&gt;
&lt;li&gt;リリース分の作業が進んだら、developからreleaseブランチを作成&lt;/li&gt;
&lt;li&gt;releaseにてリリース準備&lt;/li&gt;
&lt;li&gt;リリース準備が終わったらmasterへmergeし、タグを発行&lt;/li&gt;
&lt;li&gt;releaseをdevelopにもmergeする&lt;/li&gt;
&lt;li&gt;masterとdevelopをリモートへpush、tagもpushする&lt;/li&gt;
&lt;li&gt;masterブランチをリリースする&lt;/li&gt;
&lt;li&gt;releaseは削除&lt;/li&gt;
&lt;li&gt;不具合があった場合はタグやmasterブランチからhotfixを作成して修正&lt;/li&gt;
&lt;li&gt;hotfixで修正をおこない完了したらリモートへpush、masterへプルリクエスト&lt;/li&gt;
&lt;li&gt;hotfixの内容をdevelopにもプルリクエストする&lt;/li&gt;
&lt;li&gt;hotfixは削除&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;会社でGitを初めて導入する際の懸念点やメリットなども紹介されており、他のバージョン管理からの乗り換え時の検討や提案にも役に立つ知識でした。&lt;/p&gt;
&lt;p&gt;さまざまなCI関連のツールの紹介や設定方法も書かれており、実際の開発で使えると心強い情報がたくさんありました。
Git Flowなど実際にやって見ないと理解が難しいものもありますので、事前知識として頭に入れた後は機会を見つけて積極的に参加すればすぐに身につくと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Nativeを始めるのにおすすめ書籍を紹介]]></title><description><![CDATA[2019年いくつかスマホアプリを作成しました。
すべてReactNativeを利用したクロスプラットフォームアプリです。app storeとgoogle play両方で配信しています。 コミュニティバス のっティ時刻表   ノートアプリ Foldest Note…]]></description><link>https://honmushi.com/2020/01/07/reactnative-books/</link><guid isPermaLink="false">https://honmushi.com/2020/01/07/reactnative-books/</guid><pubDate>Tue, 07 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2019年いくつかスマホアプリを作成しました。
すべてReactNativeを利用したクロスプラットフォームアプリです。app storeとgoogle play両方で配信しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/lp/noty/&quot;&gt;コミュニティバス のっティ時刻表&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/lp/foldest/&quot;&gt;ノートアプリ Foldest Note&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/lp/mdediter/&quot;&gt;マークダウンエディタ skelton md editer&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/lp/coffeememo/&quot;&gt;コーヒーメモ&lt;/a&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;他にも業務提携の形で、企業のアプリ開発のお手伝いをすることも有りました。チームでの開発も経験でき、自分の中にノウハウも蓄積されてきました。&lt;/p&gt;
&lt;p&gt;約2年勉強しながら取り組んでみてたくさんの本から情報を取り入れました。今回はその中でおすすめだった本とその概要・注意点を紹介します。よりすぐりの5冊のみ紹介します。&lt;/p&gt;
&lt;p&gt;プログラミング経験者でReactNativeに取り掛かろうという人も、プログラミング未経験でこれから始めようという人にもおすすめです。&lt;/p&gt;
&lt;h2&gt;React Native　～JavaScriptによるiOS／Androidアプリ開発の実践&lt;/h2&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/B088BLSH9V/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B088BLSH9V&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=bdcf732cb8a8aaae4346a6a1fc057ef4&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B088BLSH9V&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=B088BLSH9V&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;h3&gt;概要&lt;/h3&gt;
&lt;p&gt;React Nativeを使ったクロスプラットフォームアプリ開発について、環境の用意から開発ビルド・ストアへのアップロードまで網羅的に説明されています。
発売されて間もないので情報も新しく、すぐに現場で取り入れることができるHOTな内容です。&lt;/p&gt;
&lt;p&gt;エディタなどの準備からnpmを使った各パッケージのインストール。一通りの実装に加えて代表的なパッケージの紹介・導入も無いように含まれています。&lt;/p&gt;
&lt;p&gt;初心者にもわかりやすく書かれていますし、経験者にも基本的な設計やツールの見直しとしてために成る情報が多いです。&lt;/p&gt;
&lt;p&gt;TypeScriptやAtomicDesignも取り入れているので、その点でも参考になります。もちろん各専門の書籍を見たほうが情報は多いですが、この本は網羅的にチェックできるのでとてもおすすめです。&lt;/p&gt;
&lt;h3&gt;注意点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;大ボリューム&lt;/p&gt;
&lt;p&gt;700ページ近くあります。大きさが小さいので思ったよりも文字数は少ないです。それでもやはり読み進めるのに苦戦するでしょう。
その分、初心者も経験者にも参考になることが書いてあり、ReactNativeを使った開発について網羅的に書かれています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expoは利用しない&lt;/p&gt;
&lt;p&gt;Expo使うと簡単にビルド等ができるので、個人的には初めての人にExpoを利用することをおすすめします。しかし、この本では使っていません。
初めての場合、各ストアへのアップロードやビルドで躓く可能性があります。その点は調べながら諦めずにがんばりましょう。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;JavaScript Primer 迷わないための入門書&lt;/h2&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4048930737/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4048930737&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=dd5337355a24516bdb739a5358a79042&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4048930737&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4048930737&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;h3&gt;概要&lt;/h3&gt;
&lt;p&gt;JavaScriptについての入門書です。初心者にもわかりやすく書かれているのが特長で、かなり親切に説明されてます。&lt;/p&gt;
&lt;p&gt;ECMAScript2015以降をベースとした解説になっており、新しい構文やルールなどについての言及も有ります。そのため現在進行形で発展しているJavaScriptの、新しい仕様なども把握しつつ学習できます。&lt;/p&gt;
&lt;p&gt;プログラミングをやったことがない人にも演算子やデータ型の説明など、基礎の基礎についての説明が有るので入門に向いています。ブラウザでも実行できるので簡単に環境も用意できますので。&lt;/p&gt;
&lt;h3&gt;注意点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;結構長い&lt;/p&gt;
&lt;p&gt;500ページ近い結構大きい本です。基礎的な部分から説明が始まるので、その分容量も多くなっています。ある程度の経験があるなら飛ばしながら読むことが出来ます。逆に初心者であっても、しっかり読み込むことで言語の仕様を理解できるので、実践で役に立つ知識を得られることは間違いありません。&lt;/p&gt;
&lt;p&gt;実際の現場でも、すべてをしっかり理解できている人は珍しいです。他にもプログラミング言語は有りますし、利用する言語すべてを暗記するのはとても大変です。
わからないときやどんな挙動するんだっけ？と疑問に思ったときに、この本を使って調べながら実装するのがおすすめです。&lt;/p&gt;
&lt;p&gt;その時の引き出しとして使えるように、内容に目を通しておくのがおすすめの使い方です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Webで見ることができる&lt;/p&gt;
&lt;p&gt;もともとはWebサイトとして公開されているもので、最近書籍化されました。ですので、内容はWeb上で見ることが出来ます。
以下のURLです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://jsprimer.net/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://jsprimer.net/&lt;/a&gt;  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;React Native入門&lt;/h2&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798056057/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798056057&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=682c3a0e9362a4f4188a8afe6ade0bc8&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4798056057&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4798056057&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;h3&gt;概要&lt;/h3&gt;
&lt;p&gt;React Nativeの入門書です。環境の用意の部分から丁寧に書かれていて、サンプルコードもダウンロードして利用できます。&lt;/p&gt;
&lt;p&gt;基本的な開発から、コンポーネントやレイアウトの基礎知識、サンプルアプリの作成を作り切るところまで紹介されています。ソースコードもそれほど多くないので読みやすいです。&lt;/p&gt;
&lt;p&gt;試しに使ってみる、アプリを動かしてみるというところから、実際に思いついたアプリを作れるようになるまでの知識が得られます。&lt;/p&gt;
&lt;h3&gt;注意点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;サンプルコードが動かない  &lt;/p&gt;
&lt;p&gt;ReactNative自体のアップデートが頻繁に行われているため、サンプルコードに動作しない箇所があったりします。&lt;br&gt;
エラーになることがあったので注意が必要です。「ReactNavigation」を始めとして、モジュールの場所の変更や実装方法の変更があるので注意しましよう。落ち着いてエラーの内容を確認しつつ該当する箇所の修正を行う必要があります。公式のドキュメントなんかも確認しましょう。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;スマホにExpoクライアントをインストールするのがおすすめ&lt;/p&gt;
&lt;p&gt;書籍ではExpo Snackというサービスを利用して、ブラウザ上で端末のエミュレータを動かしアプリを作成します。
簡単に利用できて便利ですが、無料ユーザーでは他ユーザーとサーバのリソースを共有しています。そのため、待ち時間が長くなるケースに多く出会い不便に感じました。&lt;br&gt;
自分のスマホにExpoのクライアントアプリをインストールすることで、手元の端末を使ってアプリを試すことが出来ます。待ち時間が無いのでおすすめです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;アプリのビルド・ストアでの公開については情報なし&lt;/p&gt;
&lt;p&gt;アプリをビルドする手順、ストアで公開する方法については触れられていません。&lt;br&gt;
AppleやGoogleのストアのUIやフローは頻繁に更新されるのであまり書籍は参考にならないです。Webで公開されている公式の情報を参考に取り組みましょう。日本語でも用意されているので落ち着いて見れば問題なくできます。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;開眼JavaScript&lt;/h2&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/487311621X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=487311621X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=99f818025a66f20df134265e184aba4f&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=487311621X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=487311621X&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;h3&gt;概要&lt;/h3&gt;
&lt;p&gt;JavaScriptのちょっと変わった言語仕様について紹介している本です。
おやっ？と思った所とか、よくわからずに使っていたところがまとめられているのでおすすめです。&lt;/p&gt;
&lt;p&gt;他のプログラミング言語を使ったことがある人は、これを読むことでJavaScriptの特徴が把握できます。&lt;/p&gt;
&lt;h3&gt;注意点&lt;/h3&gt;
&lt;p&gt;初めてプログラミングする人にはちょっと難しいと感じる部分もあります。最初は飛ばしながら読んでみて、色々作れるようになってからもう一度読むと理解が進みます。&lt;/p&gt;
&lt;p&gt;JavaScriptの特徴的な部分や理解の難しい動作を解説されているので、JavaScriptを使っていくのであれば一度読んでおくといい本です。
この本に書いてあることが理解できたら使いこなせたようなものです。&lt;/p&gt;
&lt;h2&gt;Atomic Design&lt;/h2&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/477419705X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=477419705X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=c80eeaad55eeba4e5619bf1bce9ed43d&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=477419705X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=477419705X&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;h3&gt;概要&lt;/h3&gt;
&lt;p&gt;UI設計の手法である「Atomic Design」についての本です。
ざっくり言うと小さなコンポーネントを原子として見立てて、それの組み合わせで分子や有機体を作って設計していく手法です。&lt;/p&gt;
&lt;p&gt;意外とソースコードが多めです。ReactNativeではありませんが、全編Reactを使ったWebのソースコードなので参考にできます。&lt;/p&gt;
&lt;p&gt;アプリを作っているうちに、コンポーネント設計のお手本や参考が欲しくなる時もあります。一人で作っていてこれでいいのかなと思ったらこの本を参考にするのがおすすめです。&lt;/p&gt;
&lt;p&gt;ReactNativeでのプログラミングだけでなく、そこに至るまでの設計・UIデザインについても身につくので勉強になります。&lt;/p&gt;
&lt;h3&gt;注意点&lt;/h3&gt;
&lt;p&gt;設計の話なので役に立つのかピンとこないこともありますがとても大切です。
Reactと相性がいいので、オリジナルの設計をして進めるより、AtomicDesignを始めとした考え方を取り入れて進めたほうが後で得します。メンテナンスや再利用しやすいソースコードを作ることができます。&lt;/p&gt;
&lt;p&gt;テストのやり方なども書かれているので応用することでさまざまな知識が身につくので、早いうちに覚えておきたい内容になっています。&lt;/p&gt;
&lt;p&gt;本の中に出てくるプログラムは、ReactNativeで書かれたコードではないのでそこは注意が必要です。設計手法やテストのコツなどを都度読み替えて身につけましょう。&lt;/p&gt;
&lt;h2&gt;よく利用した公式ドキュメントの紹介&lt;/h2&gt;
&lt;p&gt;以下3つの公式ドキュメントを紹介します。他にも利用するモジュールがあれば、そのドキュメントをブックマークしておきましょう。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/latest/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/latest/&lt;/a&gt;&lt;br&gt;
Expoの公式ドキュメントです。アプリのビルドや各種設定ファイルの内容など、丁寧に説明されています。
ReactNativeのコンポーネントについても説明があるので、基本的なものについてはここで間に合います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://facebook.github.io/react-native/docs/getting-started&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/react-native/docs/getting-started&lt;/a&gt;&lt;br&gt;
ReactNativeのドキュメントです。それほど使うことはありませんが、パラメータの内容や定義などを調べるときに使うことが有りました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ja.reactjs.org/docs/react-component.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://ja.reactjs.org/docs/react-component.html&lt;/a&gt;&lt;br&gt;
Reactのドキュメントです。コンポーネントのstate・props・ライフサイクルについてはここで学んでおくといいです。実際にアプリを動かしながら試すと理解が早いです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://jsprimer.net/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://jsprimer.net/&lt;/a&gt;&lt;br&gt;
JavaScriptを1から学べる書籍です。上記で書籍版を紹介していますが、Web上で公開されていますのでこちらで十分の場合もあります。どうしても手元においておきたい人は書籍版を購入しましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;5つの本を紹介しました。ReactNativeは経験者であればとても簡単に初められますし、未経験でも何か作りながら学ぶことでモチベーションがあがるのでおすすめです。&lt;/p&gt;
&lt;p&gt;ReactNativeを用いればAndroidとiOS両方のアプリの開発が 1つのコードで完了します。Web関連の知識も活かせるので簡単に始めることができます。JavaScriptを使うので割と応用の効く言語が身につきます。&lt;/p&gt;
&lt;p&gt;Webシステムではないので制約も有りますが、サーバを借りる必要がなく手軽に始めることができます。&lt;/p&gt;
&lt;p&gt;さらに、ReactNative For Webを使えばそのままWebで利用することできます。利用する機会はまだ少ないですがそちらにも期待です。&lt;/p&gt;
&lt;p&gt;今年はReactNativeでアプリを作成しつつ、コミュニティへの貢献等を目標にがんばります。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[2020年の目標]]></title><description><![CDATA[あけましておめでとうございます。2020年になりました。 2020年最初の投稿として1年の目標を書いておきます。 技術に関することに限らず思いついたことは何でも書いて、また1年後に振り返りたいと思います。…]]></description><link>https://honmushi.com/2020/01/06/2020-goal/</link><guid isPermaLink="false">https://honmushi.com/2020/01/06/2020-goal/</guid><pubDate>Mon, 06 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;あけましておめでとうございます。2020年になりました。&lt;br&gt;
2020年最初の投稿として1年の目標を書いておきます。&lt;br&gt;
技術に関することに限らず思いついたことは何でも書いて、また1年後に振り返りたいと思います。&lt;/p&gt;
&lt;p&gt;1年の終わりには全部達成できている状態を目指します。途中経過なんかもチェックしていくつもりです。&lt;/p&gt;
&lt;h2&gt;業務&lt;/h2&gt;
&lt;h3&gt;プロジェクトを始める&lt;/h3&gt;
&lt;p&gt;受託などでプロジェクトを始めようと思います。Lancersなど利用して受注するところから初める。&lt;/p&gt;
&lt;h3&gt;メンターを始める&lt;/h3&gt;
&lt;p&gt;MENTAを使ってメンター業も初めます。
チーム開発や指導の経験もあるので積極的に取り組みたい。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://menta.work/plan/1500&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://menta.work/plan/1500&lt;/a&gt;&lt;br&gt;
MENTAにてメンタープランを作りました。良ければご利用ください。&lt;/p&gt;
&lt;h3&gt;スマホアプリの作成&lt;/h3&gt;
&lt;p&gt;ただ作るのではなく再利用性など考慮して作るように心がけます。&lt;/p&gt;
&lt;h3&gt;スマホアプリの運用・改善&lt;/h3&gt;
&lt;p&gt;リファクタリング含め改善していきます。デザインの見直しも取り組みたい。&lt;/p&gt;
&lt;h3&gt;スマホアプリの収益の増加&lt;/h3&gt;
&lt;p&gt;なによりも使ってもらって、収益を増やすことが一番の目標。
インストール数の増加、継続的な利用による収益の増加。
上記以外にも要素はたくさんあると思うので身につける。&lt;/p&gt;
&lt;h3&gt;広告などを利用してスマホアプリの宣伝・営業&lt;/h3&gt;
&lt;p&gt;地域のアプリを使ったので良さそうな場所に広告等を出してターゲットユーザーに気づいてもらう。
もっと使ってもらえるように宣伝を行う。現在の100倍位のユーザー数が目標。&lt;/p&gt;
&lt;h2&gt;学習&lt;/h2&gt;
&lt;h3&gt;コンポーネントをパッケージとして整理して再利用&lt;/h3&gt;
&lt;p&gt;いくつかアプリを作ったのでその資産を再利用しやすいように残す。
パッケージとして公開してメンテナンスする。&lt;/p&gt;
&lt;h3&gt;自分らしいデザインパーツを見つける&lt;/h3&gt;
&lt;p&gt;自分らしいデザインのパーツを考えたい。
特徴的でオリジナリティのあるデザインを見つけます。&lt;br&gt;
「〇〇×□□」で表現できるような。&lt;/p&gt;
&lt;h3&gt;Atomic Designの理解と実装&lt;/h3&gt;
&lt;p&gt;本で読んだものが良かったので身につけたい。React・React Nativeに相性がよいので、これを基幹として知識を身に着ける。&lt;/p&gt;
&lt;h3&gt;testの実装&lt;/h3&gt;
&lt;p&gt;上記のAtomic Designでも触れられていたので積極的に取り組む。フロントエンドのテストのノウハウや経験を共有できるようにする。&lt;/p&gt;
&lt;h3&gt;各種技術に関する記事の整理&lt;/h3&gt;
&lt;p&gt;学習者向けにコンテンツを作成。&lt;br&gt;
ReactやReact Nativeに関する知識や情報を整理してコンテンツとして共有する。&lt;/p&gt;
&lt;h3&gt;オライリーのレポートを読む&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.netlify.com/oreilly-jamstack/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.netlify.com/oreilly-jamstack/&lt;/a&gt;&lt;br&gt;
JAMstackに関するレポートらしい、早いうちに読む。&lt;/p&gt;
&lt;h2&gt;コミュニティ&lt;/h2&gt;
&lt;h3&gt;コミュニティの運営、なかまづくり&lt;/h3&gt;
&lt;p&gt;住んでいる地域でコミュニティを立ち上げる。Reactに関するものとかReactNativeに関するものとか。
Firebaseとか。&lt;/p&gt;
&lt;h3&gt;人を巻き込む&lt;/h3&gt;
&lt;p&gt;上記といっしょ。人を巻き込んでいくような取り組みを行いたい。一緒にやる。&lt;/p&gt;
&lt;h3&gt;地域の取り組み&lt;/h3&gt;
&lt;p&gt;地域の役に立つようなサービスを作る。&lt;/p&gt;
&lt;h3&gt;オープンな技術への貢献&lt;/h3&gt;
&lt;p&gt;React Native Communityなどに貢献する&lt;/p&gt;
&lt;h2&gt;食べたいもの&lt;/h2&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;ASAのカレー&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;行きたい所&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;信楽&lt;br&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;初詣でひいたおみくじが大吉だったのでいいことあるはず。がんばります。
今年もよろしくお願いします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Nativeにおけるimageコンポーネントの「resizeMode」の挙動]]></title><description><![CDATA[タイトルのとおりですが、React Nativeのimage関連コンポーネントに設定するstyleプロパティ「resizeMode…]]></description><link>https://honmushi.com/2019/12/24/image-cover-contain/</link><guid isPermaLink="false">https://honmushi.com/2019/12/24/image-cover-contain/</guid><pubDate>Tue, 24 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルのとおりですが、React Nativeのimage関連コンポーネントに設定するstyleプロパティ「resizeMode」の挙動を確認してまとめました。&lt;/p&gt;
&lt;p&gt;画像を設定したときのリサイズのルールを設定できます。画像のアスペクト比を維持したり要素にピッタリ合うようにリサイズしたりなど、さまざまな設定ができるはずです。ややこしくなりがちなので勉強も兼ねて一度整理してみました。&lt;/p&gt;
&lt;p&gt;基本的な挙動はcssのbackground-imageに一致することが期待されます。実際の挙動が本当にそうなるのか試してみました。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;同じ属性値であれば基本的にWebと同じと考えて良さそうです。
以下に値ごとの挙動をまとめています。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v36.0.0/react-native/image/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v36.0.0/react-native/image/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;以下の値が定義されています。コンポーネントによっては利用できないものもあるので注意しましょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cover&lt;/li&gt;
&lt;li&gt;contain&lt;/li&gt;
&lt;li&gt;stretch&lt;/li&gt;
&lt;li&gt;repeat&lt;/li&gt;
&lt;li&gt;center&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;cover&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;cover: Scale the image uniformly (maintain the image&amp;#39;s aspect ratio) so that both dimensions (width and height) of the image will be equal to or larger than the corresponding dimension of the view (minus padding).&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;画像の縦横比は維持する。&lt;/li&gt;
&lt;li&gt;画像のサイズがコンポーネントのサイズ以上になるよう画像を広げる。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;かならずコンポーネント全体が画像に埋められるはず。画像が小さければ縦も横も埋められるようにリサイズされる。&lt;br&gt;
リサイズするときは縦横比を維持する。&lt;/p&gt;
&lt;h2&gt;contain&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;contain: Scale the image uniformly (maintain the image&amp;#39;s aspect ratio) so that both dimensions (width and height) of the image will be equal to or less than the corresponding dimension of the view (minus padding).&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;画像の縦横比は維持する。&lt;/li&gt;
&lt;li&gt;画像のサイズがコンポーネントのサイズに収まるよう画像を縮める。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;かならず画像がコンポネント内に収まるはず。画像の全体が見えているはず。画像が大きければ縦も横も収まるようにリサイズ。&lt;br&gt;
リサイズするときは縦横比を維持する。&lt;/p&gt;
&lt;h2&gt;stretch&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;stretch: Scale width and height independently, This may change the aspect ratio of the src.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;画像の縦横比は維持しない&lt;/li&gt;
&lt;li&gt;縦と横をそれぞれコンポーネントに合わせて、画像をリサイズする&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;画像がコンポーネントの大きさと一致するようにリサイズされ全体を埋めているはず。画像の全体が見えているが、変形しているかも。&lt;br&gt;
リサイズのときに縦横比を維持しない。&lt;/p&gt;
&lt;h2&gt;repeat&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;repeat: Repeat the image to cover the frame of the view. The image will keep its size and aspect ratio, unless it is larger than the view, in which case it will be scaled down uniformly so that it is contained in the view.&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;br&gt;
画像の縦横比は維持される。&lt;/p&gt;
&lt;p&gt;繰り返す回数に上限がある？リサイズのルールにコンポーネントのサイズによる拡大比率のルールがあるようでしたが、あまりわかりませんでした。
repeatを使う機会は少ないですのでそれほど問題ないですが、わかったら追記しておきます。&lt;/p&gt;
&lt;h2&gt;center&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;center: Center the image in the view along both dimensions. If the image is larger than the view, scale it down uniformly so that it is contained in the view.[&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;基本的にはCSSと同じですので、経験があればすぐに把握できます。 repeatは挙動に差異があったように思います。&lt;/p&gt;
&lt;p&gt;今回まとめて改めて勉強になりました。特に憶える必要はなく、調べて実装できたら十分だと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React NativeでKeyboardAvoidingViewが意図通りに動かない場合]]></title><description><![CDATA[React Nativeの「KeyboardAvoidingView」についてです。 スマホではテキストフォームにフォーカスしたときに、画面の下半分くらいはキーボードに隠れてしまいます。
「KeyboardAvoidingView…]]></description><link>https://honmushi.com/2019/12/24/keybord-avoiding/</link><guid isPermaLink="false">https://honmushi.com/2019/12/24/keybord-avoiding/</guid><pubDate>Tue, 24 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeの「KeyboardAvoidingView」についてです。&lt;/p&gt;
&lt;p&gt;スマホではテキストフォームにフォーカスしたときに、画面の下半分くらいはキーボードに隠れてしまいます。
「KeyboardAvoidingView」はキーボードを避けるように上に移動してくれるコンポーネントです。&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;ドキュメント&lt;/li&gt;
&lt;li&gt;「keyboardVerticalOffset」を指定する&lt;/li&gt;
&lt;li&gt;padding&lt;/li&gt;
&lt;li&gt;height &lt;/li&gt;
&lt;li&gt;position &lt;/li&gt;
&lt;li&gt;動作を指定するパラメータ「behavior」&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v36.0.0/react-native/keyboardavoidingview/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v36.0.0/react-native/keyboardavoidingview/&lt;/a&gt;&lt;br&gt;
Expoのドキュメントです。プロパティの定義などが書かれています。情報は少ないです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@nickyang0501/keyboardavoidingview-not-working-properly-c413c0a200d4&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://medium.com/@nickyang0501/keyboardavoidingview-not-working-properly-c413c0a200d4&lt;/a&gt;&lt;br&gt;
以前見つけた記事です。正常に動作しない場合の解決すべきパターンが書かれていました。&lt;br&gt;
記事によるとjustifyContentなどの設定も関連しています。
全体を囲うべきなのか必要な部分だけ囲うべきなのかなど、ベストな使い方が知りたい。&lt;/p&gt;
&lt;h2&gt;動作を指定するパラメータ 「behavior」&lt;/h2&gt;
&lt;p&gt;ドキュメントにあるように挙動を制御するパラメータです。
とりあえず、iOSの場合はデフォルトだと上手く動かないです。いずれかを指定するようにしましょう。
個人的にはAndroidでも指定したほうが意図通りに動く印象です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;position   &lt;/li&gt;
&lt;li&gt;padding  &lt;/li&gt;
&lt;li&gt;height  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それぞれの設定の挙動を以下に記載します。&lt;/p&gt;
&lt;h2&gt;position&lt;/h2&gt;
&lt;p&gt;要素の中を&lt;code&gt;position:&apos;abusolute&apos;&lt;/code&gt;の状態にして、中の要素が上に動きます。
移動するときはキーボードの上端と&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;の中の要素の下端が一致するように移動し、中の要素が上にはみ出します。中の要素のみが移動して&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;自体は移動していないようです。&lt;/p&gt;
&lt;p&gt;要素からはみ出るので兄弟要素に重なることが可能です。
親要素からはみ出すことはできないようです。たとえば、親要素がぴったり同じ大きさだと動きませんでした。Viewなどで囲むだけで動かなくなりました。&lt;/p&gt;
&lt;p&gt;ルートやモーダルなど、大きな領域の直下に設置すれば動作するイメージです。はみ出すことができるので&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;自体の高さは小さくても大丈夫です。&lt;/p&gt;
&lt;p&gt;positionを指定すると、&lt;code&gt;position:&apos;absolute&apos;,overflow:&apos;visible&apos;,&lt;/code&gt;が指定された状態になります。中の要素の位置が上にそろったり、高さがなくなったりしますので注意しましょう。&lt;/p&gt;
&lt;p&gt;縦に大きいコンポーネントにすると、画面上部のフォームにフォーカスした際に画面の上にはみ出す場合があります。&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;の全体がキーボードに隠れないように動くので、上端の方は気をつけましょう。&lt;/p&gt;
&lt;h2&gt;padding&lt;/h2&gt;
&lt;p&gt;兄弟要素をキーボードの高さ分小さくします。その分&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;が上に移動します。&lt;/p&gt;
&lt;p&gt;親要素の中で動き、Flexによりサイズが決まっている兄弟要素を小さします。
親要素をはみ出すことはできませんし、最大でも兄弟要素のサイズ分しか移動しません。&lt;/p&gt;
&lt;p&gt;小さくできる兄弟要素がない、兄弟要素がFlexで定義されていない場合は動かないです。
兄弟要素の子要素の大きさ指定は無視されて小さくなります。&lt;/p&gt;
&lt;p&gt;同じ親に含まれない要素には影響しません。「おじ」や「いとこ」にあたるような要素は、Flexにしていても大きさが変わりません。&lt;/p&gt;
&lt;p&gt;兄弟要素が持っている領域分しか移動ができないので、上にはみ出すことは無いと思います。
縦に大きいコンポーネントにすると、画面下部のフォームではキーボードを避けきれず隠れてしまう場合があります。&lt;/p&gt;
&lt;h2&gt;height&lt;/h2&gt;
&lt;p&gt;実際のアプリでは使ったことがありません。記事を書くために使ってみた所、以下の挙動をしました。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;の自体の高さが小さくなる挙動でした。キーボードの上端と要素の下端が一致するようにheightが小さくなるようです。&lt;/p&gt;
&lt;p&gt;しかし、&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;の高さが小さくなっても下の要素が上に詰めるだけです。KeyboardAvoidingViewの子要素のフォームが上に動くわけではなかったので、結局キーボードに隠れてしまいました。&lt;/p&gt;
&lt;h2&gt;「keyboardVerticalOffset」を指定する&lt;/h2&gt;
&lt;p&gt;キーボードを避けるときの移動距離のオフセット値を指定できるパラメータです。
ヘッダーの実装方法やOSにより必要になる場合・不要な場合があります。&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;  keyboardVerticalOffset={Platform.select({
    ios: Header.HEIGHT, // iOS
    android:Header.HEIGHT + StatusBar.currentHeight, // android 
  })}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例えば、react-navigationでヘッダーを配置している場合は上記の様に指定することで正常に動作しました。&lt;/p&gt;
&lt;h2&gt;画面内に2つ設置した場合&lt;/h2&gt;
&lt;p&gt;両方が独立して動くため基本的に上手くいきません。&lt;/p&gt;
&lt;p&gt;キーボードの上端とそれぞれの&lt;code&gt;KeyboardAvoidingView&lt;/code&gt;の下端が一致するように移動するため、2つのコンポーネントがキーボードの真上で重なってしまう場合があります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;スマホアプリを作る上で、入力フォームを実装することは多いです。
入力している内容がキーボードに隠れて見えなくなるのはUI的にイマイチですのでしっかり対応したいです。&lt;/p&gt;
&lt;p&gt;そのためにもKeyboardAvoidingViewのコンポーネントは必須です。動作にクセがあるなあと個人的に思っているので、使いこなせるようになっておきたいです。&lt;/p&gt;
&lt;p&gt;またはこれに変わるモジュールを探しておくのもいいと思います。オススメあったら教えてほしいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ExpoのSDK36がリリースされたのでアップデート（SDK35→SDK36）]]></title><description><![CDATA[少し前ですが、ExpoのSDK36がリリースされました。
早速アップデートを試してみましたので、その時のメモを記録しておきます。 とりあえずさわってみたところだと、React Nativeのバージョンアップによって利用可能になった、「Fast Refresh…]]></description><link>https://honmushi.com/2019/12/23/expo-sdk36/</link><guid isPermaLink="false">https://honmushi.com/2019/12/23/expo-sdk36/</guid><pubDate>Mon, 23 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;少し前ですが、ExpoのSDK36がリリースされました。
早速アップデートを試してみましたので、その時のメモを記録しておきます。&lt;/p&gt;
&lt;p&gt;とりあえずさわってみたところだと、React Nativeのバージョンアップによって利用可能になった、「Fast Refresh」という機能がとても便利でした。開発時のデバッグがとても快適になります。&lt;/p&gt;
&lt;h2&gt;参考リンク&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.expo.io/expo-sdk-36-is-now-available-b91897b437fe&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo SDK 36 is now available&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SDK36の変更点&lt;/li&gt;
&lt;li&gt;SDK35からSDK36へのアップデート手順&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SDK36の変更点&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.expo.io/expo-sdk-36-is-now-available-b91897b437fe&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo SDK 36 is now available&lt;/a&gt; に記載されているものです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;React Native 0.61に対応&lt;br&gt;
「React 16.9」「Fast Refresh」など対応されました。この「Fast Refresh」すごいです。
&lt;a href=&quot;https://facebook.github.io/react-native/docs/fast-refresh&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/react-native/docs/fast-refresh&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;デバッグしながらソースコードを変えた際、瞬時に表示が更新されました。&lt;br&gt;
以前は「Building JavaScript bundle」となり再ビルドが始まって、ビルド中は画面真っ白。ビルド完了して始めて画面に反映されていましたが、それすらなくなりました。とても快適です。更新時には画面の下の方に「Refrashing…」と表示されるだけです。&lt;/p&gt;
&lt;p&gt;上記の関連で、以前はビルドが始まる際にデバッグしているアプリが再起動していましたが、再起動も不要になりました。同じ画面の同じ状態のままでプログラムの変更が反映されるようになりました。&lt;/p&gt;
&lt;p&gt;Reactコンポーネント内でのプログラム修正であれば、再ビルド無しでコンポーネントを更新して再レンダリングするようです。stateの保持など出来ない・初期化されることもある様子ですが、構文エラーなどが発生したときの対処なども行うらしく便利に働きそうです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;react-native-appearanceを利用して、AndroidとWebでもダークモード&lt;br&gt;
iOS以外でもダークモードの挙動を定義して利用できます。
まだ試していませんが、時間見つけてダークモードへの対応もやっていきます。&lt;/li&gt;
&lt;li&gt;Permissions APIの再構築&lt;br&gt;
権限を取得する際に「expo-permissions」を利用していましたが、それぞれのモジュールで取得できるように再構築されました。 カメラとかGPSとかを利用する際に、該当のモジュールのみで実装が可能になります。
特に変更しなくても問題ないですが、スッキリ書けるようになりますね。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SDK35からSDK36へのアップデート手順&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;最新バージョンのexpo-cliを取得&lt;br&gt;
npmでアップデートしましょう。&lt;/li&gt;
&lt;li&gt;expo upgradeコマンドを実行&lt;/li&gt;
&lt;li&gt;一部モジュールの置き換え&lt;br&gt;
「CameraRoll」と「ART」のモジュールについてはそれぞれ「expo-media-library」と「react-native-svg」に置き換える&lt;/li&gt;
&lt;li&gt;Expoのクライアントアプリも更新&lt;br&gt;
Google PlayとApp Storeで各OSで更新。&lt;/li&gt;
&lt;li&gt;ビルド済みのスタンドアローンアプリについて&lt;br&gt;
公開済みのものについて、OTAアップデートではSDKのアップデートはできません。SDK36でビルドしたものをストアで配布する必要があります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;私は上記手順で問題なくアップデートできました。
もしも、上記で上手くいかない場合は&lt;code&gt;/node_module/&lt;/code&gt;ディレクトリを一度削除して、&lt;code&gt;npm install&lt;/code&gt;を行うなどやってみると良いです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;SDK36を動かすことが出来ました。すでに公開済みのアプリも順番に対応していこうと思います。
Fast Refreshはとても便利でした。これからの構築がとても快適になりそうです。  &lt;/p&gt;
&lt;p&gt;現時点でアップデートしてみて、特に躓くところはなかったのでドンドンアップデートしていこうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[fcitxにおけるQuickphraseの使い方]]></title><description><![CDATA[「Quickphrase」の使い方の紹介です。 Quickphraseとはいわゆるユーザー辞書です。fcitxを利用している環境であれば利用できると思います。 私はPCのOSにUbuntuを使っています。
ユーザー辞書を登録しようとしたときに、Mozc…]]></description><link>https://honmushi.com/2019/12/23/quickphrase/</link><guid isPermaLink="false">https://honmushi.com/2019/12/23/quickphrase/</guid><pubDate>Mon, 23 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「Quickphrase」の使い方の紹介です。&lt;br&gt;
Quickphraseとはいわゆるユーザー辞書です。fcitxを利用している環境であれば利用できると思います。&lt;/p&gt;
&lt;p&gt;私はPCのOSにUbuntuを使っています。
ユーザー辞書を登録しようとしたときに、Mozcのものを利用しようとしたのですがなぜか利用できませんでした。
別の方法を探した所、Quickphraseなるものを見つけましたのでそちらで解決できました。そのときのメモです。&lt;/p&gt;
&lt;p&gt;Quickphraseはfcitxという入力メソッド管理フレームワークのモジュールの一つで、簡単にユーザー辞書を登録して利用できます。&lt;/p&gt;
&lt;p&gt;fcitxの関係上、Unix系列のOSユーザーしか利用することはないと思います。Mozcや他の入力メソッドにもユーザー辞書が用意されていると思います。ですので、これが最適なのかはちょっとわかりません。
ただ、Quickphraseでも十分便利に使えましたので、必要なときの選択肢として利用できればいいと思います。
以下その利用方法です。&lt;/p&gt;
&lt;h2&gt;参考リンク&lt;/h2&gt;
&lt;p&gt;今回参考にしたリンクです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://fcitx-im.org/wiki/QuickPhrase&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://fcitx-im.org/wiki/QuickPhrase&lt;/a&gt;&lt;br&gt;
fcitxに関するWikiです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://wiki.archlinux.jp/index.php/Fcitx&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://wiki.archlinux.jp/index.php/Fcitx&lt;/a&gt;&lt;br&gt;
こちらもWikiです。詳しく書いてあるので参考になりました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gihyo.jp/admin/serial/01/ubuntu-recipe/0297?page=2&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://gihyo.jp/admin/serial/01/ubuntu-recipe/0297?page=2&lt;/a&gt;&lt;br&gt;
技評の連載記事です。基本的な使い方など紹介されていました。他のプラグインの情報もあったので目を通しておくと発見があります。&lt;/p&gt;
&lt;h2&gt;設定方法&lt;/h2&gt;
&lt;p&gt;入力メソッドの設定を開き、「アドオン」のタブを開きます。「clipbord」「Spell」などのアドオンが複数出てきますので、その中から「Quickphrase」を選択します。  &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;「Quickphrase」が無い場合はインストールが必要になると思います。私の場合はデフォルトでインストールされていました。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;下部にある「設定」ボタンをおして、「Quickphrase」の設定を開きます。デフォルトの設定では動作しなかったので、以下のように少し設定を変更しました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「クイックフレーズのトリガーとなるキー」を「なし」&lt;br&gt;
デフォルトは「セミコロン」になっていたのですが、動作しない様子なのでここを「なし」に変更します。&lt;/li&gt;
&lt;li&gt;「クイックフレーズのトリガーとなる別のキー」を「Ctrl+:」
こちらの別のキーで動作するように設定します。調べたところ「Ctrl+:」がオススメらしいのでこちらにしました。&lt;/li&gt;
&lt;li&gt;「修飾キーを選択」を「なし」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これでCtrl+:でQuickphraseを呼び出せるようになりました。次は辞書のキーワードを登録します。&lt;/p&gt;
&lt;h2&gt;辞書登録&lt;/h2&gt;
&lt;p&gt;先程のキーを設定した画面の下に「クイックフレーズリスト」という項目があります。それを選択するとエディタが立ち上がります。&lt;/p&gt;
&lt;p&gt;「QuickPhrase.md」というファイルの編集が始まるので、登録したい単語と呼び出すためのキーワードを登録します。
単語とキーワードは半角スペースで区切り、改行で次の定義になります。サンプルは以下のようになります。&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;oh おはようございます
mm sample@gmail.com
ar ありがとうございます&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ここに辞書の定義を行うことでフレーズを追加できます。&lt;/p&gt;
&lt;h2&gt;利用方法&lt;/h2&gt;
&lt;p&gt;先程設定したとおり「Ctrl+:」で立ち上がります。入力窓が出るので、そこに文字を打つと候補が表示されます。候補に対応する数字を押せば決定できます。不要であればエスケープかenterを押すことで回避できます。&lt;/p&gt;
&lt;p&gt;デフォルトでは顔文字がたくさん入っている？様子です。&lt;/p&gt;
&lt;h2&gt;Clipboardという機能をみつけた&lt;/h2&gt;
&lt;p&gt;今回の設定の中で、Quickphrase以外のアドオンとして「Clipboard」というアドオンも有効になっていることに気づきました。&lt;/p&gt;
&lt;p&gt;「Ctrl+;」で起動します。クリップボードの履歴から選択して貼付けすることができます。普通に便利なのでおすすめです。&lt;/p&gt;
&lt;p&gt;私はクリップボード拡張としてCopyQを利用していましたが、こちらで十分かもしれません。他にも便利なものは有りますが、簡単に利用できるものとして覚えておくと良いと思います。&lt;/p&gt;
&lt;p&gt;Quickphraseと同様に設定の変更ができます。記憶しておく候補数を変更できるので、デフォルトの「5」よりも増やしておくといいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Quickphraseはいつでも変換されるのではなく、先に起動してキーワードを入力し候補から選択する必要があるので、少し手数がかかる印象です。
ただ個人的にはこちらの動作のほうが好きですので気に入っています。&lt;/p&gt;
&lt;p&gt;候補の設定もかんたんですし、素直に必要な機能は満たしているので十分かなと思います。
もしも使う機会があれば、参考にあればと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[react-native-mapsを使って地図を表示]]></title><description><![CDATA[今回は「React Native Maps」を使ってみます。アプリ内に地図を表示することができます。
expoを使っていれば簡単に試せます。 スタンドアローンアプリで地図を表示するためにはGoogleMapsAPI…]]></description><link>https://honmushi.com/2019/12/13/expo-map/</link><guid isPermaLink="false">https://honmushi.com/2019/12/13/expo-map/</guid><pubDate>Fri, 13 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回は「React Native Maps」を使ってみます。アプリ内に地図を表示することができます。
expoを使っていれば簡単に試せます。&lt;/p&gt;
&lt;p&gt;スタンドアローンアプリで地図を表示するためにはGoogleMapsAPIにてプロジェクトを作成して、キーを設定しておく必要があります。&lt;br&gt;
その場合はアカウント情報などの登録が必要になりますね。無料で使える範囲があるので、十分だとは思いますが注意しましょう。&lt;/p&gt;
&lt;h2&gt;こんな感じ&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 185px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d47fa2499dc025273e44762a8c22d3e7/1d79a/map01.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.02702702702703%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAjCAYAAACU9ioYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGZklEQVRIx5VWW28a1xaeNMlzT35LpDxEOoryD/Ka/9G3ox7pPOVUfmiSSjlJpfShOml8AWJjbGPAgC9c3NrmYoZhGGAGZhjuGGyMuX9dewYwTVtVHenTXrP22t+stdfaazbn9XoRiUTg8/mwvLyMjY0N7OzsYHNzEx8+fMD79+/x7t07vH37FhaLBVar1Ziz2WxYXV2F0+k09ExeWVkB1+l00Ov1cH19jXa7jX6/j8FgYIwMM/3l5aUxtlotQ2br2PsVjVdXV4aOgZtMJjg6OjIM2BMMBhEIhgyPXS4XdL2Ev/MQ4RiNRhOD4RCj8RilUgllXYUi51DIK+jQ142H7BiYA4vPmF6ZajwF51OB81oX43HPNCDE68BRFTisAPs64C1M4CPsaUBEq0DSfkEkdwxBPUO02sax3oJUl6G3MuAs4gT+/DXR0D72aWF+iP+f9+BKaPALBazyXayIwEoaWE10ERQD2E/6cSjuwp89hV8RcSwf4iDtwKniJUIy/CRN0B8MwVeJTABs6RF20m24pBas4hBWiXSpAUJCDMH0IbYTZ9gXt3GYC2Ev5cIeb4eb38JecsskXCV4lCF2ciOskcwI1iRTb80QGcGebCCY3IdbCGNT0uDk9+E8d8PDO+A636SINkkmwoNCx1jIYJJNYElPYCVYiHSdb2EvkYJFGGE7V8FmSsZWWoGXvPIkHOTdNo5EN44zPvhS2+DipTDsmT4sczJzZGAf2M5UcaDE4MwWcVSI4kxLIKGFiMCPQNqNsLyLVDEEufwzxMIhuJ2MRosqv/HOMvVu5qVTruEsf4CYvIdE3otz+QinlJhE9gBZLYiL+ilahG7jDJwt3YdNGs2J2P5Zp2RstIgD2h8JZ2KQMhtHQDoDL3txUkjCle9SZqOI5yXkqjX02wolhS2aJmIGk3hiJksqQckfwyF1Yaek7SlX+FnREVNlRDICUrlT8IU0YiWq5SsVnHW6+IfTLv4XusSbYJvCnxKKLNwbaM0SGu0m8rUGNrKAIwdsZfuIyiqaKo+aHkejJqN7wTychraaGmOFwEYjKaRnpcOrRKalcFVT0SrL0Epl6OUySs0rqPUmehc6SuUi5KKKdjVJHs4zewsb6ZbJu5Nij8Ko4LKu4/qihOtm0SDt0oh+A6pepDOfRklVkFYKiBXrZmFb0+Pb7BIY4UciTJdbQJcOda+NTqOMi7JGYVVo8+tErFITySOp19G/rECv1uHITsB9kvpGaLPas05llhAv1V6+fIBq9QyqcoJqkUdJO6fuJFCpZCArIaSyEfBaA3baW3bmOa/gxwafM8JmtbjoqVHYaQl7mTh20zIVcpCaww7CigsneQ+ikh8aneecXqWozFLjPLF1eOOfsJ3ksSFcwJIkj6cwZUoUP8IKNY31RAb+yAZszjWse63I5X9BMpeCTeiSzcCwJ0Indk8cOJFdyFYC8MkVsykshD+TbWIPwdwB/Od2BDNuyLUwnLkGfkrd2nNHogunsh9SJUzVHoGdCtg4hguhz46gXbxBLBNGLE/HrnRIxe2BO09HVx5gPTsybLiQsots9RhaPYiwmph7Z5u2rU+ZaTsjvT0zQrnKQy0EqGTCiBbj2EpWEJOisEar1DtH4CJFHyKFXRzIAm3seN5tPpwPqHMP8GOshzXRLCXWtVPlJupqjLIdwGGBkpG8gVusYS3RMcqPy9bD9J8I0YLePFTmETuK3x93DLDTw7xdTg7hESroVGOQdIFCNLfCKDuaN0JOqgEqjYbZrpiH0+YwDzl7e4LWBMp6lGouUYNV6M1bnHVhr7ltau0Wctu6MDnrOJ/DsKEPrE29mSVrsTFzM3dvy+MvMD2afzZvdJtV0WxVLMMrqYnZddh/RvwT0Nwy2S3/gR3nUUZwyWMT1EA99GN30+2DyS5lfDu3gF15hP2SeRHY/cyO6/XZxWhAF6Y+hvS7b59GcBEIGTLT9afzM9z0zBvGpsOBnz5+NOSbm958nvvdbafZxVC/+MtLkSAIiMfjv78svXr1CjO8fPkSX/1nCf9aekOyqXv9+jX++803ePHihSEz3bffvjTw9df/xtLSEum/m3Nw9GART5/8E198pnv48CGePn2Kz22fP3+OO3fu/FZ/9+5d3Lt3zwCTHz9+jC+//IdheP/+fcPo0aNHePLkiSEzHbNl88+ePcODBw8M/Wz9r4GISac/LKy5AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;地図を表示したサンプル&quot;
        title=&quot;地図を表示したサンプル&quot;
        src=&quot;/static/d47fa2499dc025273e44762a8c22d3e7/1d79a/map01.png&quot;
        srcset=&quot;/static/d47fa2499dc025273e44762a8c22d3e7/12f09/map01.png 148w,
/static/d47fa2499dc025273e44762a8c22d3e7/1d79a/map01.png 185w&quot;
        sizes=&quot;(max-width: 185px) 100vw, 185px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;br&gt;
よく見るgoogle mapを簡単に表示することができます。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v36.0.0/sdk/map-view/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v36.0.0/sdk/map-view/&lt;/a&gt;&lt;br&gt;
Expoのドキュメントへのリンクです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/react-native-community/react-native-maps&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/react-native-community/react-native-maps&lt;/a&gt;&lt;br&gt;
本体ドキュメントへのリンクです。さまざまな使い方や詳細なパラメータの情報が載っています。&lt;/p&gt;
&lt;h2&gt;インストール&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;expo install react-native-maps&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;expo 利用している場合はexpoコマンドでインストールすると、SDKに対応したバージョンが選択されます。 利用していない場合はnpmでインストールしましょう。&lt;/p&gt;
&lt;h2&gt;テスト用の実装&lt;/h2&gt;
&lt;p&gt;とりあえずExpoクライアントでテストする場合は以下で表示できます。&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 MapView from &amp;#39;react-native-maps&amp;#39;;

~~~
class MapComponent extends React.Component {
  render() {
    return (
      &amp;lt;MapView style={styles.mapStyle} /&amp;gt;
    );
  }
}

const styles = StyleSheet.create({
  mapStyle: {
    width: &amp;#39;100%&amp;#39;,
    height:  &amp;#39;100%&amp;#39;,
  },
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;MapViewにスタイルを定義しないとエラーになりました。スタイルで幅や高さのサイズを指定すれば解決します。&lt;/p&gt;
&lt;p&gt;実際にスタンドアローンで配信するアプリで利用する場合は、APIキーを設定する必要が有ります。この記事の最後の方に記載しています。&lt;/p&gt;
&lt;h2&gt;応用&lt;/h2&gt;
&lt;h3&gt;場所を指定&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;    return (
      &amp;lt;MapView
        style={styles.mapStyle}
        initialRegion={{
          latitude: 36.28825,
          longitude: 136.7324,
          latitudeDelta: 1.0,
          longitudeDelta: 1.0,
        }}
      /&amp;gt;
    )&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;緯度経度で指定した場所を中心に地図を表示できます。latitude・longitudeは緯度・経度を指定します。&lt;/p&gt;
&lt;p&gt;latitudeDelta,longitudeDeltaは縮尺を指定します。地図に表示する範囲を指定できます。&lt;br&gt;
大きな値にするとヒキになって広い範囲が表示され、小さな値にするとヨリになって狭い範囲を細かく表示する地図になります。&lt;/p&gt;
&lt;h3&gt;ピンを立てる&lt;/h3&gt;
&lt;p&gt;Mapviewコンポーネントに子要素としてMarkerコンポーネントを渡すことで、ピンを立てることが出来ます。
複数立てることもできます。&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 MapView, { Marker } from &amp;#39;react-native-maps&amp;#39;;

class HomeScreen extends React.Component {
  constructor(props) {
    super(props);
    this.marker = {
      title: &amp;#39;公園&amp;#39;,
      discription: &amp;#39;遊び場&amp;#39;,
      latlng: {
        latitude: 36.28825,
        longitude: 136.7324,
      },
    };
  }

  render() {
    return (
      &amp;lt;SafeAreaView style={styles.container}&amp;gt;
        &amp;lt;MapView
          style={styles.mapStyle}
          initialRegion={{
            latitude: 36.28825,
            longitude: 136.7324,
            latitudeDelta: 0.5,
            longitudeDelta: 0.5,
          }}
        &amp;gt;
          &amp;lt;Marker
            coordinate={this.marker.latlng}
            title={this.marker.title}
            description={this.marker.description}
          /&amp;gt;
        &amp;lt;/MapView&amp;gt;
      &amp;lt;/SafeAreaView&amp;gt;
    );
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 185px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7ff499bf93de2afc1a99209047d3581b/1d79a/map02.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.02702702702703%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAjCAYAAACU9ioYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHaElEQVRIx5VWyY4U2RUNxLB28yUsbSwkNqwsL/mTXlleWFZLyO0NjRq1mGTJCwSYwXRDU0UVVFZlVVblGEPOkRk5R0RGxpxzZlF1fCIwqGUWVqd09V69eHXfueeee98TdnZ2IMsyEokEnj9/jsePH+Pp06fY3NzExsYGHj58iHv37sUWfY/s1atXePnyZbw32vPixQs8e/YMjx49gjCfzxHZ7L/jer3G8fHxR/twjMVyiel0itlsFo+TySQeF4vF5/VfmnB6eopUKhX/AZxiL5lEkra9vY2NNxswDB2/5keHJ/B9H+vjNegbvufCth0MBn3o+oCIiPpDdNYJjRNuOjmNhhNEYE74R/T9+ATxN2Gre4oEQQz9GcZ2B2opjWKxiFY7C/24g7ShItVqohUWMPCr6AQZaGERYWBjOupi5nXx40ENSqMHbdaE8FAFSjo5sepw+hJEUUEpv4Fmcw9FtwTRz6ERVCC6MrJ2AQUvD3ckI7B0TIc1LBjRdKjCsA5Qc3YhpFUNUzoadYrwzDomTgtzT8cy0NB3VdSIqugViaoCzZPR8lRMXR92t4BAb2Di+RgEPfR9BY79GoKhlVDI5dEop9Cu5SHlD1GuJKAW87BcEw2/hoJPVKGK0Kmi52uYOwFSOz/icPc92gMN3XENwSiHgZuDMLb7CEwVS7dGlHnkWrvY7x+i1C2hQTRqhNAvwuLYcxSUeUDg9DDRJfhWF1qgYhK26DCLriNCWHoDrMIJVk4F9rAIMVAghxKksUj+ClAYZskvoeopaLgKFF8it6TISkAPZHhhG/NRBSM7hcCrQ0gdZJA+2IeuleFaVchOAWW3iLpXguwVyKGCaiChwrW206CY29hrbeFJ5m+YBjks3CZMKwODe5d+C4LZ06C1U+g7bTR5cn+U51iCHdTh+nXofgXzoImRU4NJBMfjLjpmClXtFdZjDUvnCKPRPkICCHig4DGMml9mqBLyXhYdbnDIi+lVsKAj063SosyqsMnfMuzSSQnHjsTvfcycA0y9DCZEOnU1CBU6zJGXvC8yLJHEZuDT4dRvYEbz3DqGbgWhTWfM8NTT4Oo5uMYOkaVgM9RF0MXcbWAddiCoTgKKm6IVYNoSSi4lxCSMiW7u8VSvgdOFjvWsx6oghwwrpERm9j4m0cEhD6Gz8agWfxfkIItakETTO2CmkmizErrkLyCySHeW2cC77S1s/PQTZDWHUUCH5iEmwyQ8S8XCb1I+FXjDCouCWc4Mskh2s0hxrPky9IjkgLx5tRjlmNVTq0vIlLPI9LJQzBJGpgK7v0mHNdgGNTqQMaYzzypDSEpsU/k9JGsHqI7LzDZDdxjScoBx5i20P/4B7p++RvUvXyMdkGcKeur1EOqbTIhIQauwuOYOy3SqQqi7CZTGJTQp6CZTbzosOYrZnrQxbYno//2vaPzwLWo3v8E+ee4ZIhtChwh3EQ5TdNKEQ2f+qBo7FdruDhNSQ9EuU/VNeE6a9o5EK0RSQcdmrVMieT2DlM6QrQIccja1cgjocBn2MLXZGEwZwz5rWXP32EFKLCOKlmXkj0R45G9KkU+ZcZ2iLQ7eMdQtNIwtVIxt9MwtHFtvsLa3EVpH+HcyB7WZx7F7CEF39zEnsij987AB3Sqxa3fouIKV30bLykMcZSCzgurWLqThEbLdFMPdxdJKYkHOFSZM76apWy1qDmmsxj2KU8PYY0dhODPqz2YmfYq5akko0GlsbKwZhl4eZDBjww3tKrzBERO0j9nwEL5OhCsvR65aNJVqj9DJ7D4dWOw8CsOX2KWzZhoSucubORT0iGOVLS+NiV3koQ12qQoCOxK3AmHBbuIxQ4ugxdIid55ILVZRogPRFlFkQkSGWeS8YGYhMfS8kUWzt09KeLc4kWxEjAxKJ9LhmpXi8j6JOsqaaD2izDGDMh0cDVJ429zE6+pLvK2/xnPlXzhiWO87e1CNHD6wB3ikyBpIcYlGlSVomsii1ijSHO+REsNtQ7VlOpT4z0fY7SSw236HbfUNtrQE8paIKrk0LQUT9sGRUWZtVynw6sdK6RgUJnU4Y8lFIl3ypJ5TJkpmd5iH4sgMV8YhQyzbFfQNlhmT5ZlFGNRly+jEzSGIEkS0wvtKFv9MZIkuwVPL6AzYbfR8HLZIviSGnmWYB33q1cjDZ7Jc2shQYPWzaLOWPVtlg2CDpdSEssFmQL1NeKtVmLVSwKqhlTkvjphphiYavI+HvOijEiPftslKYRJXMwsukdm87Gds/3HHXq6ix9Eay+UKa74mQom32VE6ni+XCyxXS6zWq4/GebQW/X7++TWePHkczxdcW/N7ZMIXrx1nig99+/8+iqrVavwM/OKx9Ontd/8+x7t38edvv8c33//j85vw/oP7uHXrFm5+d5N77sdrd7nvzp07uHHjBm7fvo0HDx583i/wh1/a73/3W/zv2qVLl3DlypUv1q9fv/7FmnDu3Dl8srNnz+Lq1av4zVdf4cyZM7hw4UK86fLly7h27Vo8P3/+fLw3+h45vHjxYrz+ycd/ANy0d3syHTDrAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;ピンを2つ定義した地図の表示&quot;
        title=&quot;ピンを2つ定義した地図の表示&quot;
        src=&quot;/static/7ff499bf93de2afc1a99209047d3581b/1d79a/map02.png&quot;
        srcset=&quot;/static/7ff499bf93de2afc1a99209047d3581b/12f09/map02.png 148w,
/static/7ff499bf93de2afc1a99209047d3581b/1d79a/map02.png 185w&quot;
        sizes=&quot;(max-width: 185px) 100vw, 185px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;その他応用&lt;/h3&gt;
&lt;p&gt;ピンの代わりにコンポーネントを渡すこともでき、任意の画像をピンの代わりに表示することもできます。&lt;br&gt;
他にも&lt;code&gt;draggable&lt;/code&gt;属性を設定すればドラッグして動かせるピンを作れます。stateで緯度経度を処理することで、地図の任意の位置を選択できるUIも作れますね。&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;  &amp;lt;MapView
    style={styles.mapStyle}
    initialRegion={{
      latitude: 36.28825,
      longitude: 136.7324,
      latitudeDelta: 0.5,
      longitudeDelta: 0.5,
    }}
  &amp;gt;
    &amp;lt;Marker coordinate={this.marker2.latlng} &amp;gt;
      &amp;lt;View&amp;gt;&amp;lt;Text&amp;gt;駐車場&amp;lt;/Text&amp;gt;&amp;lt;/View&amp;gt;
    &amp;lt;/Marker&amp;gt;
    &amp;lt;Marker draggable
      coordinate={this.state.latlng}
      onDragEnd={(e) =&amp;gt; this.setState({ x: e.nativeEvent.coordinate })}
    /&amp;gt;
  &amp;lt;/MapView&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Androidで利用する場合のGoogle APIの設定&lt;/h2&gt;
&lt;p&gt;iOSで利用する場合は特に設定なしで利用できます。
一方、Androidで利用する場合はGoogle APIでプロジェクトを用意して、APIキーを発行・設定する必要が有ります。&lt;/p&gt;
&lt;p&gt;以下、expoドキュメントに載っている手順の解説です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build your app, take note of your Android package name (eg: ca.brentvatne.growlerprowler)&lt;br&gt;
アプリをビルドしておきます。必要なのはandroidで使用するpackage nameになります。app.jsonに記載するやつです。&lt;/li&gt;
&lt;li&gt;Open your browser to the Google API Manager and create a project.&lt;br&gt;
ブラウザで「Google API manager」を開き、プロジェクトを作成します。&lt;/li&gt;
&lt;li&gt;Once it’s created, go to the project and enable the Google Maps SDK for Android&lt;br&gt;
API ライブラリにて「Maps SDK for Android」を探し有効化します。&lt;/li&gt;
&lt;li&gt;Go back to &lt;a href=&quot;https://console.developers.google.com/apis/credentials&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://console.developers.google.com/apis/credentials&lt;/a&gt; and click Create Credentials, then API Key.&lt;br&gt;
APIからダッシュボードに戻り、プロジェクトの認証情報の画面にアクセスします。そこで上部にある「認証情報を作成」をクリックします。&lt;/li&gt;
&lt;li&gt;In the modal that popped up, click RESTRICT KEY.&lt;br&gt;
モーダルが出るのでAPIキーを選択します。&lt;/li&gt;
&lt;li&gt;Choose the Android apps radio button under Key restriction.&lt;br&gt;
不正に利用されたりするのを防ぐために制限を設けます。 Android appsを選択してアンドロイドのアプリでのみ利用できるようにします。&lt;/li&gt;
&lt;li&gt;Click the + Add package name and fingerprint button.&lt;br&gt;
パッケージネームとfingerprintの情報も制限に追加しておくことで、更に強固な制限をかけます。
該当するフォームに入力していきます。&lt;/li&gt;
&lt;li&gt;Add your android.package from app.json (eg: ca.brentvatne.growlerprowler) to the Package name field.&lt;br&gt;
1でおこなったapp.jsonに記載するpackage nameを入力します。&lt;/li&gt;
&lt;li&gt;Run expo fetch:android:hashes.&lt;br&gt;
CUIで &lt;code&gt;expo fetch:android:hashes&lt;/code&gt;を実行します。
keytoolが無いなどエラーが出る場合はJavaSDKをインストールするなどの対応が必要になります。Fingerprintなどの情報を取得できますのでメモしておきましょう。&lt;/li&gt;
&lt;li&gt;Copy Google Certificate Fingerprint from the output from step 9 and insert it in the “SHA-1 certificate fingerprint” field.&lt;br&gt;
上記コマンドで出力された、Fingerprintをコピーして貼り付けます。&lt;br&gt;
google play側でアプリの署名証明書を管理している場合は、9の行程ではなくgoogle playで取得したものを設定します。
すなわち、自分で証明書を用意したなら9のコマンドで得たもの、自分で用意せずにgoogle playに任せた場合は、google play→リリース管理→アプリの署名にて署名証明書のSHA-1 証明書のフィンガープリントをコピーして貼り付けます。&lt;/li&gt;
&lt;li&gt;Copy the API key (the first text input on the page) into app.json under the android.config.googleMaps.apiKey field. See an example diff.&lt;br&gt;
APIキーをコピーしてアプリのapp.jsonに貼り付けます。&lt;/li&gt;
&lt;li&gt;Press Save and then rebuild the app like in step 1.&lt;br&gt;
アプリをビルドすればAPIキーが反映されて利用できるようになっているはずです。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単でした！目的の施設の位置情報などが公開されていれば、その場所周辺の地図などを表示できるので使いみちは結構あると思います。GPSと連携すれば現在地の地図も表示できます。&lt;/p&gt;
&lt;p&gt;他にも地図に重ねてコンポーネントや図形を表示したりということもできるので、応用的な使い道は広がりそうです。操作時のイベントも複数定義されているので、それを使って操作・選択の内容を取得したり処理することも可能です。&lt;/p&gt;
&lt;p&gt;便利な機能や使い道、躓くポイント等を見つけたらまた記事にします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoでアプリに「adaptive icon」を設定する]]></title><description><![CDATA[Expoを利用しているReact Nativeアプリでadaptive iconを設定します。 今まではアイコンは通常のpng画像を使っていたのですが、この機会にadaptive iconに変えてみようと思います。 Expo…]]></description><link>https://honmushi.com/2019/12/12/adaptive-icon/</link><guid isPermaLink="false">https://honmushi.com/2019/12/12/adaptive-icon/</guid><pubDate>Thu, 12 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Expoを利用しているReact Nativeアプリでadaptive iconを設定します。&lt;/p&gt;
&lt;p&gt;今まではアイコンは通常のpng画像を使っていたのですが、この機会にadaptive iconに変えてみようと思います。&lt;/p&gt;
&lt;p&gt;Expoを利用している場合の設定方法と、画像の用意について記載しています。参考になればと思います。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Android Developers アダプティブアイコン&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v36.0.0/workflow/configuration/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo ドキュメント&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;adaptive iconとは&lt;/h2&gt;
&lt;p&gt;背景画像と、それに重ねる全面画像を分けて用意してアイコンの規格です。
こうすることで角丸にしたり円にしたり、ボヨヨンって揺れたりの表現を行うことができ、端末ごとに最適化された表示を行うことができます。&lt;/p&gt;
&lt;h2&gt;画像を用意&lt;/h2&gt;
&lt;p&gt;adaptive iconの仕様は以下のドキュメントに記載されています。&lt;br&gt;
&lt;a href=&quot;https://medium.com/google-design/designing-adaptive-icons-515af294c783&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://medium.com/google-design/designing-adaptive-icons-515af294c783&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;sketchのサンプルファイルも用意されているので、SketchやFigmaでインポートして改修していくのがおすすめです。&lt;/p&gt;
&lt;h3&gt;foregroundImage&lt;/h3&gt;
&lt;p&gt;前面に表示する画像。アイコンなどを背景透明で設定する。
サイズは108dp×108dp、expoでは1024x1024のpngの仕様を進められています。
マスクされる領域として各辺から1/6は空けておく必要があります。&lt;/p&gt;
&lt;h3&gt;backgroundImage&lt;/h3&gt;
&lt;p&gt;背景の画像。サイズは108dp×108dp、Expoでは1024x1024のpngの仕様を進められています。
未設定でも可能で、未設定の場合は以下のbackgroundColorが適用されます&lt;/p&gt;
&lt;h3&gt;backgroundColor&lt;/h3&gt;
&lt;p&gt;上記のbackgroundImageが設定されていない場合はこちらが利用されます。単一の色背景になります。
未設定の場合はデフォルトで&lt;code&gt;#ffffff&lt;/code&gt;になります。&lt;/p&gt;
&lt;h2&gt;app.jsonに記載&lt;/h2&gt;
&lt;p&gt;画像をアプリに設置して、app.jsonでパスを指定します。
通常のiconの指定も残していますが、adaptive iconの指定が優先される様子です。&lt;/p&gt;
&lt;p&gt;背景を単一の色にする場合は以下です。
背景にも画像を使いたい場合は上記の&lt;code&gt;backgroundImage&lt;/code&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;    &amp;quot;android&amp;quot;: {
      &amp;quot;adaptiveIcon&amp;quot;: {
        &amp;quot;foregroundImage&amp;quot;: &amp;quot;./assets/images/foreground.png&amp;quot;,
        &amp;quot;backgroundColor&amp;quot;: &amp;quot;#7B5544&amp;quot;
      },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;上記でadaptive iconの実装ができました。&lt;br&gt;
ランチャーアプリなどを使ってみれば前面画像のバウンドなどの動作があると思いますが、私は使っていないのでわかりませんでした。&lt;/p&gt;
&lt;p&gt;何か追加で設定すべきことや、注意すべきことがあれば追記します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「Gitが、おもしろいほどわかる基本の使い方 33」を読んだ]]></title><description><![CDATA[Gitの使い方の本です。Gitを使ったことがない、これから使うといった初心者向けの本になっています。デザイナーなどエンジニア以外にもわかりやすくなっています。 Git…]]></description><link>https://honmushi.com/2019/12/11/git-kihon-33/</link><guid isPermaLink="false">https://honmushi.com/2019/12/11/git-kihon-33/</guid><pubDate>Wed, 11 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Gitの使い方の本です。Gitを使ったことがない、これから使うといった初心者向けの本になっています。デザイナーなどエンジニア以外にもわかりやすくなっています。&lt;br&gt;
Gitの基本的な知識や使い方は学ぶことができます。かなりわかりやすくまとめられていますので、とても良い本でした。&lt;/p&gt;
&lt;p&gt;全般通して、BitbucketとGUIツールのSoucetreeを使った手順の紹介です。CUIやGithubはほとんど出てきませんので、その部分には注意が必要です。&lt;/p&gt;
&lt;p&gt;応用的にGitFlowなどの情報も書かれており、少しですが発展的な内容も知ることができます。&lt;/p&gt;
&lt;p&gt;コンフリクトが起きた際の解決のコツとかはないです。かわりに衝突をなるべく防ぐために意識すべきこと・取り組むべきことが載っており役に立ちそうでした。&lt;/p&gt;
&lt;p&gt;以下印象に残った点をメモしています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4844368680/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4844368680&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=364af09748cc1da924bd12db5cd2b4cc&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4844368680&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4844368680&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&gt;1.バージョン管理の基本&lt;/h2&gt;
&lt;p&gt;各種ツールのインストールやサービスのサインアップを行います。
この本ではBitbucketとSourcetreeを利用しますので、その準備ですね。&lt;/p&gt;
&lt;p&gt;デモ用のリモートリポジトリが用意されていますので、そちらを利用していきます。
ちなみに、MacとWindowsの手順が紹介されてます。&lt;/p&gt;
&lt;p&gt;基本的に本の中ではずっとSourcetreeを使います。ですのでCUIが苦手とか使ったことがない人もとっつきやすくなっています。&lt;/p&gt;
&lt;h2&gt;2.Gitの基本的な使い方&lt;/h2&gt;
&lt;p&gt;変更のコミットやプッシュについての理解です。&lt;/p&gt;
&lt;p&gt;リモート・ローカルリポジトリやチェックアウト、プッシュ・プル、フェッチ・マージなど難しい概念が出てきますが、わかりやすく整理されているので簡単に理解できます。&lt;/p&gt;
&lt;p&gt;SourcetreeやBitbucketの画面のスクリーンショット付きで解説されていますので、真似して進めることができ親切でした。&lt;/p&gt;
&lt;h2&gt;3.複数メンバーでの運用&lt;/h2&gt;
&lt;p&gt;実際に複数のメンバーで利用するときを想定して管理を行います。&lt;br&gt;
ブランチやスタッシュなど複雑な概念が出てきますので、ゆっくり時間をかけて理解しましょう。&lt;/p&gt;
&lt;p&gt;コンフリクトについてはどうやって対処するかということより、なるべく発生しないようにするコツが紹介されています。取り組みや意識的に行うことが必要ですので、しっかり覚えておくようにしましょう。&lt;/p&gt;
&lt;p&gt;実際の開発現場ではブランチを多数作ることが有ります。ブランチが多くなるとマージの際にめちゃくちゃ衝突したりします。できる限り複雑にならないように案件を相談したり調整することもとても大事です。&lt;br&gt;
バージョン管理についても、運用面や開発面・テストの面など多面的に捉えられるように意識しましょう。&lt;/p&gt;
&lt;h2&gt;4.Gitを使った実践開発&lt;/h2&gt;
&lt;p&gt;コミットの打ち消しや、巻き戻し、GitFlowの説明などです。この辺は応用的な内容になっており、必要に応じてネットで調べながらやると良いです。&lt;/p&gt;
&lt;p&gt;複数人での開発は実際にやってみるととてつもなく大変なことがわかるので、経験あるのみと言った考えも有ります。
ある程度の事前知識を身につけておくことでパニックにならずに済むと思いますので、落ち着いて対処しましょう。&lt;/p&gt;
&lt;p&gt;間違えたコミットも、やろうと思えば元に戻せますし、コンフリクトも詳しい人ならしっかり解決できます。焦らずにゆっくり進め、わからない難しい部分は関係する人・詳しい人に相談するように心がけましょう。チームでの開発で大切なことだと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Gitを用いたソース管理について、とてもわかり易い説明になっていました。
これから使う予定のある人や、イマイチ理解できていない人はこれを読んでみると間違いないです。&lt;/p&gt;
&lt;p&gt;CUIでの使い方やコマンドなどは紹介されていないので、そちらの知識も合わせて読んでおくのがおすすめです。Sourcetreeをつかうのであれば問題ありませんが、なんだかんだCUIで操作することが多くなります。早いうちにCUIの操作やコマンドにも慣れておくと良いです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[react-native-bundle-visualizerを使ってみる]]></title><description><![CDATA[タイトルのとおりですが、「react-native-bundle-visualizer」というパッケージを使ってみました。 以下の記事にて知ったパッケージです。利用しているパッケージのサイズを視覚的にわかりやすく表示できるものです。 Getting Started…]]></description><link>https://honmushi.com/2019/12/11/react-native-bundle-visualizer/</link><guid isPermaLink="false">https://honmushi.com/2019/12/11/react-native-bundle-visualizer/</guid><pubDate>Wed, 11 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルのとおりですが、「react-native-bundle-visualizer」というパッケージを使ってみました。&lt;/p&gt;
&lt;p&gt;以下の記事にて知ったパッケージです。利用しているパッケージのサイズを視覚的にわかりやすく表示できるものです。&lt;br&gt;
&lt;a href=&quot;https://blog.usejournal.com/getting-started-optimizing-a-react-native-app-1d7507c2d849&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Getting Started Optimizing a React Native App&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;アプリのサイズが大きいなとか思った時、動作が重たいなと思ったときに原因を調べる手段の一つとして覚えておくと良いです。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;githubは以下&lt;br&gt;
&lt;a href=&quot;https://github.com/IjzerenHein/react-native-bundle-visualizer&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/IjzerenHein/react-native-bundle-visualizer&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;npmにてインストールします。アプリのビルドには不要で開発時のみ利用できればいいので、&lt;code&gt;--save-dev&lt;/code&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-dev react-native-bundle-visualizer&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;インストールするとpackage.jsonの「devDependencies」に追加されるはずです。&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;  &amp;quot;devDependencies&amp;quot;: {
    &amp;quot;react-native-bundle-visualizer&amp;quot;: &amp;quot;^2.1.1&amp;quot;
  },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実行&lt;/h2&gt;
&lt;p&gt;コマンドのエイリアス等は作られません。binから実行する必要があります。&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;./node_modules/.bin/react-native-bundle-visualizer&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;CUIでの実行&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;$ ./node_modules/.bin/rea
ct-native-bundle-visualizer
Generating bundle...
Loading dependency graph, done.
info Writing bundle output to:, /tmp/react-native-bundle-visualizer/UnknownApp/ios.bundle
info Writing sourcemap output to:, /tmp/react-native-bundle-visualizer/UnknownApp/ios.bundle.map
info Done writing bundle output
info Done writing sourcemap output
Bundle is 1.5 MB in size
Unable to map 328156/1576431 bytes (20.82%)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ブラウザが立ち上がり、以下のような図が表示されます。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/4f5f44e98ea43c10d6447ef8bb65736a/5aae9/sample01.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.67567567567568%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABNElEQVQoz4WSi26DMAxF8/8/Wa2FhEAoLaUqz3o5TtOhatqQrvxIfH1jY5qmkRCCYJ1zUte1tG0rVVXJ4XCQoigiTmKt1TNAzvtK71BHzDmxGYZBlmWRcRzlfr+rnedZc33fRwIvXdfpGbhcLkoAEbXX61V98sA8Hg/57du2TQm7eAnSrBoLCUqppcntdpNpmjQ2PBcFWhwtCCGNwTmrY4DIe68+hJmcHOTUkkOpyRcJODyfz28l5AC5PFt8muKXZSk+5pOItAd9MrMA+KhjwNiyLF4Kndrj8UuJEYFfnE5Kal1aiM4wz0S7vp6PCrrlYsisLXXbP39EIiEG3IPL7J9AB/y9JZ+L0vzCe477EajS+DLDNv/6ns+n/HeHr9UlOjGse11X/e8y9jH+5/knaKgjivgGTef5kuDV3wgAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;bundle visualizerの出力&quot;
        title=&quot;bundle visualizerの出力&quot;
        src=&quot;/static/4f5f44e98ea43c10d6447ef8bb65736a/fcda8/sample01.png&quot;
        srcset=&quot;/static/4f5f44e98ea43c10d6447ef8bb65736a/12f09/sample01.png 148w,
/static/4f5f44e98ea43c10d6447ef8bb65736a/e4a3f/sample01.png 295w,
/static/4f5f44e98ea43c10d6447ef8bb65736a/fcda8/sample01.png 590w,
/static/4f5f44e98ea43c10d6447ef8bb65736a/5aae9/sample01.png 610w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;各パッケージをクリックすると更にその詳細を見ることもできます。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 538px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/24f8c8d9722464ce9daaeac67ab34bb2/9516f/sample02.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.21621621621621%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAABp0lEQVQ4y32T6ZKCQAyEef/3W6hyFxAUlEsOOUTU7HzRsfyhUhUGkplOp5NxiqKQb1aW5dd4nudq9t+J4/jpfLXdbidpmkqSJLpm2d2fZZkeXK9D8TxPVquVuK5r/te6z+F1Op2k74/GehmGQUZjHE6S7QMsk+PxqDFrnGnbxiROFWxrEkNOAZdlUbB+6GUcR2ODrvM8y+12k/P5bEB6maZJjRj+2YDmJtnhcJD9fq9VKeCnh0PX6/VjHJaXy0X32UQKiOOdAYa9i/EAALumaaSua0nSRBxEtxs+sfz0oGVZFgqK5lVV3hmiFaJjaAn9tm1N5lq6rtNvDhGHjfUxUnmeqX55cZ8Ahy4hZhiGEsWRdpaxwE/XSJiaUoizz3V/xA982Wxi7W5sznie++y2lgwADKqqUl0mxF4uqh9sEV+7aipBK9jxjd9WRflMgw42QHagoQ8rVkp4HXR8Nv56CdiHEXP4YA7J7Pu+BEGg5bVGJ1jAputa2W43EprbQQyQurkPNbclCAP5+/vVmEO5tpsAQBuz3aUBytSIjkZRFD1YJs+VCm3p/7wP3Dg3rptXAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;bundle visualizerの出力 拡大したもの&quot;
        title=&quot;bundle visualizerの出力 拡大したもの&quot;
        src=&quot;/static/24f8c8d9722464ce9daaeac67ab34bb2/9516f/sample02.png&quot;
        srcset=&quot;/static/24f8c8d9722464ce9daaeac67ab34bb2/12f09/sample02.png 148w,
/static/24f8c8d9722464ce9daaeac67ab34bb2/e4a3f/sample02.png 295w,
/static/24f8c8d9722464ce9daaeac67ab34bb2/9516f/sample02.png 538w&quot;
        sizes=&quot;(max-width: 538px) 100vw, 538px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;サイズと割合も表示されており、視覚的に容量を圧迫しているものや無駄なものを探せるので、パフォーマンス改善の際に役に立つと思います。&lt;/p&gt;
&lt;h3&gt;オプション&lt;/h3&gt;
&lt;p&gt;コマンドにはいくつかのオプションが設定されています。例えばAndroidで利用されるbundleを確かめたい場合は&lt;code&gt;--platform android&lt;/code&gt;をつけます。デフォルトはiOSの場合のものが表示されています。&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;./node_modules/.bin/react-native-bundle-visualizer --platform android&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単にパッケージの容量を調査でき、視覚的にもわかりやすく表示してくれるのでとても良かったです。&lt;/p&gt;
&lt;p&gt;以前expoのバージョンを上げた際に容量が大きくなったので試してみたのですが、結局expoに含まれるassetが原因の様子で、あまり解決はできませんでした。
ただ、他で余計なパッケージや容量が大きいパッケージを見つけることができたので、とても助かりました。&lt;/p&gt;
&lt;p&gt;パフォーマンスの改善なので急ぎ行う必要はありませんし、開発には直接役立つものではありません。
必要になった際に利用できるように存在を覚えておくと良いと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoを使ったGPS情報取得の実装]]></title><description><![CDATA[React Nativeで作成するスマホアプリで、端末のGPSを利用して位置情報を取得する処理の実装の紹介です。
案の定ですが、Expoを利用することで簡単に実装できます。 以下GPSを利用した位置情報を取得する処理の実装です。 expo-location…]]></description><link>https://honmushi.com/2019/12/10/expo-location/</link><guid isPermaLink="false">https://honmushi.com/2019/12/10/expo-location/</guid><pubDate>Tue, 10 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeで作成するスマホアプリで、端末のGPSを利用して位置情報を取得する処理の実装の紹介です。
案の定ですが、Expoを利用することで簡単に実装できます。&lt;/p&gt;
&lt;p&gt;以下GPSを利用した位置情報を取得する処理の実装です。&lt;/p&gt;
&lt;h2&gt;expo-location&lt;/h2&gt;
&lt;p&gt;ドキュメントは以下&lt;br&gt;
&lt;a href=&quot;https://docs.expo.io/versions/v36.0.0/sdk/location/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v36.0.0/sdk/location/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;こんな感じ&lt;/h2&gt;
&lt;p&gt;Androidのみですが、GPSを使って現在地の緯度・経度を取得するアプリを作成しました。&lt;/p&gt;
&lt;p&gt;シンプルなアプリで、端末のGPSで取得した緯度・経度の情報にメモをつけて保存できます。他のアプリへの共有や、JSON形式にして出力などの機能もつけています。データが多くなると管理が大変なのでタグで検索を行える機能もあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.gpsmemo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;google play GPSメモ&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;npm にてインストールを行います。ExpoのSDKを利用しているのであれば「expo」コマンドでインストールすることでSDKのバージョンに適したものがインストールされます。&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;expo install expo-location&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;app.jsonに設定を追加&lt;/h2&gt;
&lt;p&gt;パーミッションを設定する必要が有ります。以下を&lt;code&gt;app.json&lt;/code&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;    &amp;quot;android&amp;quot;: { 
      &amp;quot;permissions&amp;quot;: [
        &amp;quot;ACCESS_COARSE_LOCATION&amp;quot;,
        &amp;quot;ACCESS_FINE_LOCATION&amp;quot;
      ], 
    }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;以下実装の例です。権限の取得や位置情報のリクエストは非同期で行われます。&lt;/p&gt;
&lt;p&gt;今回はasyncとawaitを使って同期的に処理を進めています。&lt;br&gt;
&lt;code&gt;getCurrentPositionAsync&lt;/code&gt;は本来promiseを返すので、awaitを使い処理が完了してからデータを受け取るようにしています。もちろん&lt;code&gt;.then()&lt;/code&gt;での実装も可能です。&lt;br&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;import * as Location from &amp;#39;expo-location&amp;#39;;
import * as Permissions from &amp;#39;expo-permissions&amp;#39;;

~~~
  componentDidMount() {
    this._getLocationAsync();
  }

  _getLocationAsync = async () =&amp;gt; {
    let { status } = await Permissions.askAsync(Permissions.LOCATION);
    if (status !== &amp;#39;granted&amp;#39;) {
      this.setState({
        submitMessage: &amp;#39;位置情報の取得が許可されませんでした。&amp;#39;,
      });
    }else if(status === &amp;#39;granted&amp;#39;){
      let location = await Location.getCurrentPositionAsync({});

      this.longitude = &amp;#39;経度:&amp;#39; + JSON.stringify(location.coords.longitude);
      this.latitude = &amp;#39;緯度:&amp;#39; + JSON.stringify(location.coords.latitude);
    }
  };
~~~&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;オプションで精度の調整や、キャッシュする時間の設定を渡すことができます。&lt;/p&gt;
&lt;p&gt;ちなみにですが、expoのSDKのバージョン36なら「expo-permission」ではなく「expo-location」で権限を取得できるようになるらしいです。&lt;code&gt;Loacation.getPermissionsAsync()&lt;/code&gt;で済むようです。試す機会があれば、実験して追記しておきます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;今回も簡単に実装できました。expoのパッケージはとても使いやすく、ドキュメントも親切なので助かります。簡単に端末の機能を利用できるように開発が進んでいますので、初心者でもそれなりに機能のあるアプリが作れると思います。&lt;/p&gt;
&lt;p&gt;SDKのバージョン36も公開されて、開発の活発さもうかがい知ることができます。&lt;/p&gt;
&lt;p&gt;今回紹介したexpo-locationでは、他にも位置情報の追跡や移動の検出なんかも可能なようです。こちらも面白そうなので、使う機会を積極的に探して実装してみたいです。流行りのウォーキングアプリとか地図アプリで実装が必要になりますかね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoを使ったバーコードスキャナーの実装]]></title><description><![CDATA[React Nativeで作成するスマホアプリで、端末のカメラを利用してバーコードスキャナーを実装する方法の紹介です。
こちらもExpoを利用することで簡単に実装できます。 以下、QRコードスキャナーの実装の紹介です。 expo-barcode-scanner…]]></description><link>https://honmushi.com/2019/12/09/expo-barcode/</link><guid isPermaLink="false">https://honmushi.com/2019/12/09/expo-barcode/</guid><pubDate>Mon, 09 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeで作成するスマホアプリで、端末のカメラを利用してバーコードスキャナーを実装する方法の紹介です。
こちらもExpoを利用することで簡単に実装できます。&lt;/p&gt;
&lt;p&gt;以下、QRコードスキャナーの実装の紹介です。&lt;/p&gt;
&lt;h2&gt;expo-barcode-scanner&lt;/h2&gt;
&lt;p&gt;ドキュメントは以下です。&lt;br&gt;
&lt;a href=&quot;https://docs.expo.io/versions/v35.0.0/sdk/bar-code-scanner/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v35.0.0/sdk/bar-code-scanner/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;こんな感じ&lt;/h2&gt;
&lt;p&gt;以前QRコードスキャナーアプリを作成しました。&lt;br&gt;
iOSは純正のカメラアプリでバーコードを読み取れますが、Androidでは何らかのアプリを使う必要があります。
気に入ったものがなかったので自分で作成しました。Android使っている人は自分でお気に入りのスキャナーを自作してみるのがおすすめです。&lt;/p&gt;
&lt;p&gt;QRコードを読み取り、URLへアクセスできます。取得したURLはローカルに保存してあり、履歴として確認・再アクセスができます。&lt;br&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.qrreader&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;google play QRコードリーダー&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;npm にてインストールを行います。ExpoのSDKを利用しているのであれば「expo」コマンドでインストールすることでSDKのバージョンに適したものがインストールされます。&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;expo install expo-barcode-scanner&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;app.jsonに設定を追加&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;    &amp;quot;android&amp;quot;: { 
      &amp;quot;permissions&amp;quot;: [&amp;quot;CAMERA&amp;quot;], 
    },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;画面のマウント時にパーミッションを尋ねます。
承認が得られるまでは待機中のメッセージを表示しておき、承認が得られたタイミングでstateを更新してカメラコンポーネントを描写します。&lt;/p&gt;
&lt;h3&gt;パーミッションを取得&lt;/h3&gt;
&lt;p&gt;componentDidMountにてパーミッションを取得します。&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 * as Permissions from &amp;#39;expo-permissions&amp;#39;;
import Constants from &amp;#39;expo-constants&amp;#39;;

~~~

  componentDidMount() {
    this.getPermissionsAsync();
  }

  getPermissionsAsync = async () =&amp;gt; {
    const { status } = await Permissions.askAsync(Permissions.CAMERA);
    this.setState({ hasCameraPermission: status === &amp;#39;granted&amp;#39; });
  };

~~~&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;カメラコンポーネント&lt;/h3&gt;
&lt;p&gt;権限を得られるまではメッセージを表示しておき、権限が承認されたらバーコードスキャナーコンポーネントを描写します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;onBarCodeScanned&lt;/code&gt;にてバーコード読み取り結果を受け取った際の処理を定義します。stateの更新を行い画面にデータを表示したり、ブラウザを立ち上げてアクセスしたりすることになります。&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 { BarCodeScanner } from &amp;#39;expo-barcode-scanner&amp;#39;;

~~~ 

  handleBarCodeScanned = ({ type, data }) =&amp;gt; {
    this.setState({ scanned: true, scanUrl: data });
  };

  _scanComponent = () =&amp;gt; {
    if (this.state.hasCameraPermission === true) {
      return (
        &amp;lt;BarCodeScanner
          onBarCodeScanned={this.state.scanned ? undefined : this.handleBarCodeScanned}
          style={styles.scanView}
        /&amp;gt;
      );
    }else{
      return (
        &amp;lt;View style={styles.scanContainer}&amp;gt;
          &amp;lt;Text style={styles.messageText}&amp;gt;カメラにアクセスしています&amp;lt;/Text&amp;gt;
        &amp;lt;/View&amp;gt;
      );
    }
  };

~~~&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;こちらも簡単に実装ができました。QRコード以外でも、商品のバーコードを読み取ることもできます。
たとえば本なら商品コードを読み取って、amazonやGoogleのAPIにリクエストすることで書籍の情報を取得できます。&lt;/p&gt;
&lt;p&gt;パーミッションの承認がいるので少しややこしいですが、それ以外は特に難しいことはありません。
簡単に実装できるのでおすすめです。&lt;/p&gt;
&lt;p&gt;ほかにもExpoにはたくさんのパッケージが用意されていますので、便利なものを紹介していきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Nativeでtextコンポーネントの最後の行が見切れてしまう現象]]></title><description><![CDATA[以前作ったアプリにて、一部の端末で「テキストの最後の行が見切れていて読めません」という不具合の報告をもらいました。 その際の状況と、解決方法を以下に記載しておきます。すでにSDK…]]></description><link>https://honmushi.com/2019/12/09/expo-j-lineheight/</link><guid isPermaLink="false">https://honmushi.com/2019/12/09/expo-j-lineheight/</guid><pubDate>Mon, 09 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前作ったアプリにて、一部の端末で「テキストの最後の行が見切れていて読めません」という不具合の報告をもらいました。&lt;/p&gt;
&lt;p&gt;その際の状況と、解決方法を以下に記載しておきます。すでにSDK側などで修正されているかもしれませんが、同じ現象に出会った人の参考になればと。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;ReactNativeのテキストコンポーネントの不具合？の様子。日本語フォントの際にlineHeightの設定が正しくない端末があるらしく、最後の行が見切れることがある。&lt;/p&gt;
&lt;p&gt;styleで&lt;code&gt;lineHeight&lt;/code&gt;を指定することで解決できた。&lt;/p&gt;
&lt;h2&gt;現象&lt;/h2&gt;
&lt;p&gt;textコンポーネントで最後の行の内容が半分くらい見切れてしまっていました。
私の開発用の端末では発生していなかったので、端末によって発生するものとしないものがある様子です。&lt;/p&gt;
&lt;p&gt;以下の画像のようになっていました。  &lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 468px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c8fb39fdf599cb342bab8aa1f0bd383b/90372/lineheight.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 32.43243243243243%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA2klEQVQY022QzQ6DIBCE+/6P5Ft4aQ9tUv9ARCO2KNVWnbJr9KCSTICBHb7l4pxDGIYIggB934PGPE+YpnGnif29Vp/uGGNwaVsLktYar1eDz8dhGCh4PogKz/z1rGmaJfD7HZCmCZIkgRAZpJQb2TiOG80y5lPSJdATWmvhXAelclj7ZsosS3G7XfF43FEUClH09I/FvKYO1uBTQgrsuhZxHHEQEQoh+DWtCx8W8ZmUAnkuuZvj/1Inv+UP67pGWZb+cu4JCp5pT35VVbxXSrFHIgpjai7ei2r+2ErNe3FXnEoAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;文字の一部が見切れている現象&quot;
        title=&quot;文字の一部が見切れている現象&quot;
        src=&quot;/static/c8fb39fdf599cb342bab8aa1f0bd383b/90372/lineheight.png&quot;
        srcset=&quot;/static/c8fb39fdf599cb342bab8aa1f0bd383b/12f09/lineheight.png 148w,
/static/c8fb39fdf599cb342bab8aa1f0bd383b/e4a3f/lineheight.png 295w,
/static/c8fb39fdf599cb342bab8aa1f0bd383b/90372/lineheight.png 468w&quot;
        sizes=&quot;(max-width: 468px) 100vw, 468px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;参考&lt;/h2&gt;
&lt;p&gt;現象を検索してみた所、以下に同じ内容の報告と解決方法の紹介がありました。&lt;br&gt;
&lt;a href=&quot;https://github.com/facebook/react-native/issues/24465&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/facebook/react-native/issues/24465&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;日本語フォントの場合のデフォルトの&lt;code&gt;lineHeight&lt;/code&gt;の設定が正常でなくなる端末があるらしく、最後の行が見切れてしまうそうです。&lt;/p&gt;
&lt;h2&gt;解決方法&lt;/h2&gt;
&lt;p&gt;textコンポーネントのstyleに&lt;code&gt;lineHeight&lt;/code&gt;を手動で設定することで解決できました。&lt;br&gt;
何らかの固定の値を設定するか、フォントサイズから相対値で大きく設定することで解決できます。&lt;/p&gt;
&lt;p&gt;テキストの表示が変わってしまうのですこしモヤっとしますが、marginBottomをつけても変わりませんでした。仕方なくこの方法で修正しました。要素の高さを固定する方法でも上手くいくと思いますが、高さが可変の要素では難しいです。&lt;/p&gt;
&lt;p&gt;根本的な解決はReactNative側の修正を待つことになりそうです。とりあえずの回避策として、lineHeightでテキストが正しく表示されるようにしておきます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;一部端末でしか発生していませんでしたので、ユーザーのお問合わせで初めて気が付きました。
すべての端末でチェックすることは難しいので、思い当たるところを覚えておいて気をつけて作っていくしかなさそうです。&lt;/p&gt;
&lt;p&gt;端末やOSごとの差異がまだ残っているようですが、どんどん減ってきているのも確かなようです。クロスプラットフォーム開発が快適になるようにますますの発展に期待です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native Web を使ってみる]]></title><description><![CDATA[React NativeではiOSとAndroidの両方のアプリを作れる「クロスプラットフォーム開発」が可能です。
少し前からWebサイトの開発も可能になる「React Native Web…]]></description><link>https://honmushi.com/2019/12/06/react-native-web/</link><guid isPermaLink="false">https://honmushi.com/2019/12/06/react-native-web/</guid><pubDate>Fri, 06 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React NativeではiOSとAndroidの両方のアプリを作れる「クロスプラットフォーム開発」が可能です。
少し前からWebサイトの開発も可能になる「React Native Web」というものも存在しるので、そちらを使ってみた記録です。&lt;/p&gt;
&lt;p&gt;ずばり、同じソースコードでアプリに加えてWebサイトも作れるというものです。画期的ですね。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;簡単にWebも実装できました。もしかするとローカルのテスト時なんかには活用できるかもしれません。&lt;/p&gt;
&lt;p&gt;ただ、「アプリを作って、全く同じモノをWebにも作る」という状況がどんなときに使うのでしょうか。
Webサービスのアプリ化はよくある話ですが、UIが異なることが多いと思うので、別で実装するのがこれまでの一般的なやり方ではないでしょうか。&lt;/p&gt;
&lt;p&gt;確かに、同じソースコードで実装が可能なので、開発・管理・運用はとても楽になると思います。
利用できるとすれば例えば以下でしょうか。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アプリ作ったのでおためし版をWebで公開&lt;/li&gt;
&lt;li&gt;スマホでの利用はアプリで、PCではWebで利用するサービス&lt;/li&gt;
&lt;li&gt;コンポーネントをWeb、アプリで共通化できる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;まだ、プラットフォームによる挙動の差異があるようで、それを吸収する場合分けなどが必要です。
その部分でソースコードが冗長になるかもしれませんが、これからの可能性を感じる機能でした。&lt;/p&gt;
&lt;h2&gt;作ってみたもの&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://react-native-flex-style-creater.netlify.com/#/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React Native flex style creater&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;React NativeのflexスタイルのルールはWebとはすこし異なります。それをブラウザ上で触って確かめることができます。
ReactNativeで作っていますので、アプリでの実際の挙動になっているはず。&lt;br&gt;
styleのソースコードも表示できるので、簡単なものであればここでソースコードを用意できます。&lt;/p&gt;
&lt;p&gt;サイトはNetlifyにて配信しています。&lt;/p&gt;
&lt;p&gt;もちろんこのプログラムをビルドすればスマホアプリにもできます。iOSとAndroid両方のアプリがビルド可能というわけです。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v35.0.0/guides/running-in-the-browser/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v35.0.0/guides/running-in-the-browser/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;expoのドキュメントに手順が書かれています。&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;create-react-native-app&lt;/code&gt;でテンプレートを作成した場合はすぐに利用できます。&lt;br&gt;
&lt;code&gt;expo start --web&lt;/code&gt;コマンドで、webサーバが立ち上がりアクセスするとブラウザ上で動作します。
または&lt;code&gt;expo start&lt;/code&gt;を実行してから、wキーを押すとサーバが立ち上がります。&lt;/p&gt;
&lt;p&gt;そうでなければ必要なものをインストールします。
&lt;code&gt;react-native-web react-dom&lt;/code&gt;あたりが該当します。&lt;/p&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;app.jsonの&lt;code&gt;platforms&lt;/code&gt;にwebを追加&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;    &amp;quot;platforms&amp;quot;: [
      &amp;quot;ios&amp;quot;,
      &amp;quot;android&amp;quot;,
      &amp;quot;web&amp;quot;
    ],&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;プログラムは基本アプリを構築するときと同じです。好きなものを作るも良し、すでに作ったものをwebで動かしてみるも良しです。&lt;br&gt;
いくつかwebでは利用できないパッケージもあるので注意しましょう。admobなどが例としてあげられています。場合分けが必要であれば、react-nativeのPlatformを使うことでwebかどうか判定が可能です。&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 { Platform } from &amp;#39;react-native&amp;#39;;

~~~
    if(Platform.OS === &amp;#39;web&amp;#39;){}
~~~&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;先ほど紹介したアプリ &lt;a href=&quot;https://react-native-flex-style-creater.netlify.com/#/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React Native flex style creater&lt;/a&gt; ではreact-navigationなどを利用しています。&lt;/p&gt;
&lt;h2&gt;感想&lt;/h2&gt;
&lt;p&gt;アプリと全く同じというわけにはいかないようですが、ざっくりとの動作の確認であればweb上でできそうです。&lt;br&gt;
アプリ開発時のローカルチェックなどで端末やエミュレータを使わずに、ブラウザで確認ということもできると思います。最終的なチェックはしっかりと端末で行う必要がありそうです。&lt;/p&gt;
&lt;h3&gt;Netlifyにデプロイするときに躓いたこと&lt;/h3&gt;
&lt;p&gt;Netlifyの設定で以下の設定をしてビルドを行います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build command&lt;br&gt;
expo build:web &lt;/li&gt;
&lt;li&gt;Publish directory&lt;br&gt;
web-build/&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ビルドコマンドが見つからないとうメッセージが出力され、ビルドに失敗しました。&lt;br&gt;
&lt;code&gt;expo-cli&lt;/code&gt;がNetlifyのサーバにないのが原因です。package.jsonに&lt;code&gt;expo-cli&lt;/code&gt;を追加することで解決できました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;先に述べた結論のとおりですが、簡単にWebも実装できました。
ローカルの開発テスト時に活用できるかもしれません。&lt;/p&gt;
&lt;p&gt;確かに、同じソースコードで実装が可能なので、開発・管理・運用はとても楽になると思います。
以下のような構築が必要な場合や、もっと新しい構築フローでは役に立つのではないでしょうか。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アプリ作ったのでおためし版をWebで公開&lt;/li&gt;
&lt;li&gt;スマホでの利用はアプリで、PCではWebで利用するサービス&lt;/li&gt;
&lt;li&gt;コンポーネントをWeb、アプリで共通化できる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;まだ、プラットフォームによる挙動の差異がありますので少し注意を払う必要があります。
これからの可能性を大いに感じられますので発展に期待です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoを利用したアプリのapp.jsonの例]]></title><description><![CDATA[expoとReact Nativeを利用したアプリを作る際の、「app.json…]]></description><link>https://honmushi.com/2019/12/05/expo-app-json/</link><guid isPermaLink="false">https://honmushi.com/2019/12/05/expo-app-json/</guid><pubDate>Thu, 05 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;expoとReact Nativeを利用したアプリを作る際の、「app.json」ファイルの記述例です。&lt;br&gt;
私がアプリ作成の際によく使っている設定内容を、以下に解説をつけて記載しています。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;基本的には全部ドキュメント書かれているのでこれを参考にします。
最初は&lt;code&gt;create-react-native-app&lt;/code&gt;などを使って生成した雛形をそのまま使うのが簡単でおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v35.0.0/workflow/configuration/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v35.0.0/workflow/configuration/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;app.jsonの例&lt;/h2&gt;
&lt;p&gt;私がアプリ構築で実際に設定しているものです。
expoを利用する場合のapp.jsonです。&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;{
  &amp;quot;expo&amp;quot;: {
    &amp;quot;name&amp;quot;: &amp;quot;my-app-name&amp;quot;,
    &amp;quot;slug&amp;quot;: &amp;quot;my-app-slug&amp;quot;,
    &amp;quot;privacy&amp;quot;: &amp;quot;unlisted&amp;quot;,
    &amp;quot;sdkVersion&amp;quot;: &amp;quot;35.0.0&amp;quot;,
    &amp;quot;platforms&amp;quot;: [
      &amp;quot;ios&amp;quot;,
      &amp;quot;android&amp;quot;
    ],
    &amp;quot;version&amp;quot;: &amp;quot;1.3.2&amp;quot;,
    &amp;quot;orientation&amp;quot;: &amp;quot;portrait&amp;quot;,
    &amp;quot;primaryColor&amp;quot;: &amp;quot;#FFE483&amp;quot;,
    &amp;quot;icon&amp;quot;: &amp;quot;./assets/icon.png&amp;quot;,
    &amp;quot;splash&amp;quot;: {
      &amp;quot;image&amp;quot;: &amp;quot;./assets/splash.png&amp;quot;,
      &amp;quot;resizeMode&amp;quot;: &amp;quot;contain&amp;quot;,
      &amp;quot;backgroundColor&amp;quot;: &amp;quot;#FFE483&amp;quot;
    },
    &amp;quot;updates&amp;quot;: {
      &amp;quot;fallbackToCacheTimeout&amp;quot;: 10000
    },
    &amp;quot;ios&amp;quot;: {
      &amp;quot;bundleIdentifier&amp;quot;: &amp;quot;my-app-id&amp;quot;,
      &amp;quot;buildNumber&amp;quot;:&amp;quot;1.3.2&amp;quot;,
      &amp;quot;icon&amp;quot;: &amp;quot;./assets/icon_ios.png&amp;quot;,
      &amp;quot;splash&amp;quot;: {
        &amp;quot;backgroundColor&amp;quot;: &amp;quot;#FFE483&amp;quot;,
        &amp;quot;image&amp;quot;: &amp;quot;./assets/splash.png&amp;quot;
      },
      &amp;quot;config&amp;quot;: {
        &amp;quot;googleMobileAdsAppId&amp;quot;: &amp;quot;abc123&amp;quot;
      }
    },
    &amp;quot;android&amp;quot;: {
      &amp;quot;package&amp;quot;: &amp;quot;my-app-id&amp;quot;,
      &amp;quot;permissions&amp;quot;: [
        &amp;quot;ACCESS_COARSE_LOCATION&amp;quot;,
        &amp;quot;ACCESS_FINE_LOCATION&amp;quot;
      ], 
      &amp;quot;versionCode&amp;quot;: 23,
      &amp;quot;playStoreUrl&amp;quot;: &amp;quot;https://play.google.com/store/apps/details?id=abc123&amp;quot;,
      &amp;quot;config&amp;quot;: {
        &amp;quot;googleMobileAdsAppId&amp;quot;: &amp;quot;abc123&amp;quot;
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;解説&lt;/h2&gt;
&lt;p&gt;いくつか気をつけておくべき設定を紹介します。&lt;/p&gt;
&lt;h3&gt;expo&lt;/h3&gt;
&lt;p&gt;expoを利用する場合はこれを親に付ける必要が有ります。&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;  &amp;quot;expo&amp;quot;: {}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;slug&lt;/h3&gt;
&lt;p&gt;expoのサーバ内で取り扱われるIDのようなものです。 他のアプリとかぶらないようにする必要が有ります。&lt;br&gt;
私は最初にドメインをつけて数字と名前をつなげることで、他の人とかぶらないようにしています。&lt;br&gt;
「ドメイン-001-アプリの名前」みたいな感じです。&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;    &amp;quot;slug&amp;quot;: &amp;quot;my-app-slug&amp;quot;,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;privacy&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;unlisted&lt;/code&gt;にしておくと、expo上で検索しても出てこなくなるようです。厳密に非公開になるわけではありません。URLを知っている人のみがアクセスできればいいのでそうしています。&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;    &amp;quot;privacy&amp;quot;: &amp;quot;unlisted&amp;quot;,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;primaryColor&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;    &amp;quot;primaryColor&amp;quot;: &amp;quot;#FFE483&amp;quot;,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;updates&lt;/h3&gt;
&lt;p&gt;OTAアップデートの設定です。私はアップデートのリクエストのタイムアウトを10秒にしています。
&lt;code&gt;enabled&lt;/code&gt;を追加して&lt;code&gt;false&lt;/code&gt;を指定すると、OTAアップデートを無効化できます。&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;    &amp;quot;updates&amp;quot;: {
      &amp;quot;fallbackToCacheTimeout&amp;quot;: 10000
    },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;googleMobileAdsAppId&lt;/h3&gt;
&lt;p&gt;google AdmobのIDを設定します。AndroidとiOSそれぞれで設定が必要です。
Admobの管理画面で取得して、app.jsonに記載しましょう。&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;      &amp;quot;config&amp;quot;: {
        &amp;quot;googleMobileAdsAppId&amp;quot;: &amp;quot;abc123&amp;quot;
      }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;特に難しいことはありません。&lt;/p&gt;
&lt;p&gt;自分なりの雛形を用意しておいてアプリごとに必要な箇所を変更して設定すれば問題ないと思います。package.jsonや共通のモジュールと一緒に使いまわせるようにしておくと便利です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[アナログな表現の良さがわかる「うっとりあじわいじっくりデザイン」]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/12/05/u-a-j-design/</link><guid isPermaLink="false">https://honmushi.com/2019/12/05/u-a-j-design/</guid><pubDate>Thu, 05 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;『なるほどデザイン』の著者が所属するデザインユニットによるデザイン書です。&lt;br&gt;
表現の技法から、素材・色・配置などデザインに関する知識が書かれており、デザインに対する目の解像度が高くなるといった本です。&lt;/p&gt;
&lt;p&gt;アナログな素材を使った表現や特長など、実際の写真を交えた解説がとてもわかり易く面白い本でした。絵の具やクレヨンを使痛くなるような印象もあり、アナログ素材の良さを感じられます。&lt;/p&gt;
&lt;p&gt;この本を読めば、普段から細かい部分に目がいくようになりますし、デザインのアイデアとしても大きく役に立つと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4844368214/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4844368214&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=3971d0d02a5ad1a30de9359d0cd37f4a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4844368214&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4844368214&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&gt;アナログ表現&lt;/h2&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;p&gt;色やレイアウトなどに触れており、デザイン全般に関する知識が載っています。
他の書籍でも触れられてはいますが、わかりやすい写真や解説が載っており直感的に理解できます。より深く論理的に知りたい場合は巻末にのっている参考書籍を読んで見るのがおすすめです。&lt;/p&gt;
&lt;h2&gt;完成度が下がる原因&lt;/h2&gt;
&lt;p&gt;コラムとして「完成度が下がる原因は？」という内容もありました。
デジタルな表現によって不自然な表現にしてしまう場合があることを挙げられています。光や重なりなどのアナログで自然に起きている状態を、しっかり観察して理解しておくことは完成度を上げるために必要なことなのだと学びました。&lt;/p&gt;
&lt;p&gt;他にも過度な装飾をしてしまうことなども例に挙げられており、たしかにと思うことが詰まっています。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;アナログな技法やテクスチャの紹介の部分が可愛らしく読んでいて楽しい本です。写真も印象的なものが多いので何度も読み返したくなる本です。自分でも絵の具や鉛筆を使って素材を用意してみたいなと感じました。&lt;/p&gt;
&lt;p&gt;アプリのLPやブログのテーマに、アナログな素材を使ってみようかなと思いました。&lt;/p&gt;
&lt;p&gt;掲載されている写真の情報や参考書籍の情報が巻末に載っています。それらも合わせて目を通すとより面白くなりそうでした。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[UIコンポーネントパッケージ「React Native Paper」の紹介]]></title><description><![CDATA[今回はReact NativeのUIコンポーネントパッケージ「React Native Paper」を紹介します。 使いやすく設計されたUIコンポーネントがひとまとまりになっているパッケージです。 expo…]]></description><link>https://honmushi.com/2019/12/03/react-native-paper/</link><guid isPermaLink="false">https://honmushi.com/2019/12/03/react-native-paper/</guid><pubDate>Tue, 03 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回はReact NativeのUIコンポーネントパッケージ「React Native Paper」を紹介します。&lt;br&gt;
使いやすく設計されたUIコンポーネントがひとまとまりになっているパッケージです。&lt;/p&gt;
&lt;p&gt;expoで用意されているパッケージでも問題ないですが、スタイル等が最初から設定されているので好みにあっていれば、スタイルの定義なしでかっこいいデザインにできます。&lt;/p&gt;
&lt;p&gt;さまざまな便利なコンポーネントが用意されていることに加えて、テーマを一括で簡単に設定・変更できるのでおすすめです。&lt;/p&gt;
&lt;p&gt;今回は実際に使ってみてわかった、UIのイメージや使い方のコツなどを紹介します。&lt;/p&gt;
&lt;h2&gt;こんな感じ&lt;/h2&gt;
&lt;p&gt;作ったアプリではほとんど利用しています。&lt;br&gt;
例えば以下のようなコンポーネントが有ります。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 450px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d2a2f5b5f879faadd6b02cf2b7ac7585/fc2a6/sample.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37.16216216216216%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABeElEQVQoz5WOTUsbURSG5+fUn9GFiNJFl0WXgmILDbQVv7Jq7MZiuyldtYui+dCVuPADJYK0XdjYghGxpgnNmGLipJiJmbmZyZ37eGeCIK70wnPfc95z7uU1pJmgnp9Gnc4iy6+xDqaxdP9j7SmH2ecUv7/k58YzjnZiFL6+4NvKCPu6D3epzKI03MDwilMUdsfgNI57MsFRdpRf68N8fjvAl/eP2E4P8iHRy9LHx2wuPmE+/pBPc/2IP5PRG1WeQZnXxDGoL8JFCiyt/5PQSHd7ZxmaGbB13dSene5qK9NVawHqSVQ9FRHWoWd4vp5ftjm3GpTNM0p//2FWalRrF9jad9sBjpC4oqvXCE8hfYm+IqTfQQGGEC6lUpGT38e4roPjtBBaQ6TsgApQtwg9rxNwvvWG/Xe97M33UV2JoaSH4fs++XyeXC7HfY6v/62ujpOdfMDaqx4qC0MEOqlOKAiCIFryPO9OhCGEaNO2ayjbjPDtM51ecQU3U/BZsvbw7QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;react native paperのサンプル画像&quot;
        title=&quot;react native paperのサンプル画像&quot;
        src=&quot;/static/d2a2f5b5f879faadd6b02cf2b7ac7585/fc2a6/sample.png&quot;
        srcset=&quot;/static/d2a2f5b5f879faadd6b02cf2b7ac7585/12f09/sample.png 148w,
/static/d2a2f5b5f879faadd6b02cf2b7ac7585/e4a3f/sample.png 295w,
/static/d2a2f5b5f879faadd6b02cf2b7ac7585/fc2a6/sample.png 450w&quot;
        sizes=&quot;(max-width: 450px) 100vw, 450px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
画面ヘッダー、テキストボックス、ボタンの例です。&lt;/p&gt;
&lt;p&gt;react-native-navigationでもヘッダーを簡単に用意できますが、自分で用意した方が便利だったので、こちらを使っています。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://callstack.github.io/react-native-paper/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://callstack.github.io/react-native-paper/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;npm でインストールします。いつもどおりです。&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 react-native-paper&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;まず、Providerでアプリ全体を囲む必要が有ります。&lt;br&gt;
アプリのルートとなるapp.jsなどに記述することになります。&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;import { Provider as PaperProvider } from &amp;#39;react-native-paper&amp;#39;;
import App from &amp;#39;./src/App&amp;#39;;

export default function Main() {
  return (
    &amp;lt;PaperProvider&amp;gt;
      &amp;lt;App /&amp;gt;
    &amp;lt;/PaperProvider&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ボタン&lt;/h2&gt;
&lt;p&gt;ボタンを配置します。modeに属性を指定することで見た目を3つのパターンから選択できます。&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 { TextInput } from &amp;#39;react-native-paper&amp;#39;;

textBox = () {
  return (
    &amp;lt;Button
      mode=&amp;#39;outlined&amp;#39;
      onPress={() =&amp;gt; this.setState({ visible: true})}
    /&amp;gt;決定&amp;lt;/Button&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;text&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 369px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b0158259ab58397bb6f3d5a2d1adba7d/e0cdb/button-text.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 43.91891891891892%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA8ElEQVQoz5VSOwvCMBDuj3dycnNwEhcHRRAcFAQfg4OIUtBFsINgsbZV+9I2ST/T1kcNVesHx11yyd13Dwl3hGH41J9E9Kf/PSClD6JThOjPCiqJTsb12aE42hSWS+N7yl6MfBLC8xkCEp3f2WYGNC2KUvOAYl1DpWNANQJMlm4shPJkPEm5rUPeXBIC7EPJ7B5QOxJUuyYKtX2sFdXHfO1hqwXYRcFXLhrDEwYLB1fO9GfJ+plgJDtojU/oTS3YHkV/ZqPL7agNS+WCWs+MGSdl5+jhA36Q2K+eJXA89t+U04/SNhMGkGvK33Yvzx7eAHKivY4DHT4FAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;テキストボタン&quot;
        title=&quot;テキストボタン&quot;
        src=&quot;/static/b0158259ab58397bb6f3d5a2d1adba7d/e0cdb/button-text.png&quot;
        srcset=&quot;/static/b0158259ab58397bb6f3d5a2d1adba7d/12f09/button-text.png 148w,
/static/b0158259ab58397bb6f3d5a2d1adba7d/e4a3f/button-text.png 295w,
/static/b0158259ab58397bb6f3d5a2d1adba7d/e0cdb/button-text.png 369w&quot;
        sizes=&quot;(max-width: 369px) 100vw, 369px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;contained&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 101px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/09d35f4617b6b235d5f29c74f62d0fab/2c66b/button-contained.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 65.34653465346535%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB5ElEQVQ4y62TS2sTURSA8xss4kYUFXw/quZhmsd0VaggCBUUEaUgLmpVXOiyqGAxVCdt46SvhWAtYtGlCD5WXbhRxEcEFTqTzNQ+EhHdSMxkPu/cSUdjKdTHwDfnDHP4uPeeewIO4Dju+9+eeUeAWmLbNpXv5b+iWnV8acBNyl/nsG63Y44exrx1pJ7RRXKBNXYU80YbM0+uUZXGqif8VpzEUHeR7w35GC7poI/+C35dXwSjZzPmnRNU6oQlg3wmTuF6goKWIC/iVDbJ7JDC9KDCx4Ekc8MKxeFmSiPNmFpS1hSyCvn0bqx7p7EXCPubhDCOkYkxO5jg/vlGho5v5OKBtTy9FOJmxxbO7VtN37H15Hr2YGlxIRVidSfW3c7FhXp/jE8jCt0H19GyfRmtjQ2Mn9kmxa07GjjZspJXqYjYwRKF7gqnBxKMdW6lq20Nh6Ir5Gq19g3sDy7n7N5VvL0aXcIKM57QPUu3+EO6iYkLQZ53h3lxJcKzy2Feprz4To2KcxS12rzw1O9CXYhisiESceCmiDO1hkwJZMx60cp6NX5TFgoNcR1CdVfDZVL10NWfufyu/Td6w+ipTZjjHfVCu1Lm8/sJim8eUso9+gMeU3z9gC9WDscbFQL/Y45rcyelPwD8CDqF096r3wAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;containedなボタン&quot;
        title=&quot;containedなボタン&quot;
        src=&quot;/static/09d35f4617b6b235d5f29c74f62d0fab/2c66b/button-contained.png&quot;
        srcset=&quot;/static/09d35f4617b6b235d5f29c74f62d0fab/2c66b/button-contained.png 101w&quot;
        sizes=&quot;(max-width: 101px) 100vw, 101px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;テキストボックス&lt;/h2&gt;
&lt;p&gt;簡単にテキストボックスを配置します。すでにスタイルが設定されているため、そのままでもある程度かっこいいものになります。&lt;/p&gt;
&lt;p&gt;こちらもmodeに属性を指定することで見た目を選択できます。&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 { TextInput } from &amp;#39;react-native-paper&amp;#39;;

textBox = () {
  return (
    &amp;lt;TextInput
      label=&amp;#39;name&amp;#39;
      mode=&amp;#39;outlined&amp;#39;
      value={this.state.name}
      onChangeText={text =&amp;gt; this.setState({ name: text})}
    /&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;outlined&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/440784d8db2698189b1247e52a08cf1d/bc3ae/input-outlined.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 31.08108108108108%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnElEQVQY06WPTQqFMAyEe/87eYAupRewWhCrheJPsZU6jym4rAtfYBZJmC8ZkXPGuq6Y5xlaaxhjMAwDuq7DNE1YlgXee6SUEGOs6jxPXNcFse87tm0rA0LHcSzQvu9hrS0zAh9TTcdxFI7gZZqbpoGUEl+LSUMIEKQ756CUQtu2fwH5ZYnMOKz7vl9j1UQ/vyuR2ZD8iIsvopfwHzpS0OPrMxcoAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;テキストインプットーアウトライン&quot;
        title=&quot;テキストインプットーアウトライン&quot;
        src=&quot;/static/440784d8db2698189b1247e52a08cf1d/fcda8/input-outlined.png&quot;
        srcset=&quot;/static/440784d8db2698189b1247e52a08cf1d/12f09/input-outlined.png 148w,
/static/440784d8db2698189b1247e52a08cf1d/e4a3f/input-outlined.png 295w,
/static/440784d8db2698189b1247e52a08cf1d/fcda8/input-outlined.png 590w,
/static/440784d8db2698189b1247e52a08cf1d/efc66/input-outlined.png 885w,
/static/440784d8db2698189b1247e52a08cf1d/c83ae/input-outlined.png 1180w,
/static/440784d8db2698189b1247e52a08cf1d/bc3ae/input-outlined.png 1268w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;テーマの変更&lt;/h2&gt;
&lt;p&gt;テーマを定義して渡すことで全体のテーマを一括で変更できます。&lt;/p&gt;
&lt;p&gt;設定する色やフォント等の情報をドキュメントに記載されています。
&lt;a href=&quot;https://callstack.github.io/react-native-paper/theming.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ドキュメント&lt;/a&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;import { Provider as PaperProvider,DefaultTheme } from &amp;#39;react-native-paper&amp;#39;;

export default function Main() {
  const theme = {
    ...DefaultTheme,
    roundness: 2,
    colors: {
      ...DefaultTheme.colors,
      primary: &amp;#39;#5468cb&amp;#39;,
      accent: &amp;#39;#2489cb&amp;#39;,
    }
  };
  return (
    &amp;lt;PaperProvider theme={theme}&amp;gt;
      &amp;lt;App /&amp;gt;
    &amp;lt;/PaperProvider&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単にかっこいいUIを利用できるパッケージでした。
ここで紹介した以外にもたくさんのコンポーネントが有りますし、設定もわかりやすくおすすめです。&lt;/p&gt;
&lt;p&gt;ヘッダーにも使えるバーコンポネントAppbarとか、画面に固定で配置できるボタンFABとか、モーダルなんかも用意されており実装できます。
テキストや見出し、リスト表示なども用意されており、基本的なアプリであれば全部これを利用することも可能です。&lt;/p&gt;
&lt;p&gt;テーマの変更なども簡単にできるので、ユーザー側で設定できるようにすることも実装できます。&lt;/p&gt;
&lt;p&gt;このパッケージ以外にもUIコンポーネント集はたくさん存在しているので、さまざまなものを使ってみて好みに合うものを探してみましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native Webviewを使ってアプリ内でHTMLを表示]]></title><description><![CDATA[今回は「React Native Webview」を使ってみます。 URLなどに対してブラウザを立ち上げずにアプリ内で表示します。
すでにwebで実装されているサービスであれば、webviewを使うことでアプリの開発を最小限にできます。 ブラウザを立ち上げずにWeb…]]></description><link>https://honmushi.com/2019/12/02/react-native-wabview/</link><guid isPermaLink="false">https://honmushi.com/2019/12/02/react-native-wabview/</guid><pubDate>Mon, 02 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回は「React Native Webview」を使ってみます。&lt;/p&gt;
&lt;p&gt;URLなどに対してブラウザを立ち上げずにアプリ内で表示します。
すでにwebで実装されているサービスであれば、webviewを使うことでアプリの開発を最小限にできます。&lt;/p&gt;
&lt;p&gt;ブラウザを立ち上げずにWebページを表示したいときやHTMLをプレビューしたいときにも使えます。&lt;/p&gt;
&lt;h2&gt;こんな感じ&lt;/h2&gt;
&lt;p&gt;以前expoを利用してマークダウンエディターを作成しました。&lt;br&gt;
&lt;a href=&quot;/lp/mdediter/&quot;&gt;マークダウンエディターのアプリ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;左側にmdを入力するとHTMLに変換して、右側にWebviewを使って表示します。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 426px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/4a16936fcbaae93f2aeee45528479b9d/531e1/rn-webview.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70.27027027027026%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC4UlEQVQ4y32TyU9TURTG+4+4ctgYN2qMSpj6OtJ5nl9HKAgaZGNk5cKNKxM3BhIlqETjwh0OIaFhoRGRoWUoZaaFglBqQUCx7fu893WgLPAlJ+cmL/fL953zuwJRXS1Yox52nQZmlRJ+mxkBhxUuow5GRQM0IiHsTg8+DUcw+GUEscQPRBbiCA2PoT/0Ge8+DiL0bQLRpTg+TCxBIKmvQzPrQEdLALc8TngtJnitJrAmA0xKRVlwan4Z4dERpFPbmJ6MYHz0O4ZCgwhPjGOMnBejUxgYjUIgqq2Fm1xu87O8kErEQCuVQCORQC+XQStmYLY6sbazh9O+PFfo05u/IBATh2aVAkqGISJiXqRcDXJe0FIhuL2TxmpiHRzHlStfVJxMZqjDGljUSr7ozKiQTiYtihYFbS7E4hvY39vFdmoHB4eHyOVyyGazpHI4+pslchzCaz8hEFZXkxna0d7kQ5B0GvfYJRUUwmpjEY4tYmsjifn5uVOjL6SPCjOkl9Xi47jUYcGlnF+K0+XFm/4BPH/Vh2d9r9Hd+xJPe3rRRXpX7wu+d/f04Mnb90SQYOMgyNCNVsYtCaqZeni8jQjef4DLdQyq5GrclKtw4VoVzl65jnNXb+A8OZ+5eAnSQEdhKQG7Ba0+Fi6DjkSWnohMBd2eADofPYbd74fB7YOjqQU61gNGa4BYb4LEaEGNXAHHvYeEQ2E9P782v5svymEJmdKWbXYWX2eWEZmLY4pAPbsYR4yAHF1KYH5lDbHlBDaSSQzNrBRmaNWoTuBC41KnOpmMn6HF6sD4agazW8AmoSfzB0j/BhIZDulDIHVQWEp0ax8CKSNEe9CHzrutuNPogZ/E99vNCLrsuB3wwGPUormlFcl0EWwuzyNCACz2POEwz/+KrBMOxWQpNuKw9JYpiwYSlXJJnRvlEjicbiRSu4VXkedOQE0rVwk2Q8DW02jklRRiSouRJeXIZovjv4KVL+UfEIryFoLvt/UAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;webviewのサンプル&quot;
        title=&quot;webviewのサンプル&quot;
        src=&quot;/static/4a16936fcbaae93f2aeee45528479b9d/531e1/rn-webview.png&quot;
        srcset=&quot;/static/4a16936fcbaae93f2aeee45528479b9d/12f09/rn-webview.png 148w,
/static/4a16936fcbaae93f2aeee45528479b9d/e4a3f/rn-webview.png 295w,
/static/4a16936fcbaae93f2aeee45528479b9d/531e1/rn-webview.png 426w&quot;
        sizes=&quot;(max-width: 426px) 100vw, 426px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;mdからHTMLへの変換はjsのライブラリを使いました。&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v35.0.0/sdk/webview/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v35.0.0/sdk/webview/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;expoドキュメントがわかりやすいです。&lt;/p&gt;
&lt;h2&gt;インストール&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;expo install react-native-webview&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;expo 利用している場合はexpoコマンドでインストールすると、SDKに対応したバージョンが選択されます。
利用していない場合はnpmでインストールしましょう。&lt;/p&gt;
&lt;h2&gt;実装&lt;/h2&gt;
&lt;p&gt;一般的な使い方は以下でしょうか。
URLを指定してリクエストを行い内容を表示します。&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 { WebView } from &amp;#39;react-native-webview&amp;#39;;

~~~
  webviewComponent(){
    return(
      &amp;lt;WebView 
        originWhitelist={[&amp;#39;https://honmushi.com*&amp;#39;]}
        source={{ uri: &amp;#39;https://honmushi.com&amp;#39; }} 
      /&amp;gt;;
    )
  }
~~~&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;webブラウザを立ち上げて表示するのではなく、アプリ内でコンポーネントを用意してそこで開きます。
表示崩れることがあるかもしれませんし、処理が意図通りに動作しないjsもあると思いますので注意しましょう。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;originWhitelist&lt;/code&gt;は有効として認めるドメインを指定します。特定のドメイン以下のもののみアプリ内で表示できるようにするときに利用します。&lt;br&gt;
表示するものが絞られているのであればセキュリティのために指定しておいたほうが良さそうですね。&lt;/p&gt;
&lt;h2&gt;HTMLを用意して渡す&lt;/h2&gt;
&lt;p&gt;HTMLを自分で用意して渡すこともできます。&lt;br&gt;
上記のアプリではこちらの使い方をしています。&lt;/p&gt;
&lt;p&gt;この場合は&lt;code&gt;originWhitelist&lt;/code&gt;は&lt;code&gt;*&lt;/code&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;import { WebView } from &amp;#39;react-native-webview&amp;#39;;

~~~
  webviewComponent(){
    htmlContent = `
      &amp;lt;h1&amp;gt;title&amp;lt;/h1&amp;gt;
      &amp;lt;p&amp;gt;description&amp;lt;/p&amp;gt;`;

    return(
      &amp;lt;WebView
        originWhitelist={[&amp;#39;*&amp;#39;]}
        source={{ html: htmlContent }}
        style={{ marginTop: 20 }}
      /&amp;gt;
    )
  }
~~~&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;アプリ内Webviewが簡単に実装できました。&lt;/p&gt;
&lt;p&gt;すでにWebサービスがあるものは、Webviewで実装することにより開発を短縮することができます。
web側でアプリ用のViewを実装して、webviewで呼び出すだけです。アプリ側の実装が最小限ですみます。  &lt;/p&gt;
&lt;p&gt;ただReactNative使っていると、わりとWebの知識が流用できますので、アプリで実装するほうがいいのかなとも思います。
Web側に影響ありませんし、表示などもほぼ同じように調整できパフォーマンスもいいのではないでしょうか。&lt;/p&gt;
&lt;p&gt;昔はWebviewで実装されたアプリの話もよく聞きましたが、最近ではどうなのでしょうかね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React コンポーネントのlifecycleメソッド]]></title><description><![CDATA[ReactにてコンポーネントをClassで定義した際の、コンポーネントで利用できるライフサイクルメソッドをメモしておきます。 React Native でもとてもよくつかうメソッドですが、覚えられないのでここにまとめて記録しておきます。 参考 React…]]></description><link>https://honmushi.com/2019/11/29/react-lifecycle/</link><guid isPermaLink="false">https://honmushi.com/2019/11/29/react-lifecycle/</guid><pubDate>Fri, 29 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ReactにてコンポーネントをClassで定義した際の、コンポーネントで利用できるライフサイクルメソッドをメモしておきます。&lt;br&gt;
React Native でもとてもよくつかうメソッドですが、覚えられないのでここにまとめて記録しておきます。&lt;/p&gt;
&lt;h2&gt;参考&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://ja.reactjs.org/docs/react-component.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React ドキュメント&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;コンポーネントライフサイクルの図&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;クラスによるコンポーネント定義&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;React.Component&lt;/code&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;class Welcome extends React.Component {
  render() {
    return &amp;lt;h1&amp;gt;Hello, {this.props.name}&amp;lt;/h1&amp;gt;;
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;マウント時のメソッド&lt;/h2&gt;
&lt;h3&gt;constructor&lt;/h3&gt;
&lt;p&gt;コンポーネントのマウントの最初に呼ばれます。&lt;/p&gt;
&lt;p&gt;stateの初期化や、イベントハンドラーにメソッドをバインドするときはここに記述します。&lt;br&gt;
setStateはここでは使わない。直接代入を行います。&lt;br&gt;
&lt;code&gt;super(props)&lt;/code&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;constructor(props) {
  super(props);
  this.state = { counter: 0 };
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;getDerivedStateFromProps()&lt;/h3&gt;
&lt;p&gt;renderメソッドの直前に実行されます。&lt;br&gt;
&lt;code&gt;&amp;#x3C;Transition&gt;&lt;/code&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;static getDerivedStateFromProps(props, state)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;render&lt;/h3&gt;
&lt;p&gt;特に詳しい説明は必要無いでしょうか。コンポーネントをレンダリングします。
この中ではstateを更新しないように注意。&lt;/p&gt;
&lt;h3&gt;componentDidMount&lt;/h3&gt;
&lt;p&gt;コンポーネントがマウントされた直後に動作。DOMに対する初期化はここで行います。&lt;br&gt;
イベントリスナーの登録などを行いますが、その場合はunmountで解除することを忘れないように注意。&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;componentDidMount(){
  this.focusListener = this.props.navigation.addListener(&amp;#39;didFocus&amp;#39;, () =&amp;gt; {
    this.loadData();
  });
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;更新時のメソッド&lt;/h2&gt;
&lt;h3&gt;getDerivedStateFromProps&lt;/h3&gt;
&lt;p&gt;マウント時のメソッドと同様です。更新時にも実行されます。&lt;/p&gt;
&lt;h3&gt;shouldComponentUpdate&lt;/h3&gt;
&lt;p&gt;更新が必要かどうかを判定できるメソッドです。パフォーマンスの改善の目的で利用することがあります。&lt;/p&gt;
&lt;p&gt;stateやpropsを更新前と後で比較して、更新が必要かどうかの判定を追加します。
trueを返せば更新を行い、falseを返せば更新をスキップできます。&lt;/p&gt;
&lt;p&gt;具体的にはfalseを返したとき&lt;code&gt;componentWillUpdate&lt;/code&gt;、&lt;code&gt;render&lt;/code&gt;、&lt;code&gt;componentDidUpdate&lt;/code&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;shouldComponentUpdate(nextProps, nextState)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;render()&lt;/h3&gt;
&lt;p&gt;マウント時と同様です。&lt;/p&gt;
&lt;h3&gt;getSnapshotBeforeUpdate()&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;getSnapshotBeforeUpdate(prevProps, prevState)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;componentDidUpdate&lt;/h3&gt;
&lt;p&gt;コンポーネントの更新後に呼ばれます。&lt;br&gt;
フォームなどの内容が更新された時にサーバへ変更を送信する場合とかに利用します。アプリではそれほど出番は無いかもしれません。&lt;/p&gt;
&lt;p&gt;stateの更新を行う場合は無限ループが起きないように注意。&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;componentDidUpdate(prevProps) {
  if (this.props.text !== prevProps.text) {
    this.save(this.props.text);
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;アンマウント時のメソッド&lt;/h2&gt;
&lt;h3&gt;componentWillUnmount&lt;/h3&gt;
&lt;p&gt;コンポーネントがアンマウントされる直前に呼ばれます。&lt;br&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;componentWillUnmount() {
  this.focusListener.remove();
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;エラーハンドリングメソッド&lt;/h2&gt;
&lt;h3&gt;getDerivedStateFromError&lt;/h3&gt;
&lt;p&gt;子コンポーネントでエラーがスローされた後によばれます。&lt;br&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;static getDerivedStateFromError(error) {
  return { hasError: true };
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;“Render phase”中で呼ばれます。&lt;/p&gt;
&lt;h3&gt;componentDidCatch&lt;/h3&gt;
&lt;p&gt;こちらもエラーがスローされた後に呼ばれます。&lt;/p&gt;
&lt;p&gt;引数は以下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;error&lt;br&gt;
スローされたエラー&lt;/li&gt;
&lt;li&gt;info&lt;br&gt;
どのコンポーネントがエラーをスローしたかについての情報を含む componentStack キーを持つオブジェクト&lt;/li&gt;
&lt;/ul&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;componentDidCatch(error, info){
  logComponentStackToMyService(info.componentStack);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;“Commit phase”中で呼ばれます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;よく使うものは限られていますし、それぞれ主なその用途は決まっています。
処理の順番の前後とか、state更新の可否などに気をつければ問題無く使いこなせます。&lt;/p&gt;
&lt;p&gt;パフォーマンス改善などで大きく役に立つので、そのへんのノウハウやよくあるパターンも今度記録しておこうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native Calendarsを使ってアプリにカレンダーを実装]]></title><description><![CDATA[今回は使って便利だった「React Native Calendars」というパッケージを紹介します。
カレンダーのUI…]]></description><link>https://honmushi.com/2019/11/29/reactnative-calendar/</link><guid isPermaLink="false">https://honmushi.com/2019/11/29/reactnative-calendar/</guid><pubDate>Fri, 29 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回は使って便利だった「React Native Calendars」というパッケージを紹介します。
カレンダーのUIを作成するもので、
以下のようなカレンダーを画面に表示できます。&lt;/p&gt;
&lt;p&gt;カレンダーには予定などを点で表したり、年月の移動、日付をタップしたときに日のデータを渡しつつ処理を開始したりできます。&lt;/p&gt;
&lt;h2&gt;こんな感じ&lt;/h2&gt;
&lt;p&gt;React Native Calendarsの実例を見てみるとこんな感じです。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 275px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ab6cc7328057ceaab68de2fc083a4906/6b2ea/cale-demo.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 97.97297297297297%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAACL0lEQVQ4y61U2Y7bMAz0/3/Ibvcr2u0+9Ugf+lCgwAJps9kczmHHlyRbMsuhLNkJkrZAS0DwQCKHQ5FycvfxHd1/fqT7T490N6yA38ze08PsiR6+PI2Y19QnYOH48JYS6nu6ZV3XkdaG6rqhtvXYGHPT37JP4mxHWduTsiDuyXEC55w4rLc7ep4vaPb1G63THf14eaWfy5Wcwcf1PqZsHVWWyGhNCVR461nsqLb/jfJwHlaoUoPQmJaqRks2zbisGnEyLL/mfVhZK/GBYQ9nsIavwDlfEXyUUl7hNBscIh4yX+L+AvdThSBsOzuQuZjdWif7MHxH3EXyoqpiXJYXI+FlNr9oWFMV03sem4c9yzgSdoNCrJDAWitqZHwYQ7EfJRuJTNvGOJxHwv0xkzIQuNsfh8tXdMhywXlRUlFWvkFVzc3zs7jappIY9747ZGNTro1EMHcDXxuxqBBDKw3hsQmqGjUqPBpWoH3Q8VSIeli6P5DSfpy2u4PECCECcam4M3ROsnFZOQdLN/klZcYTZumG6qr0OD+JCAjcpEdqmr8o+RzTn0tuuVPL1UZKVkrL2xVV3ITwbpfrLb2wDwzvWWnfFPiiTDTm+/P8elOmkx//IvgRDKNyNnvWnr0qr5AJcVdoPchPRTnINzIiYYTqponKg0KMU3i6+an0ChG4WK4lM+SH0pBktUkFY05DIpznA168roUcFcwXS25KQwlk/y/Dzzep61pq/9cFsqIo6BfaJhPNkLcFVAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;カレンダーのサンプル&quot;
        title=&quot;カレンダーのサンプル&quot;
        src=&quot;/static/ab6cc7328057ceaab68de2fc083a4906/6b2ea/cale-demo.png&quot;
        srcset=&quot;/static/ab6cc7328057ceaab68de2fc083a4906/12f09/cale-demo.png 148w,
/static/ab6cc7328057ceaab68de2fc083a4906/6b2ea/cale-demo.png 275w&quot;
        sizes=&quot;(max-width: 275px) 100vw, 275px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;以前私がつくった「todo cale」というカレンダーアプリで利用しました。&lt;br&gt;
予定日を設定するためにカレンダーで日付を選べるようにしたこととと、逆にカレンダーからその日の予定を確認できるようにしています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://apps.apple.com/us/app/todo%E3%82%AB%E3%83%AC/id1484035100?l=ja&amp;#x26;ls=1&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;App store&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.todocalendar&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Google play&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;ドキュメント&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/wix/react-native-calendars&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/wix/react-native-calendars&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上記Githubで公開されています。&lt;/p&gt;
&lt;h2&gt;インストール&lt;/h2&gt;
&lt;p&gt;npmでインストールします。&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 react-native-calendars&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;import { Calendar } from &amp;#39;react-native-calendars&amp;#39;;
~~~
  calendarComponent(){
    return(
      &amp;lt;Calendar /&amp;gt;
    )
  }
~~~&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;  calendarComponent(){
    return(
      &amp;lt;Calendar 
         monthFormat={&amp;#39;yyyy年 MM月&amp;#39;}
         onDayPress={(day) =&amp;gt; {this.setState({select:day})}}
      /&amp;gt;
    )
  }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;月の表記&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;monthFormat&lt;/code&gt;に文字列でフォーマットを渡します。&lt;/p&gt;
&lt;h3&gt;日付選択時の処理&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;onDayPress&lt;/code&gt;にメソッドを渡します。日付を選択した際に実行され、日付の文字列が引数として渡されます。
日付の選択や、モーダルの表示、小ページへの遷移などの処理を書いたりしますかね。&lt;/p&gt;
&lt;h2&gt;日付に印を付ける&lt;/h2&gt;
&lt;p&gt;特定の日付に対して予定などがある場合、点を着けて表示することができます。  &lt;/p&gt;
&lt;p&gt;以下は複数の点を表示する際のサンプルです。&lt;br&gt;
表示する点をキーとカラー・その他の情報をオブジェクトで定義しておき、対象の日付に配列で渡します。&lt;/p&gt;
&lt;p&gt;予めデータベースからタスクなどのデータを取得しておき、日付ごとに配列を用意して表示する点の属性を用意しておくことになります。&lt;/p&gt;
&lt;p&gt;私はここに追加で&lt;code&gt;onDayPress&lt;/code&gt;でモーダルを開くようにして、モーダル内でタスクを選択できるように実装しました。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 253px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/04292f0aed6221762707a30532230416/88c73/cale-dots.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 51.35135135135135%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABO0lEQVQoz61S2U7DMBDM/38QT4hLgDiKRIXgAYF6KE3TtGloE5+xPdhO4gSlj1hZeXd2PBt7N6qqCkopCFlD1jXqgUkpvY2wYdxiXRxxzvGfKxKcgWvg86hRCGMh4xOUMqzWGfY/h0BmtvjXbIGyIgFz/nK1RkXoX8GrTGFW6SDoCK9vH/ieL8NhyjgeXqbYbHcBKw5HTKbviJO0EWSMtSkrZIz9GkFTG+hsbj3uS3Q4TviHIwv+QLAnmPYvjVZ9gYHIWBRjQa31qLI6halTmOqbIqVAYR/+7PzGNmETEq4Z1/fP4bHdSrMdLu+ekO3ygG3zPS5uH5GkWSPYzI/CIk78o/cdFfbgHsOLOiy2RYWQASP2hq4Qa8cvyvPcjgiFFMLvZVl6o5TAzagbfGcd5niEkAGPQliey7n4F7jvDIWulHMIAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;カレンダーの日付に点を付けるサンプル&quot;
        title=&quot;カレンダーの日付に点を付けるサンプル&quot;
        src=&quot;/static/04292f0aed6221762707a30532230416/88c73/cale-dots.png&quot;
        srcset=&quot;/static/04292f0aed6221762707a30532230416/12f09/cale-dots.png 148w,
/static/04292f0aed6221762707a30532230416/88c73/cale-dots.png 253w&quot;
        sizes=&quot;(max-width: 253px) 100vw, 253px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&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;const task01 = {key:&amp;#39;01&amp;#39;, color: &amp;#39;red&amp;#39;};
const task02 = {key:&amp;#39;02&amp;#39;, color: &amp;#39;blue&amp;#39;};
const task03 = {key:&amp;#39;03&amp;#39;, color: &amp;#39;green&amp;#39;};

~~~
&amp;lt;Calendar
  markedDates={{
    &amp;#39;2019-11-25&amp;#39;: {dots: [task01, task02] },
    &amp;#39;2019-11-26&amp;#39;: {dots: [task01, task03] }
  }}
  markingType={&amp;#39;multi-dot&amp;#39;}
/&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;用意する印のデータが多すぎたり期間に幅が有りすぎると表示速度に影響がある様子なので、期間を絞るなどして制御するのがおすすめです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;カレンダーのUIを作るのは結構大変です。このようなモジュールを見つけておいて必要なときにさくっと利用できるようにしておくととても捗ります。&lt;/p&gt;
&lt;p&gt;今回紹介した以外にも、表示するカレンダーの形式や点のスタイルが有りますのでそちらも一度目を通してみると良いです。&lt;/p&gt;
&lt;p&gt;アプリにおいてカレンダーはメジャーな機能ですので、他のモジュールもたくさん公開されているのではないかと思います。
端末のカレンダーやGoogleカレンダーとの動機なんかもできるはずですので、そちらもゆくゆくは試そうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoを使ったAdmobの実装]]></title><description><![CDATA[React Nativeで作るスマホアプリにAdmobを実装する方法の紹介です。 Admobはアプリにバナーなどの広告を掲載して収益化するための仕組みでGoogleが提供しています。ブログなどで利用するAdsenseのアプリ版と考えたほうが早いかと思います。 Expo…]]></description><link>https://honmushi.com/2019/11/28/expo-admob/</link><guid isPermaLink="false">https://honmushi.com/2019/11/28/expo-admob/</guid><pubDate>Thu, 28 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeで作るスマホアプリにAdmobを実装する方法の紹介です。&lt;/p&gt;
&lt;p&gt;Admobはアプリにバナーなどの広告を掲載して収益化するための仕組みでGoogleが提供しています。ブログなどで利用するAdsenseのアプリ版と考えたほうが早いかと思います。&lt;/p&gt;
&lt;p&gt;Expoを利用することで簡単に実装ができます。&lt;br&gt;
他にもライブラリ等は有りますが、expo-ads-admobを利用するとても実装が簡単なのでおすすめです。&lt;/p&gt;
&lt;p&gt;以下実装の紹介です。&lt;/p&gt;
&lt;h2&gt;expo-ads-admob&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v35.0.0/sdk/admob/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ドキュメント&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;モジュールのインストール&lt;/h2&gt;
&lt;p&gt;npm にてインストールを行います。expoのSDKを利用しているのであれば「expo」コマンドでインストールすることでSDKのバージョンに適したものがインストールされます。&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;expo install expo-ads-admob&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;app.jsonに設定を追加&lt;/h2&gt;
&lt;p&gt;admobで作成したアプリの「アプリ ID」をapp.jsonに追加する必要があります。
Admobの管理画面にて、アプリの追加とユニットの作成を行っておきましょう。&lt;/p&gt;
&lt;p&gt;AndroidとiOSの設定部分にそれぞれ追加します。&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;  &amp;quot;android&amp;quot;: {
    // ...
    &amp;quot;config&amp;quot;: {
      // ...
      &amp;quot;googleMobileAdsAppId&amp;quot;: &amp;quot;ca-app-pub-3940256099942544~3347511713&amp;quot; // sample id, replace with your own
    }
  },

  &amp;quot;ios&amp;quot;: {
    // ...
    &amp;quot;config&amp;quot;: {
      // ...
      &amp;quot;googleMobileAdsAppId&amp;quot;: &amp;quot;ca-app-pub-3940256099942544~1458002511&amp;quot; // sample id, replace with your own
    }
  },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;実装.1 バナー広告&lt;/h2&gt;
&lt;p&gt;バナー広告の実装例は以下です。
expoによる開発中はデベロップメントモードになることを利用して、開発中はテスト用の広告IDが利用されるようにしています。&lt;/p&gt;
&lt;p&gt;その上でreact-nativeの&lt;code&gt;Platform&lt;/code&gt;を利用して、OSによる広告ユニットIDの出し分けを実装しています。
それぞれの広告ユニットIDの部分は自分で用意したAdmob広告のユニットIDを設定します。&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 React from &amp;#39;react&amp;#39;;
import { Platform,View } from &amp;#39;react-native&amp;#39;;
import { AdMobBanner } from &amp;#39;expo-ads-admob&amp;#39;;

class BannerAd extends React.Component {
  bannerError() {
    console.log(&amp;quot;Ad Fail error&amp;quot;)
  }

  render(){
    return (
      &amp;lt;View &amp;gt;
        &amp;lt;AdMobBanner
          adUnitID={
            __DEV__ ? &amp;quot;ca-app-pub-3940256099942544/6300978111&amp;quot; // テスト広告
            : Platform.select({
              ios: &amp;quot;広告ユニットID&amp;quot; , // iOS
              android:&amp;quot;広告ユニットID&amp;quot; , // android 
            })
          }
          onDidFailToReceiveAdWithError={this.bannerError} 
        /&amp;gt;
      &amp;lt;/View&amp;gt;
    )
  }
}

export default {BannerAd}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;表示のサンプル&lt;/h3&gt;
&lt;p&gt;こんな感じで表示されます。画面の下や上に固定しておくのがよく見る配置ですかね。&lt;br&gt;
隣接するViewに&lt;code&gt;flex:1&lt;/code&gt;のスタイルを設定しておくとその要素が膨らむので、広告のコンポーネントが下端によることになります。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 339px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/05dd8a75bfcd400f0a14a94fdbd739a6/16caa/banner.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 22.972972972972975%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAABEUlEQVQY02WQzU6DUBCFifypGxaWHS9Z34KV0cTExIWPoTFx4bI1vRcwuAXkR6iRGhVoLyTH4dbqwkm+zMyZOZObqzDGkKYp4jj+R5IklJOf+ln2f9qWKKJd8ifFK8LwCYrruhijadcQYsCGGPoBvejRtR1pvaybpkXXrdGSNvZCCIiNwEDeNs+BOsTN7TWUs9MTeTB5A7J30jv8Rl2vsKyWWFEuX0pkWY6yrFARRV7g6+NzuzifA+wKd/d0cDo9pmdHYAsGzj2MX+B5vsT3A8moMcYRBNQTuxnnHAuCz2bwHh5xfnEJRVVVGIYBXddhmiaOJhNomia1kT2a27YNx3FkvdNV2rEsS85U8u4fHkjfN701N17gU+lpAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;バナー広告のサンプル&quot;
        title=&quot;バナー広告のサンプル&quot;
        src=&quot;/static/05dd8a75bfcd400f0a14a94fdbd739a6/16caa/banner.png&quot;
        srcset=&quot;/static/05dd8a75bfcd400f0a14a94fdbd739a6/12f09/banner.png 148w,
/static/05dd8a75bfcd400f0a14a94fdbd739a6/e4a3f/banner.png 295w,
/static/05dd8a75bfcd400f0a14a94fdbd739a6/16caa/banner.png 339w&quot;
        sizes=&quot;(max-width: 339px) 100vw, 339px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;実装.2 インタースティシャル広告&lt;/h2&gt;
&lt;p&gt;画面全体に表示される動画などの広告です。広告が終わったら閉じるボタンを押して、アプリに戻ることのできる広告です。&lt;/p&gt;
&lt;p&gt;広告リクエストと表示を連続でやっていますが分けておいてあらかじめ用意しておくのが良いです。
画面表示の際にリクエストをしておいてボタンを押したら関数を実行して広告を表示する。という形が良いパターンかと思います。&lt;/p&gt;
&lt;p&gt;Interstitial広告はpromiseを返すので、表示に失敗したときのために&lt;code&gt;.then().catch()&lt;/code&gt;にて例外を受け取れるようにするか、async・awaitを使って実装するかがおすすめです。&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;import React from &amp;#39;react&amp;#39;;
import { Platform,View } from &amp;#39;react-native&amp;#39;;
import { AdMobInterstitial} from &amp;#39;expo-ads-admob&amp;#39;;

async function Interstitial () {
  if(__DEV__){
    AdMobInterstitial.setAdUnitID(&amp;#39;ca-app-pub-3940256099942544/1033173712&amp;#39;); // テスト広告
  }else{
    if(Platform.OS === &amp;#39;ios&amp;#39;){
      AdMobInterstitial.setAdUnitID(&amp;#39;広告ユニットID&amp;#39;); //iOS
    }else{
      AdMobInterstitial.setAdUnitID(&amp;#39;広告ユニットID&amp;#39;); //android
    }
  }
  await AdMobInterstitial.requestAdAsync();
  await AdMobInterstitial.showAdAsync();
}

export default {Interstitial};&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;表示のサンプル&lt;/h3&gt;
&lt;p&gt;こんな感じで表示されます。&lt;br&gt;
画面いっぱいに表示されます。閉じることで元の画面に戻ることができ、promiseを返すので表示後の処理などを指定することもできます。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 170px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6bce6e2852e5d834965962285dba2283/04472/inter.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.7027027027027%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAkCAYAAACJ8xqgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC/UlEQVRIx+2Vy0tUURzHrzMKIszW9rmIoEUUhs1Mq0iHNgW5SRe6DSJaRf9BEfRigpYSCFFZGaaWuHARSj6wZnTSGuehZM7cedzxvp/fzr1nZhxn3HWFoA58uef87u98fo9zuJcZHBiEx+MBwzDuqL+/312giyAql7M7hAz/fqDdQzflfoaBQBB+okDwHAKBAOx1rfw1OusPostPn/V+Aee9Hwyqw8SfDlXTwbAlE7HNXfDxMRQX5ilaVatOJcEAJ5jIcAamoxoeTcoYmlEgqyQBy4JpWrCI7DkvSmAkxQBbkKAQupDJQOF5B8Rnc4Am4OVnDQNPRdx4JuHyfQFXwyK67whIswYNbgMtGwgINtCxWqb9BhrHIT82CnFmGtnxMVIDj6kVA5cI6PqQhMeTCqYiOl7PayjwZnlrGYgaoCkr4KcmHOPPm9cw4/OAfXDXWWuSjC2STbZU32MKqmgPaNKFlk5hd3QE6fNdiJ86hsSVi5CWFiDPz+0hiGu5XQcOCrQdDBpdY7OInDmBxaNHsBg8DXk1CoP0tsjtQiZVqIoKTdWgkLlMMlfJXBRESGRuEoZInhRop23QJice3sPbk8ex8+YVbTpxTCaS2NhIYHNzC9/XfyCZTGF5+QtisW9YXY05sgNIJFAVaOoUuDY7i5Hbt1BcX3PWCnFcia4gHo8jEomiUCiUy9/r3f4eWvSkHAOJMBJ+gq/Dw3j3/AUqrZJJLF03oWtaQ98aD6UCtOid+jj+AaPvJ/FprnzJJQ360gT4YgrFogCWzYHjSshmWfC8gEqFVaBBSrWl67rTL0GUSc9SpFQFBglgkJL52BLy+R1sb2eQSqWRy+XJ/BexFap7DXIGJRKAgcuDCYVCqFWPrZ6efbYQWVM7fUefVLV+F7q7D+F76PV64Zo83n/yr/cf6C7Q/vPb96ne1tbW1rCxubnZ0YHApqYmZ9Hb24vOzk5nXgF3dHQgHA7D4/Xss/f19TmqtTVk2Nra6qjW1tLSgvb29oZMfD6fo3r7b+yLwriYjN27AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;インタースティシャルのサンプル&quot;
        title=&quot;インタースティシャルのサンプル&quot;
        src=&quot;/static/6bce6e2852e5d834965962285dba2283/04472/inter.png&quot;
        srcset=&quot;/static/6bce6e2852e5d834965962285dba2283/12f09/inter.png 148w,
/static/6bce6e2852e5d834965962285dba2283/04472/inter.png 170w&quot;
        sizes=&quot;(max-width: 170px) 100vw, 170px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;実装.3 リワード広告&lt;/h2&gt;
&lt;p&gt;ちょっとだけややこしくなります。
広告を見終わったことを検出するためにイベントが用意されています。イベントリスナーを追加して処理を設定しておきます。&lt;/p&gt;
&lt;p&gt;画面表示の際に、視聴後に実行する処理をイベントリスナーに設定しておいて、ボタンを押したときに動画広告を表示するイメージです。
視聴完了のタイミングは&lt;code&gt;rewarded&lt;/code&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;import { AdMobRewarded } from &amp;#39;expo-ads-admob&amp;#39;;

class HomeScreen extends React.Component {

  Reward = async () =&amp;gt; {
    if (__DEV__) {
      AdMobRewarded.setAdUnitID(&amp;#39;ca-app-pub-3940256099942544/5224354917&amp;#39;); // Test ID, Replace with your-admob-unit-id
    } else {
      if (Platform.OS === &amp;#39;ios&amp;#39;) {
        AdMobRewarded.setAdUnitID(&amp;#39;広告ユニットID&amp;#39;); // iOS
      } else {
        AdMobRewarded.setAdUnitID(&amp;#39;広告ユニットID&amp;#39;); // android
      }
    }
    await AdMobRewarded.requestAdAsync();
    await AdMobRewarded.showAdAsync();
  };
  
  buttonPress = () =&amp;gt; {
    this.Reward() 
  }

  componentDidMount = () =&amp;gt; {
    AdMobRewarded.addEventListener(&amp;#39;rewarded&amp;#39;, () =&amp;gt; {
      // 広告最後までみた人が実行できる処理
    });
  };
  componentWillUnmount() {
    AdMobRewarded.removeAllListeners();
  }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;表示のサンプル&lt;/h3&gt;
&lt;p&gt;こんな感じで表示されます。右上の「残り○秒」が減っていき、0になると閉じることができます。&lt;br&gt;
あらかじめイベントリスナーにて各種イベント時の処理を定義しておく必要があるので少しややこしいですが、アプリらしい報酬などを設定できるので使いこなせると便利です。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 170px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a16f2c8ddfcff4c98bb17e046ebac1d4/04472/reward.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.02702702702703%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAjCAYAAACU9ioYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGDUlEQVRIx61WeVDUVRx/u6hxFFaK4jh5ICINkEgJITLEbgvLLRQCJtIhjmXiNcNMf9gxDWbaWFPOmE4ZYzqFiDY2o8leCiiwiJaGHOaFHHLsBe6yu+zup/fesgwsa3/1mM+8xzs+73u8/X5+BLQ5HA7YKRxucK15GtvtdvT09KC3txd6vZ7DYrGCuDZ4ahPJGYF7Pzg4iIGBAQwNDUGr1VJCCwg7aDKZ0NXVhf7+fvT1PUJ3dzff9F/tSYZwwtLSUqSlp0OUKIJUKkV6ehqKioqoFTa0tNyiaOEXtnd04Pr1P/nFLrfdw8QJC/LzIUpYTUlTkZaRgoQEMUQiEYxGI3errb0dt1pb0dbWhtbWNuh0uikhmUT4WpIUhPhReCFwngCB8wkWLVqC0dFRjNpsMJstMI2Y+dg9vh5dzkpOQVikH0TxKxG7MBBBAc9gWegKWK1mnjkWYwaz2cyYxhjh0UpOKI2LR97i6Th8OA17i4uREZuA4LhYPB428nN2+seawWxC75AenbpB6E2P0WvQci/YHWazlYMTHvhmP/YdOY4rN46gs+5HnDvfhENffuI0YZQ9AyeMVhMGrHoMUhgdNmisFpj5lRaaICM3m7AAW2iMjCOD0A3/DYPpGh4a7uKmeRTXDENo0nTgsv4yak316G7tgaHBAF2TFhr1X9CrG9Hf2Izmxj40qrVobtaBKJVyqFRqyKr34oKcQC0jKJFngMhq4SWvB7m4Bi/+/DTEOxegdOmHuEzqIRNUQy4IxUVCcJrMwmzBSZrQS/ASykBqai5CrW6BQrEPchXBVYrtqiwQVQO8lGqQ2iwUbQ1F+bsbsS0iB3KihIqooCDLUEsJz5DnMYtUUsJaCiWzUEbJGqiVX0GmnEw4Q0EJL6Vgy08JOP3RTuyJ2UStqoNCKKeEoagZI5w9RiggCnpO5XRZpXQjVFJ3a5qphW8irmweyrKTsGNJHpT0YB2FnISME86aSMhiqFQ1TiLcocikZNcw59dfEP92NgqyUlG2eTNWR0ZA+oIUlb4nqaVhuOSJUC6XQy5vpPjKmRSKEsUautCAzHc2oECchLfW5mPX+nVYI0lCVHwkMsKlqCbBPClV5DkECCmhkCZRSAkb1TKa8gaamP2obyL4h6LkRj4CDh9HgUSMzIwMpEokKC7IQ256BpISRHgpPBzHffzRQgnPU0IfUsGzTAjNctRyFaKWN+PlyAOICCNYuJQgKzwVuZItiF65HBlJyZCKxVifX4BkWo1WhIUjOCgY0bMDEEUJV/k9i31lv+PQ91dx8OAVShr0GciSPSDzt2Ld1s9x7g8lznx3Fhsk6XgjRYLXqUVZ0hSsz83FK5FRmD93HmIjIrBg8WJ6mEDg54tVcVEQi2OQmBhN50TvQSjZCPJqIQ6erRv/3St+O4nqb7/A7vc3ITslDZnJUmQnJmLX2izs37wBQYFzOaH39Om8H8dT4hL4SraBrCrGgYrqMUIHhrUWfJC9CaojX+OHj3dje14+Tn+6G0VSMRYEzsGMGTPg7e2NmTNnws/PDz4+PvD19QXpHtCB4WG/FkPGkfFKbLfZ0dszAB0tsKO00Bo0Go679x/g/oNOLhOeQKZohQedsLFa94S1KQXWbnfARiuxjVk1QeHYnE5vwMCgBlqdnvcaqmzDw4+d+ylYLXSNGdg5bqHRaOKH9bRcscMaLYOOz7G+f8BJamByScudc01PtUXP97A1xjEuAe6l3L0Zhoa55nqSUfczxBOJlllAb719+zZ3i4WC9awxCdXQRHnS5nFNcbeOufOorx937tzhcWFkVquVr/XQT4+e3kceBWqSyxNvZBYxWXDYnOLkCj6PN1W/Eap+E12eIqPuMXE9H4vbO/Lk4pRnw8XcDfRVo8tkwYV7N9HXeQ/tNJYsnh30U4R9cTnGYuoJBP9zI5WVlXChoqIC5eXlfHyK4dQpVFVV4dixYzhx4gQfsznX3qNHj2LieQYyqVJQxMTEwH2OfTiFhIRMmU9LS5syR4RCIRjYP6xqSGh1ZpVEIBBg2rRpfD4nJwfR0dF87Jrz9/dHYWEhvLy8+F4Xz7+OT10JRbjKaAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;リワード広告のサンプル&quot;
        title=&quot;リワード広告のサンプル&quot;
        src=&quot;/static/a16f2c8ddfcff4c98bb17e046ebac1d4/04472/reward.png&quot;
        srcset=&quot;/static/a16f2c8ddfcff4c98bb17e046ebac1d4/12f09/reward.png 148w,
/static/a16f2c8ddfcff4c98bb17e046ebac1d4/04472/reward.png 170w&quot;
        sizes=&quot;(max-width: 170px) 100vw, 170px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;広告もexpoを利用することで簡単に実装できます。&lt;br&gt;
各広告のモジュールにはさまざまなタイミングでイベントが用意されていて、そのタイミングで処理を実行することもできます。広告のサイズなどを始めとしたいくつかの設定が用意されています、ドキュメントを読んで試してみましょう。&lt;/p&gt;
&lt;p&gt;他にもexpoを用いることで簡単に実装できる機能が山ほど有ります。
とても便利でよく利用していますので、少しずつ紹介していきたいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoによるストア公開なしでアップデート配布「Over the Air」]]></title><description><![CDATA[Expoを使ったことがある人はご存知かと思いますが、ストアでの審査なしでアプリの更新を配布することができます。 「“Over the Air” (OTA) updates…]]></description><link>https://honmushi.com/2019/11/28/expo-publish/</link><guid isPermaLink="false">https://honmushi.com/2019/11/28/expo-publish/</guid><pubDate>Thu, 28 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Expoを使ったことがある人はご存知かと思いますが、ストアでの審査なしでアプリの更新を配布することができます。&lt;/p&gt;
&lt;p&gt;「“Over the Air” (OTA) updates」と呼ばれています。&lt;/p&gt;
&lt;p&gt;ストアでの審査を通さなくても良いので便利です。間違ってもエラー起きるリリースとかをしないように最新の注意を払う必要があります。なんだかんだ、ストアの審査でエラーが見つかることもありますので、その辺は自己責任になります。&lt;/p&gt;
&lt;p&gt;以下簡単に手順と必要な設定を記載します。とても簡単で、むしろデフォルトが有効になっていますので特に苦戦することもないです。&lt;/p&gt;
&lt;h2&gt;OTAアップデート&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v35.0.0/workflow/publishing/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ドキュメント&lt;/a&gt;&lt;br&gt;
上記ドキュメントに詳しいことが書かれています。英語ですがそれほど難しくはないです。専門用語が多いのでわからない点もあると思いますが、調べながら進めましょう。&lt;/p&gt;
&lt;h2&gt;app.json&lt;/h2&gt;
&lt;p&gt;app.jsonにて以下の指定をする必要があります。&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;  &amp;quot;updates&amp;quot;: {
    &amp;quot;enabled&amp;quot;: true,
    &amp;quot;fallbackToCacheTimeout&amp;quot;: 30000 
  }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;fallbackToCacheTimeout&lt;/code&gt;はミリ秒です。「30000」がデフォルトで、更新リクエストの際に最大30秒まで待てることになります。少し減らしておいてもいいと思います。10秒位とか。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;enabled&lt;/code&gt;をfalseに変えておけば、OTAが無効になった状態でアプリがビルドされます。不要なのであれば早いうちに変更しておきましょう。未指定の場合はtrueとして扱われます。&lt;/p&gt;
&lt;h2&gt;更新の実行&lt;/h2&gt;
&lt;p&gt;expoサーバでビルドを行えば、自動的に更新が公開され配布されます。&lt;/p&gt;
&lt;p&gt;実際にはアプリが起動した際に上記の&lt;code&gt;updates&lt;/code&gt;の&lt;code&gt;enabled&lt;/code&gt;がtrueの場合は、更新があるかどうかexpoのサーバに問い合わせています。&lt;br&gt;
更新のバージョンがあればそれをサーバからインストールしています。特にユーザー側での操作も必要ないのでとても簡単です。&lt;/p&gt;
&lt;h2&gt;OTAで更新できないこと&lt;/h2&gt;
&lt;p&gt;以下の内容に関してはOTAでの更新はできません。app.jsonで以下を変更した場合、スタンドアローンアプリをストアで公開してアップデートする必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expo SDKのVersionアップデート&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ios&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;android&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;notification keys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;splash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;icon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;owner&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scheme&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;facebookScheme&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assetBundlePatterns&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;expoのSDKのバージョンを更新した場合は内容がOTAで配布されません。各端末のSDKと、ビルドサーバにアップしたSDKのバージョンに差異がある場合はアップデートされないようです。&lt;/p&gt;
&lt;p&gt;ストアで新しいバージョンのSDKを含むアプリを配布することで、両環境のSDKバージョンの差異がなくなりOTAでアップデートが可能になります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ストアでの審査を体験したことのある人ならこの機能の便利さが伝わると思います。&lt;br&gt;
ただ、絶対必要な機能というわけではないので無効にするのも方針として有りです。私はいくつかのアプリでは無効にしています。&lt;/p&gt;
&lt;p&gt;実機でのテストをしっかり行いたい場合など邪魔になる機能ですので、開発初期段階で一度検討して方針を決めておきましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Vimのおすすめプラグインを紹介するページ]]></title><description><![CDATA[突然ですが Vim のおすすめプラグインを紹介するページを作成します。 理由は特にありませんが、便利だなあと思ったプラグインを使い方とともに記録しておきます。 環境移行の際とか便利だと思いましたので、後は各種プラグインごとの設定なんかも書いておこうかなと思います。vimrc…]]></description><link>https://honmushi.com/2019/11/27/vim-plugin-list/</link><guid isPermaLink="false">https://honmushi.com/2019/11/27/vim-plugin-list/</guid><pubDate>Wed, 27 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;突然ですが Vim のおすすめプラグインを紹介するページを作成します。&lt;/p&gt;
&lt;p&gt;理由は特にありませんが、便利だなあと思ったプラグインを使い方とともに記録しておきます。&lt;/p&gt;
&lt;p&gt;環境移行の際とか便利だと思いましたので、後は各種プラグインごとの設定なんかも書いておこうかなと思います。vimrc 見ればわかるのですが、コメントとか減らしたいのでここに書いておきます。&lt;/p&gt;
&lt;h2&gt;vim easymotion&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://haya14busa.com/mastering-vim-easymotion/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;http://haya14busa.com/mastering-vim-easymotion/&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;p&gt;&lt;code&gt;s&lt;/code&gt; の後に2文字入力すると、画面の該当する箇所にセレクタが表示されますので、そのキーを押すとそこに移動できます。&lt;/p&gt;
&lt;h2&gt;vim surround&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/tpope/vim-surround&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/tpope/vim-surround&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;単語等の前後を’とか”で囲むことができます。
プログラミングしていると文字列の指定とか配列やオブジェクトの指定などで、文字を囲む必要が何度も出てきます。
&lt;code&gt;[&lt;/code&gt;などにも対応していますので、そのときに使っているプラグインです。&lt;/p&gt;
&lt;h3&gt;使い方&lt;/h3&gt;
&lt;p&gt;簡単には以下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ysiw&apos;&lt;/code&gt;&lt;br&gt;
カーソル位置にある単語を”で囲む&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ds&quot;&lt;/code&gt;&lt;br&gt;
囲んでいる&quot;&quot;を削除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cs[{&lt;/code&gt;&lt;br&gt;
囲んでいる[]を{}に変更&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;vim-prettier&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/prettier/vim-prettier&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/prettier/vim-prettier&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「prettier」という便利なコードフォーマットツールがあり、それを Vim で利用できるようにしたものです。
prettier は JavaScript のコードフォーマッターで、タブや空白の数とか、カッコのスペースとか、改行などを機械的にフォーマットします。&lt;/p&gt;
&lt;p&gt;チームでのみやすさのためにコーディングルールを儲けるのは普通のことですが、逐次ルールを共有するのではなく、こうした仕組みで整えるというのはとても良い考えだと思います。
私は Expo の開発コミュニティの Contribute guide のコーディング規約でこれを見つけて、それ以降これを愛用しています。&lt;br&gt;
&lt;a href=&quot;https://github.com/expo/expo/blob/master/CONTRIBUTING.md&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/expo/expo/blob/master/CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;わかりやすいですし簡単に整形できて便利です。個人開発ではコーディングルールがおろそかになりがちだと思います。なにかコミュニティなどのルールを参考に真似するのがおすすめです。&lt;/p&gt;
&lt;h3&gt;使い方&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;Leader&gt;p&lt;/code&gt;で動作します。&lt;br&gt;
プラグインとは別でprettier本体も必要です。npmでインストールします。&lt;/p&gt;
&lt;h2&gt;参考になる書籍&lt;/h2&gt;
&lt;h3&gt;「実践 Vim」&lt;/h3&gt;
&lt;p&gt;インストールしたままの Vim で使える便利なコマンドや応用が掲載されています。私が Vim 使う上でとても参考にしている本です。よい本ですのでみなさんもぜひ。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Vim の便利なプラグインの紹介でした。以降も追記していくつもりです。便利なものを見つけたり、おすすめの設定とか見つかったらドンドン書いていきます。&lt;br&gt;
このページにまとめて書いておくことで、他の環境への移行時などに便利になることが目的です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expo + React Nativeによるアプリ開発環境]]></title><description><![CDATA[今までにいくつかスマホアプリを作成しました。
今回はスマホアプリ開発に使っているいくつかのサービスや環境を紹介します。 ざっくりとは以下を使っている感想やおすすめポイントの紹介です。 React Native expo…]]></description><link>https://honmushi.com/2019/11/27/expo-develop/</link><guid isPermaLink="false">https://honmushi.com/2019/11/27/expo-develop/</guid><pubDate>Wed, 27 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今までにいくつかスマホアプリを作成しました。
今回はスマホアプリ開発に使っているいくつかのサービスや環境を紹介します。&lt;/p&gt;
&lt;p&gt;ざっくりとは以下を使っている感想やおすすめポイントの紹介です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;expo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;スマホアプリの開発を簡単にでも初めたい人にとって参考になる情報です。
ちょっと不便に思うことやアイデアがあり、アプリを作ってみようと考えている人におすすめです。&lt;/p&gt;
&lt;h2&gt;作成したアプリの例&lt;/h2&gt;
&lt;p&gt;スマホアプリは結構たくさん作成しました。大小全部数えれば10個以上あります。&lt;br&gt;
例えば以下のものがあります。どれもiOS・Android両方で公開しているアプリです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/lp/noty/&quot;&gt;コミュニティバス「のっティ」の時刻表アプリ&lt;/a&gt;&lt;br&gt;
クロスプラットフォームで開発したアプリです。特別な機能はありませんが、一番最初に作ったアプリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/lp/foldest/&quot;&gt;Foldest Note 階層を作って管理できるノートアプリ&lt;/a&gt;&lt;br&gt;
sqliteというRDBを使っています。ノートアプリもかんたんに作成できます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/lp/mdediter/&quot;&gt;Coffee memo  シンプルメモ帳アプリ&lt;/a&gt;&lt;br&gt;
メモごとにテーマを変えられるようにしたり、簡単なシェア機能やクリップボードなどの機能を搭載しました。
メモ帳アプリで利用できそうな機能をいろいろ試してみたものです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらすべてのアプリは以下に紹介する環境で作成しています。どれも導入が簡単なのでおすすめです。&lt;/p&gt;
&lt;h2&gt;React Native&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://facebook.github.io/react-native/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React Native&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;クロスプラットフォーム、すなわちiPhoneとAndroidの両方で動作するアプリを開発できます。&lt;/p&gt;
&lt;h3&gt;クロスプラットフォーム&lt;/h3&gt;
&lt;p&gt;以前はそれぞれのOSで使用するプログラミング言語が異なるため、同じアプリを2つの言語で作る必要がありました。現在ではクロスプラットフォーム開発向けの言語や仕組みが整ってきており、とても便利です。&lt;/p&gt;
&lt;p&gt;ネイティブでの実装が必要であれば、それぞれの言語に分ける必要がありますが、新しく始める際の入門や、簡単な機能やプロトタイプとして作るのであれば、React Nativeで十分に開発ができます。&lt;/p&gt;
&lt;h3&gt;Web開発で得た知識を使える&lt;/h3&gt;
&lt;p&gt;JavaScriptを使ってプログラミングすることになります。
アプリのため、Webとは性質や動作が異なりますが言語そのものの動作は同じです。知識を流用することが出来ます。JavaScriptの基本構文はもちろん、パッケージもアプリ開発に利用することができます。&lt;/p&gt;
&lt;p&gt;JSXというHTMLに近いタグベースの構文でUIを作成していくので、その点もわかりやすいです。
要素のスタイルをCSSに似たルールで指定するところも、Webライクですぐに理解できると思います。&lt;/p&gt;
&lt;h3&gt;Atomic designとの相性が良い&lt;/h3&gt;
&lt;p&gt;React NativeはReactというJavaScriptのフロントエンドフレームワークを元にして、アプリ開発に対応したものとして作られています。  &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ja.reactjs.org&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;そのためコンポーネント・ベースの設計に相性がよいです。「Atomic Design」という考え方に沿ってデザインやUIを設計していくと、整理された設計で構築ができ運用・改修もしやすくなるのでおすすめです。&lt;/p&gt;
&lt;p&gt;以下の本がとても参考になります。コンポーネント設計はもちろんテストのことなども書かれてました。
&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/477419705X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=477419705X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6bdf9cbde787d1dab2c8a360c1106941&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=477419705X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=477419705X&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&gt;expo&lt;/h2&gt;
&lt;p&gt;React Nativeでの開発を手助けするパッケージ群、ざっくりとはSDKです。&lt;br&gt;
&lt;a href=&quot;https://docs.expo.io/versions/latest/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;expo&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;利用するパッケージの例&lt;/h3&gt;
&lt;p&gt;例えばexpoには以下のパッケージがあります。必要なものをimportして実装できます。
端末の機能へのアクセスも簡単にできるためとても便利です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;カメラ expo-camera&lt;/li&gt;
&lt;li&gt;広告 expo-ads-admob&lt;/li&gt;
&lt;li&gt;位置情報 expo-location&lt;/li&gt;
&lt;li&gt;バーコードスキャナー expo-barcode-scanner&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;開発がかんたん&lt;/h3&gt;
&lt;p&gt;expoを利用していると端末での実機テストも簡単になります。&lt;/p&gt;
&lt;p&gt;expoが提供するクライアントアプリをストアから端末にインストールしておくと、開発中のアプリのソースをPCからLAN経由で端末に送って動かすことができます。ホットリロードの機能により、ビルドせずとも保存のたびに変更が反映され動作を実機で確認しながら開発できます。&lt;/p&gt;
&lt;p&gt;ブラウザで確認しながらWebシステムのコーディングを行うようなイメージです。&lt;/p&gt;
&lt;p&gt;エミュレータを使って確認することもできるのですが、私は実機でアプリを動かして確認しています。
AndroidもiOSも両方の端末で動作を確認できます。操作も実際の動作が確認できますし、ログ出力も確認できます。PCの画面も圧迫しなくて済むのでおすすめです。ただ、電池の消耗は激しいです。&lt;/p&gt;
&lt;h3&gt;ビルドもかんたん&lt;/h3&gt;
&lt;p&gt;expoはSDKだけでなくオンライン上で利用できるサービスがあり、とても便利です。&lt;/p&gt;
&lt;p&gt;アプリのビルドをexpoのオンラインサーバ上でやってもらうことができます。自分のPCやビルド用マシンでビルドする必要がないので、他の作業をしながらでも快適にできます。ただし、expoのサイトにてアカウントを作る必要があります。無料です。&lt;/p&gt;
&lt;p&gt;ストアのキーであったり、各ストアのアカウント情報なども管理してくれますので簡単にビルドできます。管理画面から作成されたAAB・APK・IPAをダウンロードできます。&lt;/p&gt;
&lt;p&gt;ビルドしたものはオンライン上に公開されており、他の人の作ったアプリなどを専用のクライアントアプリを使うことでストアからダウンロードすることなしに試すことができます。&lt;/p&gt;
&lt;h3&gt;容量は大きくなりがち&lt;/h3&gt;
&lt;p&gt;ただし、上記の実機でのホットリロードを利用した確認、expoサーバでのビルドを行うために、expoのSDKをアプリに含める必要があります。その分アプリの容量が大きくなりがちです。&lt;/p&gt;
&lt;h2&gt;npm&lt;/h2&gt;
&lt;p&gt;詳細な説明は不要でしょうか。React NativeはJavaScriptのパッケージですので、パッケージ管理ツールとしてnpmを使います。
expoも同様にnpm経由でinstallします。&lt;/p&gt;
&lt;h2&gt;github&lt;/h2&gt;
&lt;p&gt;バージョン管理にgithubを使います。こちらも詳細な説明は不要でしょう。&lt;/p&gt;
&lt;h2&gt;Vim&lt;/h2&gt;
&lt;p&gt;エディタはVimです。個人的なお気に入りですが、なんでもVimを使っています。
React Nativeで役に立つプラグイン等もそのうち紹介したいと思います。&lt;/p&gt;
&lt;h2&gt;PCはLinux&lt;/h2&gt;
&lt;p&gt;OSではUbuntuです。MacやWindowsも利用できるPCを持っていますが、Linuxが一番好きです。&lt;/p&gt;
&lt;p&gt;Webシステムであれば利用するサーバーとOSを揃えておくのがおすすめです。ですので、Windowsサーバを使うならWindows使うといいです。&lt;/p&gt;
&lt;p&gt;今回はアプリ開発なので、ズバリ何でもよいです。React NativeはJavaScriptを使うので、どのOSでも問題ないです。&lt;/p&gt;
&lt;p&gt;あとはワードやエクセルなどのオフィスを使う必要があるのであれば考えたほうがいいです。
そうでなければLinuxがおすすめです。さまざまなアプリケーションがスッキリ動きます。
iOSアプリのapp storeへのipaのアップロードの際にのみMacを使います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;React Nativeとexpoの開発環境の紹介でした。&lt;/p&gt;
&lt;p&gt;他にも「こんなプラグイン使うと便利だよ」とか実際の画面の動作とかも紹介していこうと思います。
何より日本語の情報が少ないので、敷居の高さを感じている人もいるかもしれません。
試してみるとすごく簡単なのでおすすめです。Webにも対応したり、開発も盛んなのでこれからの発展にも期待しています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ボジョレーヌーボーも今日から解禁「The WINE」]]></title><description><![CDATA[11月の第3木曜日、ボジョレーヌーボーが解禁されました。毎年ニュースでも取り上げられますね。 前からずっと積読してあった「The WINE…]]></description><link>https://honmushi.com/2019/11/21/the-wine/</link><guid isPermaLink="false">https://honmushi.com/2019/11/21/the-wine/</guid><pubDate>Thu, 21 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;11月の第3木曜日、ボジョレーヌーボーが解禁されました。毎年ニュースでも取り上げられますね。&lt;/p&gt;
&lt;p&gt;前からずっと積読してあった「The WINE」という本を思い出したので読んでみました。&lt;/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 target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4537214198/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4537214198&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=2f2260c49e0725adf54cd1e1a2603226&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4537214198&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4537214198&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&gt;ざっくり&lt;/h2&gt;
&lt;h3&gt;味を決める5つの要素&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;h3&gt;味覚のレベルは舌をよく見るとわかる&lt;/h3&gt;
&lt;p&gt;味覚は「味蕾-みらい」の数によって決まるそうです。舌にあるぼつぼつが多いほうが、味覚が敏感なようです。見た目でわかるんですね、舌が肥えてるかとか。知りませんでした。&lt;/p&gt;
&lt;p&gt;もちろん訓練によってもある程度であれば味覚の感覚を成長させることができるようです。他にもタイプによって得意な味や強く感じる味があるそうです。奥が深い。&lt;/p&gt;
&lt;h3&gt;ワインの種類によって適温が異なる&lt;/h3&gt;
&lt;p&gt;保存する際には注意が必要です。個人で楽しむ程度であればワインセラーを用意できませんので、ある程度諦めるしかないです。&lt;/p&gt;
&lt;p&gt;基本的には自分で管理せずにお店に行っていただくのがいいのかなと思いました。家で飲むのも快適でよいですが、お店の美味しい料理と一緒に飲むのがよいと思います。値段は高くなりますが管理も行き届いていると思いますし、オススメなんかも聞くことができると思います。&lt;/p&gt;
&lt;h3&gt;ワインの味によって合う食材がわかる&lt;/h3&gt;
&lt;p&gt;チーズに始まり、肉や魚・野菜・ハーブなどの各食材の相性が紹介されています。
ワインによって合う食材合わない食材があるのはなんとなくわかります。チーズなんか種類も豊富ですし相性ピッタリ、食べたくなってきました。&lt;/p&gt;
&lt;h3&gt;大きく分けて9つの種類&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;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&gt;おわりに&lt;/h2&gt;
&lt;p&gt;美味しいワインやそれに合う食べ物を自分で選べるようになったらとても素敵ですね。
自分で飲むときもそうですが、誰かに進めることなんかもできたらかっこいいです。&lt;/p&gt;
&lt;p&gt;個人で楽しむには情報が多くて大変ですが、しっかり理解できたらよりワインを楽しむことができそうです。
知識があればより美味しくワインが楽しめると思います。じっくり時間をかけて読みたい本でした。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「ソフトウェアファースト」新しいITの文化づくり]]></title><description><![CDATA[ソフトウェアファーストという戦略についての本です。 ITエンジニアであれば十分に知っていることかもしれませんが、そうでない人にとって学びが多いと思います。
すでに知っている人にとっても、今時の開発や事業のフローや実例がわかりますので得られるものは多いです。 IT…]]></description><link>https://honmushi.com/2019/11/20/soft-first/</link><guid isPermaLink="false">https://honmushi.com/2019/11/20/soft-first/</guid><pubDate>Wed, 20 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ソフトウェアファーストという戦略についての本です。&lt;/p&gt;
&lt;p&gt;ITエンジニアであれば十分に知っていることかもしれませんが、そうでない人にとって学びが多いと思います。
すでに知っている人にとっても、今時の開発や事業のフローや実例がわかりますので得られるものは多いです。&lt;/p&gt;
&lt;p&gt;IT関連の専門用語についても図解とともに説明が載っているため、詳しくない人でも理解しながら読み進められます。 ITを利用するサービスやシステムを立ち上げるための文化・組織づくりの参考に成るのと思います。&lt;/p&gt;
&lt;p&gt;以下、参考になった点をメモとして書き残しています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4822289915/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4822289915&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=cb36073d1ae605282f405b5ef5e94d78&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4822289915&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4822289915&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&gt;ソフトウェアファーストとは&lt;/h2&gt;
&lt;p&gt;ソフトウェア活用を軸として、事業やプロダクト開発を進めいていくことです。
ソフトウェアが全てというわけではなく、あくまで一つの手段。
ソフトウェアの持つ特長を理解して、手段として事業に活用していくことが求められます。&lt;/p&gt;
&lt;h3&gt;ざっくり言うと&lt;/h3&gt;
&lt;p&gt;ソフトウェアの持つ特長を理解して、それを事業に活かせる人材を育てること。
それを活かせる組織であり、作っては壊す考え方を受け入れること。&lt;/p&gt;
&lt;h2&gt;課題&lt;/h2&gt;
&lt;h3&gt;昔は良かったのだが、今は日本は取り残されているのではないか。&lt;/h3&gt;
&lt;p&gt;ビジネスモデルの変化や製造プロセスの大幅な変化に対応できませんでした。
考え方が固定的だったり画一的なため、ユーザーが本当に欲しいモノを作れていないことが原因のようです。&lt;/p&gt;
&lt;p&gt;例えば、サービスをプラットフォーム化する、またはハードウェアと連携してリアルにより近いサービスを提供することが勝ち筋として考えられます。&lt;/p&gt;
&lt;h2&gt;どうすればいいのか&lt;/h2&gt;
&lt;p&gt;デジタルトランスフォーメーション すなわちDX。ITを手段として捉え、新たな価値を生み出すことが目標です。&lt;/p&gt;
&lt;p&gt;各ポジションによって取るべき行動は異なるが、ITによる小さな可能性でもわかりやすく表現していくことが大切に感じました。
「言ってみたけども組織が変わらなかった」ではなく、実際にどれくらい便利なのか小さな発見でも実装して見せてみるべきです。「ソフトウェアの魅力を伝える」ことが必要です。&lt;/p&gt;
&lt;p&gt;運用・改善のパートも初めから想定して計画できるようにしましょう。ソフトウェアの特性を活かすためにも、ないがしろにして進めてはいけません。
完成したから提供して終わりではなく、公開後もユーザーの意図やフィードバックを汲み取り、ユーザーが本当に求めていたものを提供できるように取り組んでいくべきです。&lt;/p&gt;
&lt;p&gt;ITは手段の一つであり、他にも方法はきっとあります。それらが必要になる場合もあるので、広い視野で捉えるようにしましょう。
ときには組織の変革も必要で、文化ごと変わる必要があるかもしれません。できれば経営者やマネージャーが先頭に立って進められると良いです。&lt;/p&gt;
&lt;h2&gt;その結果&lt;/h2&gt;
&lt;p&gt;大きく会社やチームの文化が変わるかもしれません。そのような変化に対しても、寛容・積極的に取り組めるように成ることが重要だと思いました。
これまでに築いてきた価値に縛られることなく、ユーザーとのやり取りの中で本当に求められているものを取り出し、サービスやプロダクトに反映させていく柔軟さを用意しましょう。&lt;/p&gt;
&lt;p&gt;個人の努力ではなく、経営や文化と言った大きな集団の中でそれらが培われていくことが、これからの時代で活躍する秘訣のようです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;経営する上での評価の参考や、個人のエンジニアのキャリアについての考察などもあり、マネージャーも現場も誰が見ても学びがある内容でした。&lt;/p&gt;
&lt;p&gt;ソフトウェアファーストな文化のためには、個人の取り組みだけでなく企業の経営からの取り組みによる変革も必要なことがよくわかりました。
さまざまな開発プロセスやフォーメーション、知識の説明・図解もあり、あまりITに詳しくない人にもわかりやすい内容でした。&lt;/p&gt;
&lt;p&gt;ITにガッツリ携わっている人向けと言うより、これからITに関する取り組みを始める人であったり、経営や文化づくりが必要なポジションの人に読んでもらうといいと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[カメラを持って出掛けたい「写真が上手くなる100のルール テクニック編」]]></title><description><![CDATA[写真を取るテクニックに関する本です。私も趣味で散歩したときなどにカメラで写真を取ります。
全然いい写真が取れないので参考にしようと思い、図書館にて借りました。 初心者でもわかりやすいように単語の説明も載っており、カメラの基本機能もわかりやすく紹介されています。 10…]]></description><link>https://honmushi.com/2019/11/19/photography-100-rules/</link><guid isPermaLink="false">https://honmushi.com/2019/11/19/photography-100-rules/</guid><pubDate>Tue, 19 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4056115346/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4056115346&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ae3d7e9b84aea271d9896382effdedac&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4056115346&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4056115346&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&gt;基本撮影モード&lt;/h2&gt;
&lt;p&gt;以下カメラの説明書にも十分に書いてあるものですが、わかりやすいので引用しています。
絞りとシャーッター速度がそれぞれ設定されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;P プログラムオート&lt;br&gt;
絞りとシャッター速度が自動&lt;/li&gt;
&lt;li&gt;A 絞り優先&lt;br&gt;
絞りが任意、前後のボケとかを利用したいときに使うと良い。Avと表示されているものもある。&lt;/li&gt;
&lt;li&gt;S シャッター速度優先&lt;br&gt;
シャッター速度が任意。素早い動きをトリたいとか、意図的なブレが欲しい時とか。Tvと表示されるものもある。&lt;/li&gt;
&lt;li&gt;M マニュアル露出&lt;br&gt;
両方任意。こだわった撮影に適しており、構図やアングルを変えても設定がそのままなので、露出を一定に保つことができる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ボケ表現&lt;/h2&gt;
&lt;p&gt;ボケの大きさは、絞り値、焦点距離、被写体と背景の位置、被写体までの距離によって決まります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;絞り値&lt;br&gt;
絞りを開けるほどボケが大きくなる、F値を小さくするほど&lt;/li&gt;
&lt;li&gt;焦点距離&lt;br&gt;
望遠にするほど大きく、広角にするほど小さくなる &lt;/li&gt;
&lt;li&gt;背景の位置&lt;br&gt;
背景から遠いほど大きくなる&lt;/li&gt;
&lt;li&gt;被写体との距離&lt;br&gt;
被写体に近いほど大きくなる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;露出と光線&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;順光&lt;br&gt;
色がくっきり&lt;/li&gt;
&lt;li&gt;逆光&lt;br&gt;
シルエットに近くなる&lt;/li&gt;
&lt;li&gt;斜光&lt;br&gt;
陰影が強く出て立体感&lt;/li&gt;
&lt;li&gt;フラット光&lt;br&gt;
柔らかな階調になる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&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;h2&gt;ISO感度&lt;/h2&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;100個のルールを全部憶えるのは難しいので、一つずつ試して見るのが良いかなと思います。
実際にいい写真が撮れるか頑張ってみようと思います。ちょっと季節的に外出したくない気温ですが、頑張ります。どうしても寒かったら家の中で被写体を探します。&lt;/p&gt;
&lt;p&gt;今回読んだ本はテクニック編となっていますが、通常編と構図編があるようです。そちらも合わせて読んでみたいと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[SEによる図書館の話 「システムエンジニアは司書のパートナー」]]></title><description><![CDATA[図書システムの開発に携わっていたSEによるWEBエッセイをまとめた本です。
図書館に関するさまざまな話が載っており、開発に携わっていたSE…]]></description><link>https://honmushi.com/2019/11/15/shisyo-se/</link><guid isPermaLink="false">https://honmushi.com/2019/11/15/shisyo-se/</guid><pubDate>Fri, 15 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;図書システムの開発に携わっていたSEによるWEBエッセイをまとめた本です。
図書館に関するさまざまな話が載っており、開発に携わっていたSEならではの目線で描かれる話がとてもおもしろいです。&lt;/p&gt;
&lt;p&gt;地方の図書館の実例や取り組みも紹介されており、一度訪れてみたいなあと思うものも多かったです。&lt;/p&gt;
&lt;p&gt;SEのみの話でなく司書の苦労であったり工夫なども書かれており、図書館に対する考え方が変わるかも。身近にある図書館のいろんなサービスや仕組みに目が向くようになるかもしれません。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4907126190/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4907126190&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=85bc35e5a4dd3292ff126f76c77ead38&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4907126190&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4907126190&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&gt;さまざまな図書館の取り組み&lt;/h2&gt;
&lt;p&gt;さまざまな図書館を見た上での取り組みの内容や特長など、訪れたからこそわかる情報が山盛りでした。
現代ならではの新しい取り組みもあれば、地域とのつながりによる優しい取り組みもあり、図書館によって特長が異なるものばかりです。取り組みをでの困ったことや、仕組みなどの説明も簡単にされており、似たようなサービスを始めるのであれば参考になるかもしれません。&lt;/p&gt;
&lt;p&gt;図書館の現場で発生するクレームの対応であったり、システムを作る上での困難など、図書館を利用していても発見できないような内容に興味を持ちました。SEとしてシステムを作ることでそれらを手助けできたり、より便利な図書館を作っていくのはとても楽しそうです。&lt;/p&gt;
&lt;p&gt;電子書籍が発達してきたり、ネット上でのやり取りが中心になってきていることもあり、図書館のあり方も変わっているのだと思います。IT技術を持ったSEの関わり方は今まで以上に深く関わってきそうに思います。&lt;/p&gt;
&lt;p&gt;SEからみた図書館のこれからの可能性も書かれており、アイデアの参考になりそうなものも多かったです。
WEBエッセイは結構昔のものもありますので、書かれた当時から時がたって更に進化した内容もあると思います。
現在行われている図書館の新しいサービスなどを調べてみようかなと思いました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;図書館のシステムを作るSEってとても面白そうだなあと思いました。学校の図書館のシステムなんかもつくったりするんでしょうか。興味が尽きないです。
私は図書館が好きなのでということはもちろんですが、これからいろいろな進化をしていきそうな図書業界において、さまざまな取り組みが行われるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;地域とのつながりはもちろん、ITを使った取り組みもあったりして、いろいろなアイデアが生まれそうです。そんな図書館を支えるような仕事は面白そうだなあと興味を持ちました。&lt;/p&gt;
&lt;p&gt;家の近所に図書館があります。また図書館にいきたくなりました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「Atomic Design」 で学ぶコンポーネントUI 設計]]></title><description><![CDATA[UI設計の「Atomic Design」という手法について書かれた本です。
Atomic Designとはざっくり言うと、小さいコンポーネントを組み合わせて大きなコンポーネントを作っていくという特長を持つ、設計フレームワークの一つです。一番小さな部分をAtomic…]]></description><link>https://honmushi.com/2019/11/14/atomic-design/</link><guid isPermaLink="false">https://honmushi.com/2019/11/14/atomic-design/</guid><pubDate>Thu, 14 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;UI設計の「Atomic Design」という手法について書かれた本です。
Atomic Designとはざっくり言うと、小さいコンポーネントを組み合わせて大きなコンポーネントを作っていくという特長を持つ、設計フレームワークの一つです。一番小さな部分をAtomic すなわち原子として設計していきます。&lt;/p&gt;
&lt;p&gt;アプリのUI開発において、学べる点が多そうだと思い手に取りました。&lt;/p&gt;
&lt;p&gt;Reactをつかった実装例も掲載されています。結構厚めの本で内容は盛り沢山。UI設計に関わる人のみでなく、エンジニア・デザイナーにも学びが多い本でした。&lt;/p&gt;
&lt;p&gt;実装例が豊富に掲載されており関連内容としてテストに関する内容も多く、とても参考になりました。
ReactをはじめとするWebプラットフォームでの開発はもちろん、ReactNativeによるアプリの開発にも大きく活かせると感じています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/477419705X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=477419705X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6bdf9cbde787d1dab2c8a360c1106941&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=477419705X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=477419705X&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&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;UI設計の現状&lt;/li&gt;
&lt;li&gt;コンポーネントベースのUI開発&lt;/li&gt;
&lt;li&gt;Atomic DesignによるUI設計&lt;/li&gt;
&lt;li&gt;コンポーネント設計の実践&lt;/li&gt;
&lt;li&gt;UIコンポーネントのテスト&lt;/li&gt;
&lt;li&gt;現場におけるコンポネント・ベース開発のポイント&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;UI設計の現状&lt;/h2&gt;
&lt;h3&gt;直感的なUI&lt;/h3&gt;
&lt;p&gt;直感的なUIについてわかりやすい定義がありました。&lt;br&gt;
「UI is Communication」の著者 Everett N.McKayの定義だそうです。以下引用します。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;UIの見た目から与えられる情報が適切なこと&lt;/li&gt;
&lt;li&gt;UIが期待通りに動作すること&lt;/li&gt;
&lt;li&gt;UIが効率的で最小の工数で目的を達成できること&lt;/li&gt;
&lt;li&gt;UIが適切なタイミングでフィードバックを返すこと&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;/blockquote&gt;
&lt;h3&gt;css命名規則 BEM&lt;/h3&gt;
&lt;p&gt;Block、Element、Modifierの3つのパターンのクラスセレクターで実装するcssの設計手法。
クラスセレクターを読むだけで要素の役割を把握できます。
それでもCSSの言語的な仕様によって制限され、なかなかコンポーネント化による再利用には難易度があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blockは 独立しており再利用が可能なコンポーネント &lt;code&gt;.menu&lt;/code&gt;や&lt;code&gt;.search-form&lt;/code&gt;など&lt;/li&gt;
&lt;li&gt;Elementはコンポーネントを構成するパーツ &lt;code&gt;.men__link&lt;/code&gt;や&lt;code&gt;.search-form__input&lt;/code&gt;など &lt;/li&gt;
&lt;li&gt;Modifierは変化を加えることを示す &lt;code&gt;.search-form__input_disable&lt;/code&gt;など &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;コンポーネントベースのUI開発&lt;/h2&gt;
&lt;h3&gt;メリット&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;/ul&gt;
&lt;h3&gt;コンポーネントは部品、つまり単語&lt;/h3&gt;
&lt;p&gt;UIとは会話です。コンポーネントは部品であり、会話における単語と通じる部分があります。
複数の単語の組み合わせで会話ができるのと同じです。&lt;/p&gt;
&lt;p&gt;同じ単語を異なる意図・用途で使ったり、それと似たような感覚です。&lt;/p&gt;
&lt;h3&gt;コンポーネントの4つの特長&lt;/h3&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;strong&gt;単一責任の原則&lt;/strong&gt;と&lt;strong&gt;関心の分離&lt;/strong&gt;が重要だそうです。&lt;/p&gt;
&lt;h2&gt;Atomic DesignによるUI設計&lt;/h2&gt;
&lt;h3&gt;Atomic Designの粒度&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Atoms 原子&lt;/li&gt;
&lt;li&gt;Molecules 分子&lt;/li&gt;
&lt;li&gt;Organisms 有機体&lt;/li&gt;
&lt;li&gt;Templates テンプレート&lt;/li&gt;
&lt;li&gt;Pages ページ &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;うち、上記3つは化学の用語を用いており、それらは開発者が認識する用語になっているそうです。
それ以外の2つはクライアントなどにも共有すべきものという切り分けになっています。&lt;/p&gt;
&lt;h3&gt;Molecules か Organisms か&lt;/h3&gt;
&lt;p&gt;粒度によってはややこしいものもある印象です。&lt;/p&gt;
&lt;p&gt;独立して存在できるものは「Organisms」、他のコンポーネントの機能を助けるものは「Molecules」に該当します。&lt;br&gt;
動作を行うもののみはMoleculesで、その対象となる情報も含めたものがOrganismsといったところですかね。&lt;/p&gt;
&lt;h2&gt;コンポーネント設計の実践&lt;/h2&gt;
&lt;p&gt;本の例では、node,yarn,Storybookを使って実装をしています。StorybookやReactの使い方も丁寧に書かれているので、npmを利用したことがあるくらいの経験があれば十分に試すことができる優しさです。&lt;/p&gt;
&lt;p&gt;ここからサンプルのソースコードが多くなります。私が思っていたよりもガッツリなので、開発をやっている人にはとてもおもしろい内容です。
逆に設計が中心でプログラミングの役割を持たない人には、すこし重たいかもしれません。
できれば目を通しておくと役に立つと思います。&lt;/p&gt;
&lt;h2&gt;UIコンポーネントのテスト&lt;/h2&gt;
&lt;p&gt;テストのやり方や実装方法が書かれています。テストフレームワークJestを使ったテストのやり方が書かれており、大いに役に立ちました。&lt;/p&gt;
&lt;p&gt;コンポーネント設計はテストや管理もやりやすくなります。そのあたりの恩恵をもれなく手に入れるために、ぜひこのあたりは開発者に読んでほしいと思いました。&lt;/p&gt;
&lt;h3&gt;ユーザービリティテスト&lt;/h3&gt;
&lt;p&gt;Lighthouseの利用に加えて&lt;strong&gt;aXe&lt;/strong&gt;の利用がおすすめ。&lt;br&gt;
Chromeの拡張機能として公開されています。developer toolからチェックができ、報告の内容・修正方法もわかりやすく便利でした。対象箇所のハイライト・修正案の提示など詳細な報告が得られます。&lt;/p&gt;
&lt;p&gt;私は試しませんでしたが、Jestで実行させることもできるようです。そうなると逐次実行する必要なくためとても便利です。時間があったら試してみます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Chrome拡張機能 aXe のリンク&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;現場におけるコンポネント・ベース開発のポイント&lt;/h2&gt;
&lt;p&gt;実際の現場で起こりがちな、トップダウン対ボトムアップの構図についての考察がされています。
コンポーネント設計にはそれぞれの協力が必要となり、開発フローの変更も求められることがわかります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;概念的な話より実装的な内容が多かったように思います。サンプルコードもたくさんありますし、デザイナーよりもエンジニアよりの内容だったのか私は興味をもてました。&lt;/p&gt;
&lt;p&gt;テスト関連の情報も豊富に載っています。今まで取り組んでいなかった方もテストをしっかり行うという目的で、Atomic Designは良い手法なのではないかと感じます。&lt;/p&gt;
&lt;p&gt;ソースコードがあまりにも無法状態なため、どこからテストをかけばいいかわからないというプロジェクトも多いと思います。そういったものも解決できるように、予めテストや運用・保守も視野に入れて設計の段階から取り組むことが大切です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[欧文フォントを漫画で学ぶ「となりのヘルベチカ」]]></title><description><![CDATA[欧文フォントが擬人化した世界で、フォントについて学べるマンガになっています。
フォントの基礎知識と言うよりは、取り上げられているフォントの由来や特徴などを知ることが出来ます。 全般…]]></description><link>https://honmushi.com/2019/11/07/helvetica/</link><guid isPermaLink="false">https://honmushi.com/2019/11/07/helvetica/</guid><pubDate>Thu, 07 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4845918218/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4845918218&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=44b9416bd9f99b0c74a6f95fd7f75b90&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4845918218&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4845918218&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&gt;取り上げられているフォント&lt;/h2&gt;
&lt;p&gt;設定は主人公が書体の学校？のような世界に入ってしまう物語になっています。
以下のようにクラス分け・棟分けされているらしく、それぞれ仲良く暮らしているようです。&lt;/p&gt;
&lt;h3&gt;サンセリフ体&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Helvetica ヘルベチカ&lt;/li&gt;
&lt;li&gt;Futura フーツラ&lt;/li&gt;
&lt;li&gt;Gill Sans ギル・サン&lt;/li&gt;
&lt;li&gt;Arial アリアル&lt;/li&gt;
&lt;li&gt;Franklin Gothic フランクリン・ゴシック&lt;/li&gt;
&lt;li&gt;Impact インパクト&lt;/li&gt;
&lt;li&gt;Frutiger フルティガー&lt;/li&gt;
&lt;li&gt;DIN ディン&lt;/li&gt;
&lt;li&gt;Optima オプティマ&lt;/li&gt;
&lt;li&gt;Gotham ゴッサム&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ローマン体&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Caslon キャズロン&lt;/li&gt;
&lt;li&gt;Garamond ギャラモン&lt;/li&gt;
&lt;li&gt;Times New Roman タイムズ・ニュー・ローマン&lt;/li&gt;
&lt;li&gt;Bodoni ボドニ&lt;/li&gt;
&lt;li&gt;Didot ディド&lt;/li&gt;
&lt;li&gt;Clarendon クラレンドン&lt;/li&gt;
&lt;li&gt;Rockwell ロックウェル&lt;/li&gt;
&lt;li&gt;Centaul セントール&lt;/li&gt;
&lt;li&gt;Jenson ジェンソン&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;その他&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Zapfino ツァッフィーノ&lt;/li&gt;
&lt;li&gt;Mistral ミストラル&lt;/li&gt;
&lt;li&gt;Comic Sans コミック・サン&lt;/li&gt;
&lt;li&gt;Trajan トレイジャン&lt;/li&gt;
&lt;li&gt;Peignot ペイニョ&lt;/li&gt;
&lt;li&gt;Fette Fraktur フェッテ・フラクトゥール&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;フォントに興味がある人もそうでない人も、マンガなので楽しく読めると思います。&lt;/p&gt;
&lt;p&gt;お気に入りのフォントがある人はどのように表現されているか見てみるといいと思います。自分のイメージ通りかどうか確かめてみるとおもしろいです。
お気に入りのフォントが特にない人も、擬人化されたフォントを見てお気に入りを探せるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;一読した後は、出てきたフォントをデザインソフトとかで使ってみるとおもしろいですよ。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[よく使うLinuxコマンドのメモ]]></title><description><![CDATA[今回はLinuxのよく使うコマンドをメモとして残します。
簡単なものは覚えているのですが、オプションを忘れて検索することが多いです。検索して使えるので特に問題ないですが、せっかくなら一箇所にまとめておきたいのでこの記事を作ります。  大きくはsed と grep…]]></description><link>https://honmushi.com/2019/11/06/linux-co/</link><guid isPermaLink="false">https://honmushi.com/2019/11/06/linux-co/</guid><pubDate>Wed, 06 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今回はLinuxのよく使うコマンドをメモとして残します。
簡単なものは覚えているのですが、オプションを忘れて検索することが多いです。検索して使えるので特に問題ないですが、せっかくなら一箇所にまとめておきたいのでこの記事を作ります。 &lt;/p&gt;
&lt;p&gt;大きくはsed と grepのことを書き残そうと思ったのですが、思ったよりも書きたいコマンドが多かったです。
一個ずつに分けたほうが見やすいですが、思い出すためのメモなので気にしません。この記事を見れば使い方を思い出せるのが目的です。&lt;/p&gt;
&lt;p&gt;新しいものをやよく使うものが増え次第、ここに追加していくつもりです。&lt;br&gt;
多すぎて見にくいので整理方法も考え中です。検索できるようにすればいいのか。&lt;/p&gt;
&lt;h2&gt;ls&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ls -la&lt;/code&gt;  &lt;/p&gt;
&lt;h3&gt;出力内容&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;li&gt;サイズ&lt;/li&gt;
&lt;li&gt;タイムスタンプ&lt;/li&gt;
&lt;li&gt;ファイル名&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;オプション&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;-t # 更新時間順
-S # ファイルサイズ順
-X # 拡張子でまとめる
-R # 再帰的に表示する、見づらいけど
-m # カンマ区切りで出力&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使うとしたら上記でしょうか。  &lt;/p&gt;
&lt;h2&gt;stat&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;stat 001.txt&lt;/code&gt;&lt;br&gt;
ファイルのステータスや情報を確認します。&lt;/p&gt;
&lt;h3&gt;オプション&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;-f # ファイルシステムの情報を表示
-t # 簡易な表示にする&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;file&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;file 001.txt&lt;/code&gt;&lt;br&gt;
形式を確認。拡張子からではなく中身から判別。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;file -z&lt;/code&gt;&lt;br&gt;
圧縮状態の元の形式を確認できます。&lt;/p&gt;
&lt;h2&gt;mv&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;mv 001.txt bac&lt;/code&gt;&lt;br&gt;
ファイルやディレクトリの移動。名前変更にも使います。&lt;/p&gt;
&lt;h3&gt;オプション&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;-i # 上書きの確認
-n # 上書き出来ない&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;cp&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;cp 001.txt bac&lt;/code&gt;&lt;br&gt;
ファイルやディレクトリをコピーします。&lt;/p&gt;
&lt;h3&gt;オプション&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;-r # 再帰的にコピーできます。
-s # シンボリックリンクを作れます。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;touch&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;touch 001.txt&lt;/code&gt;&lt;br&gt;
タイムスタンプの更新、なければ空のファイルを作成します。&lt;/p&gt;
&lt;h2&gt;tee&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ls | tee 01.txt | less&lt;/code&gt;&lt;br&gt;
標準出力に流しながらファイルに出力できます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls | tee 01.txt 02.txt 03.txt&lt;/code&gt;
複数のファイルに出力したい場合に使えます。&lt;/p&gt;
&lt;h2&gt;rsync&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;rsync -av dev/ backup/&lt;/code&gt;&lt;br&gt;
変更を同期します。
ローカルでもバックアップとかに使えますが、ほとんど使わないと思います。&lt;/p&gt;
&lt;h2&gt;ln&lt;/h2&gt;
&lt;p&gt;ファイルのハードリンクとシンボリックリンクを作ります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ln -s ファイル リンク&lt;/code&gt;でシンボリックリンク&lt;br&gt;
&lt;code&gt;ln ファイル リンク&lt;/code&gt;でハードリンク&lt;/p&gt;
&lt;h2&gt;rm&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;rm 01.txt&lt;/code&gt;&lt;br&gt;
ファイルを削除します。 &lt;/p&gt;
&lt;p&gt;対象ファイル名は&lt;code&gt;*&lt;/code&gt;で副数の任意文字、&lt;code&gt;?&lt;/code&gt;で1文字の任意文字を定義できます。  &lt;/p&gt;
&lt;p&gt;&lt;code&gt;rm -r dir&lt;/code&gt;&lt;br&gt;
ディレクトリを再帰的に削除する場合です。&lt;/p&gt;
&lt;h2&gt;mkdir&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;mkdir dev&lt;/code&gt;&lt;br&gt;
ディレクトリを作成します。&lt;br&gt;
オプションでパーミッションの設定とかも出来ますが、私は作ってから変更します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mkdir -p&lt;/code&gt;にすると親ディレクトリが無い場合も階層ごと作成できて便利です。&lt;/p&gt;
&lt;h2&gt;cd&lt;/h2&gt;
&lt;p&gt;カレントディレクトリを移動&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cd -&lt;/code&gt;
にすると直前のディレクトリに戻ることができる。&lt;/p&gt;
&lt;h3&gt;オプション&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;-P # シンボリックリンクではない物理的な場所に移動&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;tar&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;tar -czf a.tgz 01.txt&lt;/code&gt;&lt;br&gt;
アーカイブを作成、圧縮します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tar -xzf a.tgz&lt;/code&gt;&lt;br&gt;
アーカイブを展開します。&lt;/p&gt;
&lt;p&gt;アーカイブにしたものが&lt;code&gt;.tar&lt;/code&gt;。それを圧縮したものが&lt;code&gt;.tgz&lt;/code&gt;や&lt;code&gt;.tar.gz&lt;/code&gt;になります。&lt;/p&gt;
&lt;h3&gt;オプション&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;-c # 作成
-x # 展開
-z # gzip圧縮
-v # 対象ファイルのリストを表示
-f # アーカイブファイル名を指定&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ssh&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ssh xxx&lt;/code&gt;&lt;br&gt;
sshで接続&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ssh -l user xxx&lt;/code&gt;&lt;br&gt;
&lt;code&gt;ssh user@xxx&lt;/code&gt;&lt;br&gt;
ログイン名を指定して接続&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ssh -l user xxx ls -la &gt; 01.txt&lt;/code&gt;&lt;br&gt;
ログインしてコマンドを実行。結果はローカルのテキストファイルに出力。接続先ではなく接続元ということ。&lt;/p&gt;
&lt;h3&gt;オプション&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;-p # ポートを指定
-l # ユーザー名を指定
-i # 公開鍵を指定&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;alias&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;alias&lt;/code&gt;&lt;br&gt;
定義されているエイリアスを表示します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;alias xxx&lt;/code&gt;&lt;br&gt;
定義されているエイリアスxxxを表示します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;alias xxx=&apos;ls -la&apos;&lt;/code&gt;&lt;br&gt;
エイリアスxxxを作成します。&lt;br&gt;
一時的な定義なので、よく使うものは&lt;code&gt;.bashrc&lt;/code&gt;に定義することでいつでも使えます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;alias -p&lt;/code&gt;&lt;br&gt;
定義されているエイリアスを定義する書式で出力します。&lt;br&gt;
&lt;code&gt;.bashrc&lt;/code&gt;に定義するときや再利用に使います。&lt;/p&gt;
&lt;h2&gt;unalias&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;unalias xxx&lt;/code&gt;&lt;br&gt;
定義されているエイリアスxxxを削除します。&lt;/p&gt;
&lt;h2&gt;whoami&lt;/h2&gt;
&lt;p&gt;自分のユーザー名を表示&lt;/p&gt;
&lt;h2&gt;groups&lt;/h2&gt;
&lt;p&gt;自分が所属しているグループを表示&lt;/p&gt;
&lt;h2&gt;pwd&lt;/h2&gt;
&lt;p&gt;カレントディレクトリを表示&lt;/p&gt;
&lt;h3&gt;オプション&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;-P # シンボリックリンクではない物理的な場所を表示&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;type&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;type xxx&lt;/code&gt;&lt;br&gt;
コマンドの起動先を表示します。&lt;code&gt;which&lt;/code&gt;みたいな感じです。&lt;/p&gt;
&lt;h3&gt;オプション&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;-a # 該当をすべて表示、通常一番上が実行される
-P # PATH内のみ対象にする、whichと同じ
-t # 種別を表示&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;echo&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;echo $LANG&lt;/code&gt;&lt;br&gt;
定義されている変数の中身を出力します。&lt;/p&gt;
&lt;h2&gt;pushd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pushd dir&lt;/code&gt;&lt;br&gt;
カレントディレクトリをディレクトリスタックに追加、さらにカレントディレクトリを移動します。&lt;br&gt;
&lt;code&gt;-n&lt;/code&gt; でスタックへの追加のみにできます。その場合は移動しません。&lt;/p&gt;
&lt;h2&gt;popd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;popd&lt;/code&gt;&lt;br&gt;
ディレクトリスタックから一つ取り出して移動します。&lt;br&gt;
&lt;code&gt;-n&lt;/code&gt; でスタックの削除のみにできます。その場合は移動しません。&lt;/p&gt;
&lt;h2&gt;dirs&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;dirs&lt;/code&gt;&lt;br&gt;
ディレクトリスタックを表示します。&lt;/p&gt;
&lt;h3&gt;オプション&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;-c # 空にする
-p # 行に分けて表示
-v # 番号付きで表示&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;chmod&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;chmod 774 001.txt&lt;/code&gt;&lt;br&gt;
ファイル、ディレクトリのパーミッションの変更。
所有者、グループ、その他の順に設定。数値は以下を足します。
&lt;code&gt;4 # 読みこみ 2 # 書き込み 1 # 実行&lt;/code&gt;&lt;/p&gt;
&lt;h3&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;# chmod ユーザー 追加か解除か アクセス権限 ファイル名
chmod o-x 01.txt # その他ユーザーの実行権限を解除
chmod u+r 01.txt # 所有者の読み取り権限を追加
chmod g+w 01.txt # グループの書き込み権限を追加&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;オプション&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;-v # 実行結果を表示
-R # 再帰的に実行&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;chgrp&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;chgrp group 001.txt&lt;/code&gt;&lt;br&gt;
ファイル、ディレクトリの管理グループを変更します。&lt;/p&gt;
&lt;h3&gt;オプション&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;-v # 実行結果を表示
-R # 再帰的に実行&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;chown&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;chown user 001.txt&lt;/code&gt;&lt;br&gt;
ファイル、ディレクトリの管理者を変更します。&lt;/p&gt;
&lt;h3&gt;オプション&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;-v # 実行結果を表示
-R # 再帰的に実行&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;groupadd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;groupadd group&lt;/code&gt;&lt;br&gt;
グループを作成&lt;/p&gt;
&lt;h2&gt;gpasswd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;gpasswd -a user group&lt;/code&gt;&lt;br&gt;
グループにユーザーを追加&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpasswd -d user group&lt;/code&gt;&lt;br&gt;
グループのユーザーを解除&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpasswd group&lt;/code&gt;&lt;br&gt;
グループのパスワードを設定&lt;/p&gt;
&lt;h2&gt;groupmod&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;groupmod -n newName oldName&lt;/code&gt;&lt;br&gt;
グループ名を変更&lt;/p&gt;
&lt;p&gt;&lt;code&gt;groupmod -g newID oldName&lt;/code&gt;&lt;br&gt;
グループIDを変更&lt;/p&gt;
&lt;h2&gt;groupdel&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;groupdel group&lt;/code&gt;&lt;br&gt;
グループを削除&lt;/p&gt;
&lt;h2&gt;useradd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;useradd user&lt;/code&gt;&lt;br&gt;
ユーザーを作成します。&lt;code&gt;adduser&lt;/code&gt;のほうが便利です。&lt;/p&gt;
&lt;h2&gt;adduser&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;adduser user&lt;/code&gt;&lt;br&gt;
ユーザーを作成します。対話式にパスワードなどの設定が出来ます。&lt;/p&gt;
&lt;h2&gt;usermod&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;usermod user&lt;/code&gt;&lt;br&gt;
ユーザーの情報を変更します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;usermod -l newuser olduser&lt;/code&gt;&lt;br&gt;
ユーザー名を変更します。&lt;/p&gt;
&lt;h3&gt;オプション&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;-L # ユーザーをロック 
-U # アンロック
-l # ログイン名を変更
-p # パスワードを変更
-g # プライマリーグループを変更
-G # セカンダリーグループを変更
-G-a # セカンダリーグループを追加&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;userdel&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;userdel user&lt;/code&gt;&lt;br&gt;
ユーザーを削除&lt;/p&gt;
&lt;p&gt;&lt;code&gt;userdel -r user&lt;/code&gt;&lt;br&gt;
ホームディレクトリも削除&lt;/p&gt;
&lt;h2&gt;ps&lt;/h2&gt;
&lt;p&gt;実行中のプロセスを表示します。&lt;br&gt;
PIDを確認してkillコマンドで終了させるとかですね。&lt;/p&gt;
&lt;h2&gt;kill&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;kill 111&lt;/code&gt;&lt;br&gt;
PID 111を終了&lt;/p&gt;
&lt;h2&gt;tail&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;tail -f 001.log&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ファイルの末尾を表示します。デフォルトは10行です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-n 5&lt;/code&gt; で行数の指定が可能。
&lt;code&gt;-f&lt;/code&gt;でファイルの更新を監視できます。止めるときは&lt;code&gt;&amp;#x3C;C-c&gt;&lt;/code&gt;です。&lt;/p&gt;
&lt;h2&gt;head&lt;/h2&gt;
&lt;p&gt;ファイルの先頭を表示します。tailの逆。&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;head -n 8 001.log&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;cat&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;cat 001.txt
cat 001.txt 002.txt &amp;gt; 0102.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;簡単に内容を確認する際に使います。別のファイルに流したり、結合させるのがもともとの役目の様子です。&lt;/p&gt;
&lt;h3&gt;オプション&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;-n # 行番号
-s # 連続した空行をまとめる&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;他にもプションはあるけど、そんなに使わないです。&lt;/p&gt;
&lt;h2&gt;less&lt;/h2&gt;
&lt;p&gt;パイプでつなげて使うとか。&lt;code&gt;コマンド | less&lt;/code&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;ls -la | less&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;less 01.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;オプション&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;-s # 連続した空行をまとめる
-S # 折り返さない
-N # 行番号を表示
-~ # 末尾以降の~チルダを表示しない&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使うとすれば上記か。&lt;/p&gt;
&lt;h3&gt;キー操作&lt;/h3&gt;
&lt;p&gt;操作はjkとGとg。&lt;br&gt;
dで半画面進む、uで半画面戻る。&lt;br&gt;
/で検索、nとNで一致候補を前後、qで終了。  &lt;/p&gt;
&lt;h2&gt;find&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;find ./ -name &apos;01.txt&apos;&lt;/code&gt;&lt;br&gt;
ファイル名で検索します。&lt;/p&gt;
&lt;h3&gt;オプション&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;-type d # ディレクトリが対象
-type f # ファイルが対象 
-type l # シンボリックリンクが対象&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;grep&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;grep xxx 01.txt&lt;/code&gt;&lt;br&gt;
ファイル中の文字列 xxx を検索&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls -la | grep xxx&lt;/code&gt;&lt;br&gt;
コマンドの出力から文字列 xxx を検索&lt;/p&gt;
&lt;h3&gt;オプション&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;-G # 正規表現を使用
-r # 再帰的に検索
-5 # 前後5行を表示
-n # 行番号
-l # ファイル名のみ表示&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;xargs&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;xxx | xargs yyy&lt;/code&gt;&lt;br&gt;
xxxの実行結果を受け取り、yyyの引数にして渡します。ややこしいけどとても便利。
単体でなく、使えるパターンだけ覚えておけば良い。&lt;/p&gt;
&lt;p&gt;xxxの実行結果が末尾に「01.txt 02.txt 03.txt」 とつけられるイメージ&lt;/p&gt;
&lt;h2&gt;sed&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;cat ./01.txt | sed -e &amp;#39;s/xxx/XXX/g&amp;#39; &amp;gt; ./02.txt
sed -e &amp;#39;s/xxx/XXX/g&amp;#39; ./01.txt &amp;gt; ./02.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;オプション-iをつけないと出力するだけ、付けるとファイルを上書きします。
-eはコマンドを指定するもので省略できます。複数の操作を行う場合、その度に必要。&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;grep &amp;#39;emotion/core&amp;#39; -rl src/ | xargs sed -i -e &amp;#39;s/emotion\/core/emotion\/styled/&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;よく使うのは置換のとき。emotion/coreをemotion/styledに置換しました。&lt;/p&gt;
&lt;h3&gt;オプション&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;-i # 結果を標準出力しないで上書き
-i.bak # 上書き前を拡張子をつけてバックアップ

-e # 処理内容を指定
-e &amp;#39;s/xxx/XXX/g&amp;#39; # 正規表現で置換
-e &amp;#39;30,31d&amp;#39; # 30,31行を以外を出力

-n # 標準の出力がなくなる -pのコマンドのみ出力
-n -e &amp;#39;30p&amp;#39; # 30行を出力&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;tree&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;tree&lt;/code&gt;&lt;br&gt;
ツリー形式でファイルディレクトリを表示します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tree -f -i&lt;/code&gt;&lt;br&gt;
ツリー構造にしないでパスを表示します。ファイルリスト作るときに便利です。&lt;/p&gt;
&lt;h3&gt;オプション&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;-a # 隠しファイルも対象
-d # ディレクトリのみ
-L 2 # 2階層まで
-i # ディレクトリも出力
-f # 表示をツリー状にしない&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;apt&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;apt install xxx&lt;/code&gt;&lt;br&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;list # パッケージ一覧を表示
search # パッケージを検索
show # 特定のパッケージの情報を表示
install # 指定パッケージをインストール
remove # 指定パッケージを削除
autoremove # 使われていないパッケージを削除
update # 利用可能パッケージの一覧を更新
upgrade # パッケージを更新
full-upgrade # パッケージを更新、不要なものは削除&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;curl&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;curl url &gt; 01.txt&lt;/code&gt;&lt;br&gt;
urlにHTTPリクエストを行います。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl -X POST url -d &apos;name=user&amp;#x26;data=text&apos; &gt; 01.txt&lt;/code&gt;&lt;br&gt;
urlにHTTP POST リクエストを行います。こうなると何かしらのアプリケーション使ったほうがいいです。ブラウザ拡張とか。&lt;/p&gt;
&lt;h2&gt;xdg-open&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;xdg-open .&lt;/code&gt;
現在のディレクトリをデフォルとアプリケーションで開く。
ファイル名を指定すればデフォルトアプリケーションでファイルを開きます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;基本的にコンソールでの作業がほとんどなのでこれらを身につけられるととても快適になります。
サーバエンジニアの最初の一歩でしょうか。&lt;/p&gt;
&lt;p&gt;また新しいものや気になるものがあったら追記していく予定です。&lt;br&gt;
awkに関する書籍を読んでいるので、それについても後日まとめる予定です。&lt;/p&gt;
&lt;p&gt;UbuntuのLTSも18.04がリリースされたので頃合い見計らってアップデートしたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Figmaでショートカット一覧を表示する]]></title><description><![CDATA[私はデザインやプロトタイプ、簡単な画像素材の作成にFigma…]]></description><link>https://honmushi.com/2019/10/28/figma-shortcut/</link><guid isPermaLink="false">https://honmushi.com/2019/10/28/figma-shortcut/</guid><pubDate>Mon, 28 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;私はデザインやプロトタイプ、簡単な画像素材の作成にFigmaを利用しています。
無料で使えますし、便利な機能も揃っているのでほとんど不自由なく使えます。&lt;/p&gt;
&lt;p&gt;キーボード・ショートカットを探していたときに、ショートカットコマンドのチートシートを表示する方法を見つけたのでご紹介します。&lt;code&gt;Ctrl + Shift + ?&lt;/code&gt;です。&lt;/p&gt;
&lt;p&gt;ショートカットの解説や紹介記事等ググればいっぱい出てきます。しかし、このチートシートで探したほうが簡単でわかりやすいです。こっちのほうがおすすめです。&lt;/p&gt;
&lt;h2&gt;ショートカットコマンド一覧を表示&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Ctrl + Shift + ?&lt;/code&gt;を押すと、画面下部にチートシートが表示されます。&lt;/p&gt;
&lt;h3&gt;チートシートの表示&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2fc061fbb238429e29df0951536717b2/99272/image1.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 72.2972972972973%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAWJAAAFiQFtaJ36AAACdElEQVQ4y3WSa08aQRSG99c0kEWQBQSktEnTj/1t3r5qYtqfYFJ1SeQiIIKwIBZr6qWwQEwAwQXbNEXn7TnDYsC2kzw5lznzzjmzq2zvHuPTThwft7ewubmFjY0NrKyszLG2tkasyr319XWZW12dxDbCtpYCCEzX09MTbm9vUalUUC6XJcViETc3N7i4uJA+50olA7VaDYPBAP1+nxG2tZROf4j+6CdGv8bo9ge4vPyGVCqFZDIp7cHBgbygUCggHo/LHNtcLgfTNNFoNBhhWxIcDNGzHvDjt8DdwML19TUymQwODw+RTqelcLVald2xzzkWzefzaLVaaDabjLB9GlnQyGIy9sNohKurK3nopaBhlJCmXDablfmTk8K/BVlK2ILD4VCOwF0+Qxd8r9dRrX2FUamifHombfXLOZok0vpLkMRmBfld2u32HHwwc1xAkkZNcddksxSbrTZ1+XLkFx2y4MwosgOTOMoX6BlSk+cgwVz+P4KPj49gWPT+/h51Go9FZ6k3TKSPckgk+CsnkaCvnKG4btJlZoNrhF076XC6xuMxOp0Oer3eHJ1uD5WzcxTp/ysaFWlPz2ro9O5ov8s1wq61lFKpBMYwDDmOruuIxWJkif29CeTv7utEDDu7Oj7v6TKe1OmMsH1LcTqdYBwOh7Tqghuq6oLqeAU1/B6uNx/gVp1YoLxLVeHTvPB4PHC7FwjKuVzQNE14vV72LYWdWfz+ALyaBg8VB1+/RSj6DksBPwKBJXgWFxGNRhEOh2UcDAZZDJFIRCwvL8Pn81nKIhVN4Zv9fj4ckOKh4BICPg1+ijnH+6FQ6HmfxfjctEPyrT+2RF1lezNhMAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;画面下部にチートシートが表示されます&quot;
        title=&quot;画面下部にチートシートが表示されます&quot;
        src=&quot;/static/2fc061fbb238429e29df0951536717b2/fcda8/image1.png&quot;
        srcset=&quot;/static/2fc061fbb238429e29df0951536717b2/12f09/image1.png 148w,
/static/2fc061fbb238429e29df0951536717b2/e4a3f/image1.png 295w,
/static/2fc061fbb238429e29df0951536717b2/fcda8/image1.png 590w,
/static/2fc061fbb238429e29df0951536717b2/99272/image1.png 669w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;複数タブを切り替えて確認できるチートシートが表示されます。&lt;/p&gt;
&lt;h3&gt;利用したものは青く表示されています&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 535px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/721b79cd94ecc68cb4739b188e6c9cb1/b5245/image2.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 21.62162162162162%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAWJAAAFiQFtaJ36AAAAo0lEQVQY03VOORICMQzbB0EOx7l2MhtKOh5Ayf/fICIPCxWFZyzJkrVJUiRVxBgRg0fsE/H+hCysi08pmZZzRq0VImK8fjzkSik21LYoCh8CnPfw1wtkv6E8XnbcWrMj55wZj+MwzJ0Tlo/BYwz03u35pprQlkjA4FYzRhUL3PfdmjGQ4XPOb0PyZyDDfg2XkWEEPKCgudh+8n61506NPPG/eQNcpYB3+hmfoQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;該当のチートシートの部分&quot;
        title=&quot;該当のチートシートの部分&quot;
        src=&quot;/static/721b79cd94ecc68cb4739b188e6c9cb1/b5245/image2.png&quot;
        srcset=&quot;/static/721b79cd94ecc68cb4739b188e6c9cb1/12f09/image2.png 148w,
/static/721b79cd94ecc68cb4739b188e6c9cb1/e4a3f/image2.png 295w,
/static/721b79cd94ecc68cb4739b188e6c9cb1/b5245/image2.png 535w&quot;
        sizes=&quot;(max-width: 535px) 100vw, 535px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;利用したことのあるコマンドは青くなっており、ゲーム感覚でチートシートを憶えることができる仕組みです。
ざっと見てみた所、知らないショートカットがたくさんあり、私が利用したことのあるコマンドは全体の10分の1くらいでした。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;チートシートを使えば画面に表示しながら利用できるためとても便利です。一通り使ってみるも良し、普段から表示しっぱなしにするのも良しです。私も頑張って覚えていこうと思います。
とりあえず&lt;code&gt;Ctrl + Shift + ?&lt;/code&gt;でチートシートを表示できることを覚えておけば、一々調べなくて良いです。&lt;/p&gt;
&lt;p&gt;ちなみに、私はLinuxを使っているためFigmaのデスクトップ版が利用できません。ずっとブラウザ版を利用しています。&lt;/p&gt;
&lt;p&gt;フォントはGoogleフォントが利用できるので便利ですが、自分でインストールしたフォント等を利用するのがちょっと難しいです。まあ、それ以外は大体同じように利用できている？っぽいのでそれほど困っていません。&lt;/p&gt;
&lt;p&gt;Linux向けのデスクトップアプリ版Figmaが利用できるようになってほしいとちょっと思っています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「Expo JavaScript Style Guide」を読んでみる]]></title><description><![CDATA[Expoのコーディングスタイルガイドを読んで簡単に訳してみました。   Expoの開発へ参加する場合のルールやコーディングガイドが公開されています。 他のサービスでもこういったものは公開されていることがあると思います。 Contributing to Expo Expo…]]></description><link>https://honmushi.com/2019/10/25/expo-style-guide/</link><guid isPermaLink="false">https://honmushi.com/2019/10/25/expo-style-guide/</guid><pubDate>Fri, 25 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Expoのコーディングスタイルガイドを読んで簡単に訳してみました。  &lt;/p&gt;
&lt;p&gt;Expoの開発へ参加する場合のルールやコーディングガイドが公開されています。 他のサービスでもこういったものは公開されていることがあると思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/expo/expo/blob/master/CONTRIBUTING.md&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Contributing to Expo&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://github.com/expo/expo/blob/master/guides/Expo%20JavaScript%20Style%20Guide.md&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo JavaScript Style Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;個人開発でやっていると独自ルールになってしまい、後からソースを見たときに混乱するような状態になっていることがあります。&lt;/p&gt;
&lt;p&gt;よく利用するサービスやシステムのルールに従うことで綺麗なソースを保つことも出来ますし、今時の現場のルールに触れることもできて良いのではないかと考えました。&lt;/p&gt;
&lt;p&gt;私がよく利用していて、かつ開発も活発なExpoのjsコーディングルールを読んで訳していこうと思います。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&quot;https://github.com/expo/expo/blob/master/guides/Expo%20JavaScript%20Style%20Guide.md&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo JavaScript Style Guide&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Modern JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ESLint and Prettier&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Editor Integration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Formatting&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;Comments&lt;/li&gt;
&lt;li&gt;Imports&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Naming&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Classes, functions, and variables&lt;/li&gt;
&lt;li&gt;Async functions&lt;/li&gt;
&lt;li&gt;Private variables&lt;/li&gt;
&lt;li&gt;Boolean names&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Examples&lt;/li&gt;
&lt;li&gt;BabelO&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Modern JavaScript&lt;/h2&gt;
&lt;p&gt;jsはなるべく新しい、ES20xx仕様の安定バージョンを使用する。&lt;br&gt;
「leading edge」すなわち先端の近く、「bleeding edge」最先端ではない。&lt;/p&gt;
&lt;h2&gt;ESLint and Prettier&lt;/h2&gt;
&lt;h3&gt;Editor Integration&lt;/h3&gt;
&lt;p&gt;ESLintのプラグインを紹介&lt;br&gt;
Vimの場合は以下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vim: Syntastic:&lt;br&gt;
&lt;a href=&quot;https://github.com/vim-syntastic/syntastic/blob/master/syntax_checkers/javascript/eslint.vim&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/vim-syntastic/syntastic/blob/master/syntax_checkers/javascript/eslint.vim&lt;/a&gt;&lt;br&gt;
Configure it to use the nearest available copy of ESLint by searching up node_modules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Syntasticのドキュメントを読み込んでいくとtypescript用のチェッカーは削除されているらしい。&lt;br&gt;
&lt;a href=&quot;https://github.com/Quramy/tsuquyomi/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;tsuquyomi&lt;/a&gt;というプラグインを使ってくださいって書かれてました。&lt;/p&gt;
&lt;h3&gt;ESLIntとvim-syntasticをvimで使えるようにする&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ESLintのインストール&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 -g eslint&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vimで使えるようにする  &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;NeoBundle &amp;#39;vim-syntastic/syntastic&amp;#39;
&amp;quot; デフォルトの設定
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
let g:syntastic_javascript_checkers = [&amp;#39;eslint&amp;#39;]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Formatting&lt;/h2&gt;
&lt;h3&gt;Prettier&lt;/h3&gt;
&lt;p&gt;コードのフォーマットにはPrettierを使用。&lt;br&gt;
&lt;a href=&quot;https://github.com/prettier/prettier&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Prettier&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;設定ファイルはexpoのリポジトリにあります。&lt;br&gt;
&lt;a href=&quot;https://github.com/expo/expo/blob/master/.prettierrc&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;.prettier&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ファイル単位でPrettierを無効にする設定ファイルもexpoのリポジトリにあります。&lt;br&gt;
&lt;a href=&quot;https://github.com/expo/expo/blob/master/.prettierignore&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;.prettierignore&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Prettierをvimで使えるようにする&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Prettier のインストール&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 -g prettier&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vimで使えるようにする&lt;br&gt;
vimrcに以下を追加、&lt;code&gt;&amp;#x3C;leader&gt;p&lt;/code&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;NeoBundle &amp;#39;prettier/vim-prettier&amp;#39;
&amp;quot; expoのリポジトリにあるprettierrcを参照
let g:prettier#config#print_width = 100
let g:prettier#config#single_quote = &amp;#39;true&amp;#39;
let g:prettier#config#jsx_bracket_same_line = &amp;#39;true&amp;#39;
let g:prettier#config#bracket_spacing = &amp;#39;true&amp;#39;
let g:prettier#config#trailing_comma = &amp;#39;es5&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Comments&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;/**
 * Gets the latest version of Android that&amp;#39;s been released. This is a version
 * string like 7.1 instead of the code name Nougat.
*/
function getLatestAndroidVersion() {
  // Keep this logic in sync with Google&amp;#39;s versioning scheme
  return maxBy(getAndroidVersions(/* includePrereleases */ false), linearizeSemver);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;コメントアウトされたコードを削除してからGitHubにプッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Imports&lt;/h3&gt;
&lt;p&gt;importとrequireを次の順序でグループ化、ソートする。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;importが先、requierが後&lt;/li&gt;
&lt;li&gt;Unassignedが先、assignedが後&lt;/li&gt;
&lt;li&gt;nodejsビルトインが先、エイリアスのある内部モジュールが次、相対モジュールが後 &lt;/li&gt;
&lt;/ol&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 &amp;#39;side-effect&amp;#39;;

import invariant from &amp;#39;invariant&amp;#39;;
import Expo, { Audio } from &amp;#39;expo&amp;#39;;
import path from &amp;#39;path&amp;#39;;

import HomeScreen from &amp;#39;../screens/HomeScreen&amp;#39;;
import Colors from &amp;#39;../style/Colors&amp;#39;;
import calculateViewport from &amp;#39;../style/calculateViewport&amp;#39;;
import LoginButton &amp;#39;./LoginButton&amp;#39;;

const assert = require(&amp;#39;assert&amp;#39;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;インポートされたモジュールの名前でソート、割り当てられた名前ではなく元の名前。&lt;br&gt;
ASCII順なのでA-Za-zの順にする。&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 Z from &amp;#39;Z&amp;#39;;
import b from &amp;#39;x&amp;#39;;
import a from &amp;#39;y&amp;#39;;
import p from &amp;#39;@scope/package&amp;#39;;&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;import a, * as b, { c } from &amp;#39;module&amp;#39;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Naming&lt;/h2&gt;
&lt;p&gt;検索しやすい名前を心がける&lt;/p&gt;
&lt;h3&gt;Classes, functions, and variables&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;すべての名前にキャメルケースを使用。&lt;/li&gt;
&lt;li&gt;クラスとコンストラクター関数は大文字初め、他は小文字で始める&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Async functions&lt;/h3&gt;
&lt;p&gt;非同期で完了する場合は最後に「Async」を付ける&lt;br&gt;
関数自体に「async」が設定されていなくても、同じような動作をする場合は「Async」を最後に付ける&lt;br&gt;
同期作業を行うが、それでもpromiseを返すことがある場合は「Async」を省略してよい&lt;/p&gt;
&lt;h3&gt;Private variables&lt;/h3&gt;
&lt;p&gt;プライベートに使う変数はアンダースコアを付ける。&lt;/p&gt;
&lt;h3&gt;Boolean names&lt;/h3&gt;
&lt;p&gt;bool変数には「is」とか動詞を先頭につけて命名する。&lt;code&gt;deleted&lt;/code&gt;ではなく&lt;code&gt;isDeleted&lt;/code&gt;にする。&lt;/p&gt;
&lt;h2&gt;Examples&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/expo/expo/blob/master/guides/Expo%20JavaScript%20Style%20Guide.md&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo JavaScript Style Guide&lt;/a&gt;を参照&lt;/p&gt;
&lt;h2&gt;Babel&lt;/h2&gt;
&lt;p&gt;Babelをつかって新しいjsの機能を有効にしている。対象はfinalized version of the JavaScript standard.&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;これからjs書くときはこのルールにしたがってプログラミングをしていこうと思います。&lt;br&gt;
ESLint と Prettierをvimで使えるように設定しました。
ルールを意識しながらプログラムを書くことはもちろんですが、これらの便利なツールでチェック・整形していくことができます。そう考えるとそれほど面倒な作業もなさそうです。&lt;/p&gt;
&lt;p&gt;あとは、すでに書いてあるものもルールに従ってリファクタリングしよう、そう思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[TypeScriptを学ぶ ジェネリックとクラス関連]]></title><description><![CDATA[TypeScriptを学ぶ 型定義の基礎の続きです。 クラス関連の機能が主な内容です。 TypeScriptの基礎的なことを学ぶので、忘れないように残していきます。
目標としては自分が作っているReactNative製のアプリや、Gatsby…]]></description><link>https://honmushi.com/2019/10/24/typescript-master-02/</link><guid isPermaLink="false">https://honmushi.com/2019/10/24/typescript-master-02/</guid><pubDate>Thu, 24 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/2019/10/21/typescript-master-01/&quot;&gt;TypeScriptを学ぶ 型定義の基礎&lt;/a&gt;の続きです。 クラス関連の機能が主な内容です。&lt;/p&gt;
&lt;p&gt;TypeScriptの基礎的なことを学ぶので、忘れないように残していきます。
目標としては自分が作っているReactNative製のアプリや、Gatsbyを利用しているこのブログに活かしていく予定です。&lt;/p&gt;
&lt;h2&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;li&gt;名前空間の利用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ジェネリック&lt;/h2&gt;
&lt;p&gt;プログラミングの際には型が決められない、関数実行時にはデータ型が決まっている。
anyでもいいけども、例えば「引数と戻り値の型は一致してほしい」となどの場合に動的に任意のデータ型を指定する仕組み&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;// &amp;lt;T&amp;gt;の形式で指定、T以外の任意の文字でも良い
function getData&amp;lt;T&amp;gt;( value : T ) : T {
    処理
}

// 関数呼び出しの際にデータ型numberで指定
data1 = getData&amp;lt;number&amp;gt;(1);
// データ型booleanで利用
data2 = getData&amp;lt;boolean&amp;gt;(true);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&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;// class クラス名&amp;lt;T&amp;gt; {
//     プロパティ名 : T ;
//     メソッド名 ( 引数名:T ): T {
//         処理
//     }
// }

// let 変数名 = new クラス名&amp;lt;データ型&amp;gt;();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;複数定義して交差型も可能&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;function getData&amp;lt;T,U&amp;gt;( value : T , param : U ) : T &amp;amp; U {
    処理
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;非同期処理のジェネリック&lt;/h3&gt;
&lt;p&gt;Promiseを返す非同期処理の返り値にも型を定義可能。
resolveで返される戻り値のデータ型を定義する。&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;// function 非同期関数名 (引数) {
//     return new Promise&amp;lt;データ型&amp;gt;((resolve,reject) =&amp;gt; {
//         非同期実行文
//         if ( 条件 ) {
//            resolve(戻り値);
//         }else{
//            reject(エラー);
//         }
//     });
// }

// async function Exec(){
//     let data1 = await 非同期関数名(引数1)
//     let data2 = await 非同期関数名(引数2)
// }&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;// インターフェイスの定義
// interface インターフェイス名{
//    プロパティ:データ型;
//    メソッド(引数:引数のデータ型): 戻り値のデータ型;
// }

// インターフェイスの実装
// let 変数名 : インターフェイス名;
// function 関数名(引数: インターフェイス名) {};

// クラスで実装
// class クラス名 implemets インターフェイス名 {
//     プロパティ名:データ型;
//
//     メソッド(引数:引数のデータ型):戻り値のデータ型 {
//         処理
//     }
// }

// 複数のインターフェイスを実装
// class クラス implemets インターフェイス1,インターフェイス2 {}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&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;// interface インターフェイス1 extends インターフェイス2{
//     プロパティ: データ型;
// }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;クラス&lt;/h2&gt;
&lt;h3&gt;abstract クラス&lt;/h3&gt;
&lt;p&gt;abstructが指定されたクラスは継承可能だが、そのままnewでオブジェクトを作成できません。
メソッドのみ実装していて、プロパティは継承先で実装する時などにりようできます。&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;abstruct class Name {

}

// 以下はエラー
let data = new Name();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;メソッドのオーバーライド&lt;/h3&gt;
&lt;p&gt;jsとは異なり引数などのチェックが入ります。継承したメソッドをオーバーライドする場合は、元のメソッドと同じ名前、引数、戻り値のデータ型が一致しないとオーバーライドできない。&lt;/p&gt;
&lt;h3&gt;保護 public privete protected&lt;/h3&gt;
&lt;p&gt;他の言語では利用できる機能です。  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;publicがクラスの外でも利用が可能  &lt;/li&gt;
&lt;li&gt;privateとprotected はクラスの外から利用不可  &lt;/li&gt;
&lt;li&gt;protectedは継承したクラスで利用可能  &lt;/li&gt;
&lt;li&gt;privateは継承したクラスでも利用不可  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;読み取り専用readonly&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;// public readonly プロパティ: データ型;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;名前空間の利用&lt;/h2&gt;
&lt;p&gt;export などで使われているもの。別の名前空間に分けることで同じ名前のクラスを定義できる。
名前空間外から利用するためにexportの指定が必要。&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;// namespace 名前空間 {
//     export class クラス名{}
// }

// namespace 名前空間2 {
//     export class クラス名{}
// }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;名前空間を別ファイルから利用する&lt;/h3&gt;
&lt;p&gt;名前空間の前にexportを指定します。&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;// export namespace 名前空間 {
//    export class クラス名 {}
// }&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;// import * as 参照名 from &amp;quot;./ファイル&amp;quot;

// import {名前空間} from &amp;quot;./ファイル&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;クラス関連の便利な機能を学びました。他の言語では普通に使えたりするものが多く、これらが利用できるように成るTypeScriptはとても便利なように思います。 ほかの言語からの移行などもやりやすくなりそうです。&lt;/p&gt;
&lt;p&gt;基本的にはビルド時にチェックされエラーが出るというものです。エラーを無視してデプロイすれば、保護を無視して実行できるようなものが多いので注意が必要です。&lt;/p&gt;
&lt;p&gt;他にも機能があるので、少しずつ読み進めていこうと思います。&lt;br&gt;
&lt;a href=&quot;https://www.typescriptlang.org/docs/handbook/basic-types.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.typescriptlang.org/&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native Paper 「Colors」の色見本]]></title><description><![CDATA[個人的にReactNativeでのアプリ開発によく使っている「React Native Paper」のメモです。 React Native Paper とのことですので、Googleのマテリアルデザインガイドラインに則ったUI…]]></description><link>https://honmushi.com/2019/10/24/react-native-paper-colors/</link><guid isPermaLink="false">https://honmushi.com/2019/10/24/react-native-paper-colors/</guid><pubDate>Thu, 24 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;個人的にReactNativeでのアプリ開発によく使っている「React Native Paper」のメモです。&lt;br&gt;
&lt;a href=&quot;https://callstack.github.io/react-native-paper/index.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;React Native Paper&lt;/a&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;Paper is a collection of customizable and production-ready components for React Native, 
following Google’s Material Design guidelines.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とのことですので、Googleのマテリアルデザインガイドラインに則ったUIが簡単に利用できます。
クロスプラットフォーム対応しており、OSによる機能の差異をかなり吸収してくれます。&lt;/p&gt;
&lt;p&gt;ReactNativeがそもそもクロスプラットフォームに対応しているのですが、まだ思ったよりもOSごとに処理や設定を分ける必要があります。
その辺まるごと抑えてくれるので便利です。&lt;/p&gt;
&lt;p&gt;TextInputやButton、Modalなんかも実装されていますし、DialogとかMenu、Headerなんかも簡単に実装できます。&lt;br&gt;
今回は使う際に調べるのがめんどくさいと思っていた、Colorsの色見本を作成しました。&lt;/p&gt;
&lt;h2&gt;定義&lt;/h2&gt;
&lt;p&gt;Colorsは定数として定義されている色を取得します。自分で定数として記述すればいいのですが、簡単に使えてるのでたまに利用します。&lt;/p&gt;
&lt;p&gt;githubのソースコードに定義の内容が書かれています。&lt;br&gt;
&lt;a href=&quot;https://github.com/callstack/react-native-paper/blob/master/src/styles/colors.tsx&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;github&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ただ色の見本がないので、どんな色なのかがここではわかりませんでした。&lt;/p&gt;
&lt;h3&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;export const red50 = &amp;#39;#ffebee&amp;#39;;  
export const red100 = &amp;#39;#ffcdd2&amp;#39;;  
export const red200 = &amp;#39;#ef9a9a&amp;#39;;  
export const red50 = &amp;#39;#ffebee&amp;#39;;  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ですので、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;import {Colors} from &amp;#39;react-native-papre&amp;#39;;
~~~
    &amp;lt;Text style={{color:Colors.red300}}&amp;gt;赤色のテキスト&amp;lt;/Text&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;色見本&lt;/h2&gt;
&lt;p&gt;githubの定義から色のサンプルを作りました。&lt;/p&gt;
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffebee&quot;&gt;red50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffcdd2&quot;&gt;red100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ef9a9a&quot;&gt;red200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e57373&quot;&gt;red300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ef5350&quot;&gt;red400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f44336&quot;&gt;red500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e53935&quot;&gt;red600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #d32f2f&quot;&gt;red700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #c62828&quot;&gt;red800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b71c1c&quot;&gt;red900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff8a80&quot;&gt;redA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff5252&quot;&gt;redA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff1744&quot;&gt;redA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #d50000&quot;&gt;redA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fce4ec&quot;&gt;pink50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f8bbd0&quot;&gt;pink100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f48fb1&quot;&gt;pink200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f06292&quot;&gt;pink300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ec407a&quot;&gt;pink400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e91e63&quot;&gt;pink500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #d81b60&quot;&gt;pink600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #c2185b&quot;&gt;pink700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ad1457&quot;&gt;pink800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #880e4f&quot;&gt;pink900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff80ab&quot;&gt;pinkA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff4081&quot;&gt;pinkA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f50057&quot;&gt;pinkA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #c51162&quot;&gt;pinkA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f3e5f5&quot;&gt;purple50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e1bee7&quot;&gt;purple100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ce93d8&quot;&gt;purple200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ba68c8&quot;&gt;purple300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ab47bc&quot;&gt;purple400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #9c27b0&quot;&gt;purple500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #8e24aa&quot;&gt;purple600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #7b1fa2&quot;&gt;purple700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #6a1b9a&quot;&gt;purple800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #4a148c&quot;&gt;purple900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ea80fc&quot;&gt;purpleA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e040fb&quot;&gt;purpleA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #d500f9&quot;&gt;purpleA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #aa00ff&quot;&gt;purpleA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ede7f6&quot;&gt;deepPurple50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #d1c4e9&quot;&gt;deepPurple100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b39ddb&quot;&gt;deepPurple200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #9575cd&quot;&gt;deepPurple300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #7e57c2&quot;&gt;deepPurple400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #673ab7&quot;&gt;deepPurple500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #5e35b1&quot;&gt;deepPurple600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #512da8&quot;&gt;deepPurple700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #4527a0&quot;&gt;deepPurple800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #311b92&quot;&gt;deepPurple900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b388ff&quot;&gt;deepPurpleA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #7c4dff&quot;&gt;deepPurpleA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #651fff&quot;&gt;deepPurpleA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #6200ea&quot;&gt;deepPurpleA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e8eaf6&quot;&gt;indigo50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #c5cae9&quot;&gt;indigo100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #9fa8da&quot;&gt;indigo200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #7986cb&quot;&gt;indigo300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #5c6bc0&quot;&gt;indigo400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #3f51b5&quot;&gt;indigo500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #3949ab&quot;&gt;indigo600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #303f9f&quot;&gt;indigo700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #283593&quot;&gt;indigo800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #1a237e&quot;&gt;indigo900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #8c9eff&quot;&gt;indigoA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #536dfe&quot;&gt;indigoA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #3d5afe&quot;&gt;indigoA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #304ffe&quot;&gt;indigoA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e3f2fd&quot;&gt;blue50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #bbdefb&quot;&gt;blue100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #90caf9&quot;&gt;blue200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #64b5f6&quot;&gt;blue300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #42a5f5&quot;&gt;blue400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #2196f3&quot;&gt;blue500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #1e88e5&quot;&gt;blue600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #1976d2&quot;&gt;blue700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #1565c0&quot;&gt;blue800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #0d47a1&quot;&gt;blue900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #82b1ff&quot;&gt;blueA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #448aff&quot;&gt;blueA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #2979ff&quot;&gt;blueA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #2962ff&quot;&gt;blueA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e1f5fe&quot;&gt;lightBlue50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b3e5fc&quot;&gt;lightBlue100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #81d4fa&quot;&gt;lightBlue200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #4fc3f7&quot;&gt;lightBlue300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #29b6f6&quot;&gt;lightBlue400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #03a9f4&quot;&gt;lightBlue500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #039be5&quot;&gt;lightBlue600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #0288d1&quot;&gt;lightBlue700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #0277bd&quot;&gt;lightBlue800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #01579b&quot;&gt;lightBlue900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #80d8ff&quot;&gt;lightBlueA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #40c4ff&quot;&gt;lightBlueA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00b0ff&quot;&gt;lightBlueA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #0091ea&quot;&gt;lightBlueA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e0f7fa&quot;&gt;cyan50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b2ebf2&quot;&gt;cyan100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #80deea&quot;&gt;cyan200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #4dd0e1&quot;&gt;cyan300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #26c6da&quot;&gt;cyan400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00bcd4&quot;&gt;cyan500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00acc1&quot;&gt;cyan600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #0097a7&quot;&gt;cyan700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00838f&quot;&gt;cyan800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #006064&quot;&gt;cyan900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #84ffff&quot;&gt;cyanA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #18ffff&quot;&gt;cyanA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00e5ff&quot;&gt;cyanA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00b8d4&quot;&gt;cyanA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e0f2f1&quot;&gt;teal50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b2dfdb&quot;&gt;teal100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #80cbc4&quot;&gt;teal200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #4db6ac&quot;&gt;teal300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #26a69a&quot;&gt;teal400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #009688&quot;&gt;teal500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00897b&quot;&gt;teal600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00796b&quot;&gt;teal700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00695c&quot;&gt;teal800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #004d40&quot;&gt;teal900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #a7ffeb&quot;&gt;tealA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #64ffda&quot;&gt;tealA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #1de9b6&quot;&gt;tealA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00bfa5&quot;&gt;tealA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e8f5e9&quot;&gt;green50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #c8e6c9&quot;&gt;green100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #a5d6a7&quot;&gt;green200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #81c784&quot;&gt;green300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #66bb6a&quot;&gt;green400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #4caf50&quot;&gt;green500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #43a047&quot;&gt;green600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #388e3c&quot;&gt;green700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #2e7d32&quot;&gt;green800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #1b5e20&quot;&gt;green900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b9f6ca&quot;&gt;greenA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #69f0ae&quot;&gt;greenA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00e676&quot;&gt;greenA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #00c853&quot;&gt;greenA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f1f8e9&quot;&gt;lightGreen50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #dcedc8&quot;&gt;lightGreen100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #c5e1a5&quot;&gt;lightGreen200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #aed581&quot;&gt;lightGreen300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #9ccc65&quot;&gt;lightGreen400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #8bc34a&quot;&gt;lightGreen500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #7cb342&quot;&gt;lightGreen600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #689f38&quot;&gt;lightGreen700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #558b2f&quot;&gt;lightGreen800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #33691e&quot;&gt;lightGreen900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ccff90&quot;&gt;lightGreenA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b2ff59&quot;&gt;lightGreenA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #76ff03&quot;&gt;lightGreenA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #64dd17&quot;&gt;lightGreenA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f9fbe7&quot;&gt;lime50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f0f4c3&quot;&gt;lime100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e6ee9c&quot;&gt;lime200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #dce775&quot;&gt;lime300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #d4e157&quot;&gt;lime400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #cddc39&quot;&gt;lime500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #c0ca33&quot;&gt;lime600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #afb42b&quot;&gt;lime700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #9e9d24&quot;&gt;lime800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #827717&quot;&gt;lime900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f4ff81&quot;&gt;limeA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #eeff41&quot;&gt;limeA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #c6ff00&quot;&gt;limeA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #aeea00&quot;&gt;limeA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fffde7&quot;&gt;yellow50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fff9c4&quot;&gt;yellow100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fff59d&quot;&gt;yellow200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fff176&quot;&gt;yellow300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffee58&quot;&gt;yellow400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffeb3b&quot;&gt;yellow500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fdd835&quot;&gt;yellow600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fbc02d&quot;&gt;yellow700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f9a825&quot;&gt;yellow800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f57f17&quot;&gt;yellow900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffff8d&quot;&gt;yellowA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffff00&quot;&gt;yellowA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffea00&quot;&gt;yellowA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffd600&quot;&gt;yellowA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fff8e1&quot;&gt;amber50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffecb3&quot;&gt;amber100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffe082&quot;&gt;amber200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffd54f&quot;&gt;amber300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffca28&quot;&gt;amber400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffc107&quot;&gt;amber500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffb300&quot;&gt;amber600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffa000&quot;&gt;amber700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff8f00&quot;&gt;amber800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff6f00&quot;&gt;amber900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffe57f&quot;&gt;amberA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffd740&quot;&gt;amberA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffc400&quot;&gt;amberA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffab00&quot;&gt;amberA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fff3e0&quot;&gt;orange50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffe0b2&quot;&gt;orange100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffcc80&quot;&gt;orange200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffb74d&quot;&gt;orange300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffa726&quot;&gt;orange400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff9800&quot;&gt;orange500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fb8c00&quot;&gt;orange600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f57c00&quot;&gt;orange700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ef6c00&quot;&gt;orange800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e65100&quot;&gt;orange900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffd180&quot;&gt;orangeA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffab40&quot;&gt;orangeA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff9100&quot;&gt;orangeA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff6d00&quot;&gt;orangeA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fbe9e7&quot;&gt;deepOrange50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffccbc&quot;&gt;deepOrange100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffab91&quot;&gt;deepOrange200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff8a65&quot;&gt;deepOrange300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff7043&quot;&gt;deepOrange400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff5722&quot;&gt;deepOrange500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f4511e&quot;&gt;deepOrange600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e64a19&quot;&gt;deepOrange700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #d84315&quot;&gt;deepOrange800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #bf360c&quot;&gt;deepOrange900&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff9e80&quot;&gt;deepOrangeA100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff6e40&quot;&gt;deepOrangeA200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ff3d00&quot;&gt;deepOrangeA400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #dd2c00&quot;&gt;deepOrangeA700&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #efebe9&quot;&gt;brown50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #d7ccc8&quot;&gt;brown100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #bcaaa4&quot;&gt;brown200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #a1887f&quot;&gt;brown300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #8d6e63&quot;&gt;brown400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #795548&quot;&gt;brown500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #6d4c41&quot;&gt;brown600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #5d4037&quot;&gt;brown700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #4e342e&quot;&gt;brown800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #3e2723&quot;&gt;brown900&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #eceff1&quot;&gt;blueGrey50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #cfd8dc&quot;&gt;blueGrey100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #b0bec5&quot;&gt;blueGrey200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #90a4ae&quot;&gt;blueGrey300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #78909c&quot;&gt;blueGrey400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #607d8b&quot;&gt;blueGrey500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #546e7a&quot;&gt;blueGrey600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #455a64&quot;&gt;blueGrey700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #37474f&quot;&gt;blueGrey800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #263238&quot;&gt;blueGrey900&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #fafafa&quot;&gt;grey50&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #f5f5f5&quot;&gt;grey100&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #eeeeee&quot;&gt;grey200&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #e0e0e0&quot;&gt;grey300&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #bdbdbd&quot;&gt;grey400&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #9e9e9e&quot;&gt;grey500&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #757575&quot;&gt;grey600&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #616161&quot;&gt;grey700&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #424242&quot;&gt;grey800&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #212121&quot;&gt;grey900&lt;/div&gt;  
  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #000000&quot;&gt;black&lt;/div&gt;  
&lt;div style=&quot;padding-left:10px;border-left:20px solid #ffffff&quot;&gt;white&lt;/div&gt;  
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;他にも便利なコンポーネントはがたくさん用意されているので、そちらも機会があれば紹介します。
React Navigationと合わせて利用すればダークモードなどテーマ対応もできる様子です。
その部分はこれからアプリへの実装を進めようと考えています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Vimでよく使う正規表現]]></title><description><![CDATA[vimでよく使う正規表現の書き方のメモです。 正規表現は便利ですが覚えるのは難しいです。特にVimは他のアプリと異なるエスケープのルールがあるので混乱しがちです。
\v…]]></description><link>https://honmushi.com/2019/10/24/vim-reg/</link><guid isPermaLink="false">https://honmushi.com/2019/10/24/vim-reg/</guid><pubDate>Thu, 24 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;vimでよく使う正規表現の書き方のメモです。&lt;/p&gt;
&lt;p&gt;正規表現は便利ですが覚えるのは難しいです。特にVimは他のアプリと異なるエスケープのルールがあるので混乱しがちです。
&lt;code&gt;\v&lt;/code&gt;でモード指定することも出来ますが、私はデフォルトで使うのが好みです。&lt;/p&gt;
&lt;p&gt;あくまでも自分用メモです。参考になるようでしたら真似してみてください。&lt;br&gt;
新しい正規表現のテクニックや便利なパターンを見つけたら追記していくつもりです。&lt;/p&gt;
&lt;h2&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;li&gt;検索文字列のエスケープ&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;正規表現を用いた置換&lt;/h2&gt;
&lt;h3&gt;基本の使い方&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;:s/hoge/huga/
:s/hoge/huga/g
:%s/hoge/huga/
:10,20s/hoge/huga/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;一つずつ確認する&lt;/h3&gt;
&lt;p&gt;末尾に&lt;code&gt;c&lt;/code&gt;を付けると対象を確認しながら置換できる。&lt;br&gt;
&lt;code&gt;y&lt;/code&gt;で置換、&lt;code&gt;n&lt;/code&gt;で次の候補へ。&lt;code&gt;q&lt;/code&gt;で終了、&lt;code&gt;a&lt;/code&gt;は以降全部置換、&lt;code&gt;l&lt;/code&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;:%s/hoge/huga/gc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;後方参照として置換に利用&lt;/h3&gt;
&lt;p&gt;エスケープが必要な文字にちょっと注意。
&lt;code&gt;\1&lt;/code&gt;,&lt;code&gt;\2&lt;/code&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;:s/^hoge\(.\+\)$/huga\1/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;&amp;#x26;&lt;/code&gt;はマッチ全体&lt;/p&gt;
&lt;h3&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;/hoge
:%s//huga/g&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;C-r&gt;レジスタ&lt;/code&gt;を使って入力してもいいと思います。&lt;/p&gt;
&lt;h2&gt;エスケープが必要なもの&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;\+
\?
\{1,3}
\&amp;lt;the\&amp;gt;
\( \)
\(aaa\|bbb\)
\%( \)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最後の&lt;code&gt;%&lt;/code&gt;付けるのは後方参照しないようにするため。その結果、処理が早かったりする。後方参照は多分9個までなのでそこにも影響。&lt;/p&gt;
&lt;h3&gt;特殊な文字&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;\s 空白文字
\d [0-9]
\x [0-9A-Fa-f]
\o [0-7]
\w [0-9A-Za-z_]
\h [A-Za-z_]
\a [A-Za-z]
\l [a-z]
\u [A-Z]
大文字にすると逆になり、それ以外にマッチする
\_sにすると改行を含む文字にマッチする

\e Esc
\t Tab
\n 改行
\r CR
\b BS&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;修飾子 オプション&lt;/h2&gt;
&lt;h3&gt;大文字小文字の厳密化&lt;/h3&gt;
&lt;p&gt;大文字小文字を厳格に区別するためには&lt;code&gt;\C&lt;/code&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;:%s/\CHoge/Huga/g&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;モード&lt;/h3&gt;
&lt;p&gt;4つのモードがある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;magic &lt;/li&gt;
&lt;li&gt;nomagic&lt;/li&gt;
&lt;li&gt;very magic&lt;/li&gt;
&lt;li&gt;very nomagic &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;\v&lt;/code&gt;を付けることで、very magic モードとなり、他と同様な文法で書くことができるという認識です。&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;:s/\v^hoge(.+)$/huga\1/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;検索文字列のエスケープ&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;\&lt;/code&gt;や&lt;code&gt;/&lt;/code&gt;を初めとして、文字列として使うにはエスケープしないといけない文字があります。&lt;/p&gt;
&lt;p&gt;escapeスクリプトを使って便利に変換する方法が以下です。&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. 対象のURLをレジスタuにヤンク
2. / で検索プロンプトを表示
3. &amp;lt;C-r&amp;gt;=でExpressionレジスタのプロンプトを表示
4. =escape(@u,\/)を入力してリターン&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;モードを変更すれば他のアプリケーションと同様な文法で書くことも出来ますし、設定でそれをデフォルトにすることもできます。&lt;/p&gt;
&lt;p&gt;私は好みでデフォルトのVimルールをなるべく使っています。
複雑な正規表現書くときは&lt;code&gt;\v&lt;/code&gt;使ったほうがスッキリできるので良いと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[App Storeの審査でアプリの公開を却下された件 -テスト広告編-]]></title><description><![CDATA[昨日
App Store…]]></description><link>https://honmushi.com/2019/10/23/app-store-test-ad/</link><guid isPermaLink="false">https://honmushi.com/2019/10/23/app-store-test-ad/</guid><pubDate>Wed, 23 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;昨日
&lt;a href=&quot;/2019/10/21/app-store-screen-shot/&quot;&gt;App Storeの審査でアプリの公開を却下された件 -スクリーンショット編-&lt;/a&gt;
という記事をアップしましたが、実は他にも似たような却下を受けた件があります。今回はその内容です。&lt;/p&gt;
&lt;p&gt;結論、スクリーンショットにテスト用の広告が写っていると却下されます。修正はもちろん、その部分を削除する、隠すなどすればOKです。&lt;/p&gt;
&lt;h2&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;li&gt;その後&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;アプリを審査に出す&lt;/h2&gt;
&lt;p&gt;今回はすでに公開済みのアプリのアップデートを行いました。&lt;/p&gt;
&lt;p&gt;すでに公開済みのアプリのアップデートの場合はApp Storeの動きが早く、レビューを依頼したその日のうちにステータスが「レビュー中」になる印象です。&lt;/p&gt;
&lt;p&gt;翌日には結果が帰ってくるようなイメージを持っています。&lt;/p&gt;
&lt;h2&gt;却下される&lt;/h2&gt;
&lt;p&gt;朝にレビュー依頼を行い、夕方には却下の連絡がありました。&lt;br&gt;
スクリーンショットにテスト確認用の広告が表示されていることが却下の理由でした。&lt;/p&gt;
&lt;h3&gt;Guideline 2.5.10 - Performance - Software Requirements&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;We noticed that your app or its screenshots include test advertisements. Apps or metadata items that include features that are for test or demonstration purposes are not appropriate for the App Store.

Next Steps

To resolve this issue, please revise your app to complete, remove, or fully configure any partially implemented features. Please ensure your screenshots do not include any images of demo, test, or other incomplete content.&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;h2&gt;その後&lt;/h2&gt;
&lt;p&gt;その日のうちに審査中・販売中とステータスがすすみ、無事にアップデートを公開することができました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;今回のように簡単な内容であれば修正するのは簡単です。AppStoreのレビューはちょっと厳し目ですが、却下された理由などを細かく指摘してくれるので親切だと私は思ってます。&lt;/p&gt;
&lt;h3&gt;アプリの紹介&lt;/h3&gt;
&lt;p&gt;今回アップデートしたアプリです。昔に作ったメモアプリです。
メモごとにタイトルとテーマを設定することができます。どことなくコーヒーをイメージした色合いになってます。コーヒー色がお好きな方はぜひダウンロードしてみてください。&lt;br&gt;
&lt;a href=&quot;/lp/coffeememo/&quot;&gt;メモ帳アプリ「coffee memo」をリリースしました&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[App Storeの審査でアプリの公開を却下された件 -スクリーンショット編-]]></title><description><![CDATA[しばらく期間が空いていましたが、いくつかスマホアプリを作成してストアに公開しました。 App Storeの方もなんとなく勝手がわかってきました。しかし、またアプリの申請が却下されたのでその時のことを記録しておきます。 結論、スクリーンショットにAndroid…]]></description><link>https://honmushi.com/2019/10/21/app-store-screen-shot/</link><guid isPermaLink="false">https://honmushi.com/2019/10/21/app-store-screen-shot/</guid><pubDate>Mon, 21 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;しばらく期間が空いていましたが、いくつかスマホアプリを作成してストアに公開しました。&lt;/p&gt;
&lt;p&gt;App Storeの方もなんとなく勝手がわかってきました。しかし、またアプリの申請が却下されたのでその時のことを記録しておきます。&lt;/p&gt;
&lt;p&gt;結論、スクリーンショットにAndroidの画面要素、ステータスバーなどが入っていると却下されるということです。
iOSの端末でスクリーンショットを取り直せばOKです。&lt;/p&gt;
&lt;p&gt;以下に詳細を記載しています。&lt;/p&gt;
&lt;h2&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;li&gt;再審査&lt;/li&gt;
&lt;li&gt;その後&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;アプリを審査に出す&lt;/h2&gt;
&lt;p&gt;アプリを作成したので審査を依頼しました。10/18 金曜日です。
今までにいくつかアプリを公開しています、これが6つ目のアプリくらいでしょうか。
以前よりも次のステップに進むのが早くなった気がしました。&lt;/p&gt;
&lt;h2&gt;却下される&lt;/h2&gt;
&lt;p&gt;翌日の10/19 土曜日には却下されたという連絡がメールで届いていました。
内容は以下、スクリーンショットにiOSのものではないステータスバーが含まれているため、と具体的な理由も書かれていました。&lt;/p&gt;
&lt;h3&gt;Guideline 2.3.10 - Performance - Accurate Metadata&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;We noticed that your app or its metadata includes irrelevant third-party platform information. 

Specifically, your app includes non-iOS status bar images in the screenshots.

Referencing third-party platforms in your app or its metadata is not permitted on the App Store unless there is specific interactive functionality.

Next Steps

To resolve this issue, please remove all instances of this information from your app and its metadata, including the app description, promotional text, What&amp;#39;s New info, previews, and screenshots.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ちなみに該当するスクリーンショットがどれに当たるのかも添付されていました。わかりやすい指摘でありがたいです。&lt;/p&gt;
&lt;h2&gt;修正&lt;/h2&gt;
&lt;p&gt;iOS端末でスクリーンショットをちゃんと取り直しました。
調べた情報によると、Androidで取得した画像でもステータスバーを削除すれば審査は通るようです。&lt;/p&gt;
&lt;h2&gt;再審査&lt;/h2&gt;
&lt;p&gt;修正は軽微かつアプリの再ビルドも必要なかったので、その日のうちにストアの情報を修正して再審査を依頼しました。
10/19 土曜日に再審査を依頼です。&lt;/p&gt;
&lt;h2&gt;その後&lt;/h2&gt;
&lt;p&gt;その日のうちに審査中のステータスに変わり、そのまま販売中のステータスになりました。&lt;/p&gt;
&lt;p&gt;朝10時頃に再審査を依頼、12時ごろには審査中になりました。そして12時30には販売中のステータスになりました。
とても快適なスピード感でした。アプリの機能や内容も単純だったためか、あっさりと進んだ印象です。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;App Storeで躓いたので内容を記録しておきました。と言っても簡単なものなのですぐに修正が出来ました。
レビューの内容に具体的なことまで書かれておりかなり親切でした。&lt;/p&gt;
&lt;p&gt;ちゃんとアプリ開発のガイドラインを読み込んで、一回日本語に訳したりしてみようかなと思います。&lt;/p&gt;
&lt;h3&gt;アプリの紹介&lt;/h3&gt;
&lt;p&gt;ちなみに今回公開されたアプリは以下です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;iOS&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;todoカレ&lt;br&gt;
&lt;a href=&quot;https://apps.apple.com/us/app/todo%E3%82%AB%E3%83%AC/id1484035100?l=ja&amp;#x26;ls=1&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://apps.apple.com/us/app/todo%E3%82%AB%E3%83%AC/id1484035100?l=ja&amp;#x26;ls=1&lt;/a&gt;&lt;br&gt;
カレンダーにtodoを登録して管理できます。&lt;br&gt;
重要か緊急かのフラグを付けることが出来ますので安くの管理にご活用ください。&lt;/li&gt;
&lt;li&gt;Foldest note&lt;br&gt;
&lt;a href=&quot;https://apps.apple.com/us/app/foldest-note/id1484035145?l=ja&amp;#x26;ls=1&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://apps.apple.com/us/app/foldest-note/id1484035145?l=ja&amp;#x26;ls=1&lt;/a&gt;&lt;br&gt;
フォルダで監理できるノートアプリです。階層を自由に作れるので目的のノートを簡単に整理できます。&lt;br&gt;
予定日を登録することや、ほかアプリへの共有機能なんかも搭載しています。
従来のメモアプリでは生理が出来ない人におすすめのアプリです。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android&lt;br&gt;
もちろんAndroid版もあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;todoカレ&lt;br&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.todocalendar&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=com.honmushi.todocalendar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Foldest note&lt;br&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.foldestnote&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=com.honmushi.foldestnote&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[TypeScriptを学ぶ 型定義の基礎]]></title><description><![CDATA[ReactNativeでのアプリ開発や、Gyatsbyでブログ作る際に何度か目にしたことのある「TypeScript」です。 最近よく目にしますが、どういった仕様や機能があるのかを把握しきれてないので、一度学んでまとめてみます。 目標としてはReactNative…]]></description><link>https://honmushi.com/2019/10/21/typescript-master-01/</link><guid isPermaLink="false">https://honmushi.com/2019/10/21/typescript-master-01/</guid><pubDate>Mon, 21 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ReactNativeでのアプリ開発や、Gyatsbyでブログ作る際に何度か目にしたことのある「TypeScript」です。&lt;/p&gt;
&lt;p&gt;最近よく目にしますが、どういった仕様や機能があるのかを把握しきれてないので、一度学んでまとめてみます。&lt;br&gt;
目標としてはReactNativeでのアプリ開発、並びにGyatsbyでのブログ構築をjsからTypeScriptに置き換えていくことを考えています。&lt;/p&gt;
&lt;p&gt;とりあえずここではデータ型の指定方法のみまとめてます。続きも学んで行き次第残していく予定です。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TypeScript&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;h2&gt;TypeScript&lt;/h2&gt;
&lt;p&gt;JavaScriptに型を定義できることが大きな特徴。&lt;br&gt;
型を定義してデプロイ前に静的にチェックできることなどが強み。&lt;/p&gt;
&lt;p&gt;大人数での開発なんかではルールを定義することで保守性などに優れた堅牢なシステムが作れると思います。&lt;/p&gt;
&lt;h3&gt;準備とコンパイル&lt;/h3&gt;
&lt;p&gt;npmなどでTypeScriptをインストールすれば利用できます。&lt;/p&gt;
&lt;p&gt;jsとの連携が簡単で、TypeScriptからjsを読み込んで利用することが出来ます。文法も踏襲されたものになっているのですぐに使い始めることが出来ます。&lt;/p&gt;
&lt;p&gt;ちなみに「tsc」というコマンドを実行することで、CUIでTypeScriptからjsにビルド出来ます。
実際の開発では使うことはないと思いますが、仕組みの理解ために試してみると良さそうです。&lt;/p&gt;
&lt;h2&gt;型を定義する&lt;/h2&gt;
&lt;h3&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;// TypeScriptは 「let」を使う。jsへの変換時にvarになる
// let 名前 : データ型 = 初期値;
// let 名前 : データ型;
// let 名前 = 初期値;

let sample : number = 0;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;初期値を与えなかった場合はundefinedになります。
データ型を指定しなかった場合は初期値から型推論を行い使用されます。&lt;br&gt;
定義してある型に一致しないデータが挿入されるプログラムになっているとビルド時にエラーがでます。&lt;/p&gt;
&lt;p&gt;型を指定しなかった場合「any」として扱われ、通常の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;let sample : any;
let sample ;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;配列で型を定義する&lt;/h3&gt;
&lt;p&gt;配列の要素の型を定義します。指定しない場合はanyとなります。&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 array1 : Array&amp;lt;要素のデータ型&amp;gt; = [1,2,3,4]
let array1 : Array&amp;lt;number&amp;gt; = [1,2,3,4];

//let array2 : 要素のデータ型[] = [1,2,3,4]
let array2 : number[] = [1,2,3,4];&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;連想配列(Map)で型を定義する&lt;/h3&gt;
&lt;p&gt;連想配列の型指定です。Mapを使う場合になります。&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 変数名 = new Map&amp;lt;キーのデータ型, 値のデータ型&amp;gt;()
let renso = new Map&amp;lt;string,number&amp;gt;([
    [&amp;quot;a&amp;quot;,1],
    [&amp;quot;b&amp;quot;,2],
    [&amp;quot;c&amp;quot;,3],
    [&amp;quot;d&amp;quot;,4],
]);

// let 変数名 : Map&amp;lt;キーのデータ型,値のデータ型&amp;gt; = new Map();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;連想配列(Object)で型を定義する&lt;/h3&gt;
&lt;p&gt;Objectで連想配列を用意する場合になります。&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 変数名 : {[key:string] : 値のデータ型 } = {} 
let renso2: {[key:string] : number } = {
    &amp;quot;a&amp;quot; : 1,
    &amp;quot;b&amp;quot; : 2,
    &amp;quot;c&amp;quot; : 3,
    &amp;quot;d&amp;quot; : 4,
}; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&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;class Sample{
    Name : string;
    No: number;
}

let member : {[key:string]: Sample} = {
    &amp;quot;a&amp;quot; : {Name:&amp;#39;yamada&amp;#39;, No:1},
    &amp;quot;b&amp;quot; : {Name:&amp;#39;yoshida&amp;#39;, No:2},
    &amp;quot;c&amp;quot; : {Name:&amp;#39;yamamoto&amp;#39;, No:3},
    &amp;quot;d&amp;quot; : {Name:&amp;#39;yasuda&amp;#39;, No:4},
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;関数のデータ型を定義&lt;/h2&gt;
&lt;h3&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;// function 関数名 (引数名1:データ型, 引数名2:データ型) : 戻り値のデータ型 {
//     処理
// }
function getName (id:number,type:string) : string {
    処理
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;戻り値はvoidを指定することで、戻り値なしを定義できます。&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;function notDo (id:number,type:string) : void{
    処理
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;匿名関数のデータ型の定義&lt;/h3&gt;
&lt;p&gt;基本ラムダ型を使えば良い。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;// let 関数の変数名 = function (引数名1:データ型, 引数名2:データ型): 戻り値のデータ型 {
//    処理
// }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&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;// 処理とデータ型を同時に定義する
// let ラムダ式の変数名 = (引数名1:データ型, 引数名2:データ型): 戻り値のデータ型 =&amp;gt; {
//     処理
// }

// 1.処理を定義せずデータ型のみを先に定義する
// let ラムダ式の変数名 : (引数名1:データ型, 引数名2:データ型) =&amp;gt; 戻り値のデータ型;
// 
// 2.処理を定義
// ラムダ式の変数名 = () =&amp;gt; {
//     処理
// }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;戻り値がない場合はvoid 処理が戻らない場合はnever&lt;/h3&gt;
&lt;p&gt;処理が終わって何も返さない場合は「void」を定義します。
無限にループする場合など、処理が変えることがない場合は「never」を戻り値の型として定義します&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;function notEnd (id:number,type:string) : never{
    処理
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;データ型定義の方法&lt;/h2&gt;
&lt;h3&gt;値の組 Tuple を使う&lt;/h3&gt;
&lt;p&gt;シンプルな値の組の定義の場合はTupleを利用できます。
Tupleを用いることでクラスの定義をしなくても、値の組み合わせを定義することができます。&lt;br&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;// let 変数名 : [データ型1,データ型2, ・・・] = []
let data1 : [string,string,nomber] = [ &amp;quot;apple&amp;quot;, &amp;quot;bus&amp;quot;, 20 ];
// 
// function 関数名 ( 引数 ) : [ データ型1, データ型2, ・・・] {
//    処理 
// }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;データ型の候補を複数定義 共用体 Union&lt;/h3&gt;
&lt;p&gt;データ型の定義として、「どちらか」「どれか」一方という定義ができます。&lt;br&gt;
変数はもちろん、関数の引数・戻り値でも使用可能です。関数内では &lt;code&gt;typeof(prop)&lt;/code&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;// let 変数名 : データ型1 | データ型2 ;
let data : string | number | Date ;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;null 許容型&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;データ型 | null&lt;/code&gt;で定義すればnullになり得る共用体にできます。
このときには &lt;code&gt;変数名 || 変数の値がnullの場合の使用値&lt;/code&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;let text3 : string | null ;

console.info( text3 || &amp;quot;テキストなし&amp;quot; );&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;undefinedの許容&lt;/h3&gt;
&lt;p&gt;undefineedを許容することもできます。&lt;br&gt;
関数の引数の場合は、引数名の後に?を付けることでundefinedの許容型にできます。&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 変数名 : データ型 | undefined ;
// 
// function 関数名 ( 引数名? : 引数のデータ型){
//     処理
// };
// 
// function 関数名 ( 引数名 : 引数のデータ型 | undefined){
//     処理
// };&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;タグ付き共用体&lt;/h3&gt;
&lt;p&gt;データ型の定義クラスにタグをつけておくことで、itme.tagで確認できるようになります&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 Person {
    tag : &amp;#39;person&amp;#39;;
    Name : string;
    No : number;
}
class Team {
    tag : &amp;#39;team&amp;#39;;
    Name : string;
    Color: string;
}

// type を使って 型の共用体に名前を付ける 型のエイリアス
type Item = Person | Team;

// 関数の引数として共用体を指定
function getData ( item : Item ) {
    switch (item.tag){
        case &amp;quot;person&amp;quot;:
            return  // 処理
        case &amp;quot;team&amp;quot;:
            return  // 処理
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;交差型を使った合成 Intersection&lt;/h3&gt;
&lt;p&gt;2つ以上の型を合成して利用することも出来ます。&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 変数名 : データ型1 &amp;amp; データ型2 ;

// 交差型は実際のクラスではないので、newは利用できない。`&amp;lt;交差型のエイリアス&amp;gt;`の書式なら指定可能
// let 変数名 = &amp;lt; データ型1 &amp;amp; データ型2 &amp;gt; {} ;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;今回はここまでにします。とりあえず型定義の基礎でした。&lt;br&gt;
とりあえずデータ型の定義ができることはわかったので、アプリやサイトもすこしずつ修正していこうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[素材サンプル]]></title><description><![CDATA[Web素材のサンプル置き場です。
Web制作でよく使うサンプルにアクセスしやすいようにここにおいていきます。 サンプル画像   rotating_earth.gif   svg-300.svg pdf-300.pdf]]></description><link>https://honmushi.com/sample/</link><guid isPermaLink="false">https://honmushi.com/sample/</guid><pubDate>Fri, 04 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Web素材のサンプル置き場です。
Web制作でよく使うサンプルにアクセスしやすいようにここにおいていきます。&lt;/p&gt;
&lt;h2&gt;サンプル画像&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 300px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/06e06685afb4ba978a4892ab40da1405/5a46d/png-300-300.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAADBUlEQVQ4y72US2gTURSGbwKiUG21RdBA85pM0iaZPJomaZukedQao0ZJbNqo6EJRdyLqQizYgqLgCxeVatM2bRXbrSsXggvBhYviUhQf0OrChYK4cTM9/nc6SZM2dqeBjzMZuN/893VYPDdB6yCrdSHeN9GIyoCGrff7J8JY3ziV6ipktS6AxsTAI4aqEYxGZgGCwcAsKvzdX4SFCmGhLIxm7zfuPf2KBeJnNRBpgQZSLReVqJqyIu0vUmJgBnWKEv3T/Fnmz2Bxz8kXDZ5AnzKGJ1PSVcjWJsTAcPomudr2k0OKksMVp/bIKdnp6SXJm3pnd4QTgr55WjRbt0A2hGnOQ3INbKgtzBUpmhkhDCDJkyS7o4ta7R1LDilGJl3TL6S5DuYhu4DBP8AM+A3qVaFm1ZQLlMg/hihE3s6jSkokJG/HEbnF5iXIXoNxCGdRnyvJDIarfNomdQmqEpambXdGyCZK5An28zVdcrp7lzyBnGy1tBKmXIDgDngLYQaSD6i6NQlLu4tjQU73LuLT7Dk8R5H0bVk0ixTsufi+pcX31dyse2YxCT6IfkLwEvWNUNrpmglzk9R98B4255ayDNHsqBzed4N/7JPbn/EYd9QbdQ2M764ZNAGdGSKOSa+vcWz4s3JMptWbMinz1BB+yZxfrJPcceaLndNYTSZFYkPlGCHjKV2iyNhKOkgPPQQP8H8MdUy5erHsKF+Kz/H87DZTHdsUCB3TOi2WOo/NxpyiuNlltbIyVUKkCu2+RO3+NAUjJ6g9mCEMlv3BLIVTQ9+8rq4DkkWYwsBBSRTnwDB4CnoAA9o1wnBqmHy+JAXDx8nfmedV9ncOUCg5+N3rCiUkUShCeBeDC4CLZyGJqOlWC4vUjZsSSl5W73NBWUO+DIn8k4/h1JWdTkGfdrdI25U0kKBuVKqKIqy+y1PK0al4J6uHfhGHfmubJ8qsTYyLmCosy6Q1a1iz2yy3L94PkbRxhIh1RM9o1TVbFlewcmxW9cOKd+UGy/thqcH6scMOQfg/HfsPjOIW1tY6Xd4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;png-300-300.png&quot;
        title=&quot;png-300-300.png&quot;
        src=&quot;/static/06e06685afb4ba978a4892ab40da1405/5a46d/png-300-300.png&quot;
        srcset=&quot;/static/06e06685afb4ba978a4892ab40da1405/12f09/png-300-300.png 148w,
/static/06e06685afb4ba978a4892ab40da1405/e4a3f/png-300-300.png 295w,
/static/06e06685afb4ba978a4892ab40da1405/5a46d/png-300-300.png 300w&quot;
        sizes=&quot;(max-width: 300px) 100vw, 300px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 300px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/325912ad0361347ec4e6eded13dadc5a/f93b5/jpg-300-300.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAXAQEAAwAAAAAAAAAAAAAAAAAAAQIE/9oADAMBAAIQAxAAAAHpq2M/nUrkAH//xAAaEAEBAAIDAAAAAAAAAAAAAAABAgAREBIT/9oACAEBAAEFApho8qxNML1GtLt5/8QAFREBAQAAAAAAAAAAAAAAAAAAICH/2gAIAQMBAT8Bg//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EABsQAAIBBQAAAAAAAAAAAAAAAAARIQECIDJB/9oACAEBAAY/AoRwRCobW4//xAAcEAEAAgMAAwAAAAAAAAAAAAABABEhMUEgUZH/2gAIAQEAAT8htC2rLEu/csFWPUFVVO2BpiHsZFbXw//aAAwDAQACAAMAAAAQWyCC/8QAFxEBAAMAAAAAAAAAAAAAAAAAAQAQEf/aAAgBAwEBPxAMRv8A/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPxAf/8QAHhABAAICAQUAAAAAAAAAAAAAAQARITFBIFFhgfD/2gAIAQEAAT8Qr1GjIfVABdyepa67RnCVSqyWRZt9LvHnmEACAUNrvNZu4F5GU56P/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;jpg-300-300.jpg&quot;
        title=&quot;jpg-300-300.jpg&quot;
        src=&quot;/static/325912ad0361347ec4e6eded13dadc5a/f93b5/jpg-300-300.jpg&quot;
        srcset=&quot;/static/325912ad0361347ec4e6eded13dadc5a/a80bd/jpg-300-300.jpg 148w,
/static/325912ad0361347ec4e6eded13dadc5a/1c91a/jpg-300-300.jpg 295w,
/static/325912ad0361347ec4e6eded13dadc5a/f93b5/jpg-300-300.jpg 300w&quot;
        sizes=&quot;(max-width: 300px) 100vw, 300px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/090592ebd01ac1e425b2766989040f80/rotating_earth.gif&quot; alt=&quot;rotating_earth.gif&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/bdea14ab3faf27d842012d9e5d5ac72e/a2510/jpeg-1000.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECBP/EABYBAQEBAAAAAAAAAAAAAAAAAAABA//aAAwDAQACEAMQAAABu2sdecSwAH//xAAaEAACAgMAAAAAAAAAAAAAAAABAgAQERMx/9oACAEBAAEFAlQtNTUhwATD2//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EABsQAAIBBQAAAAAAAAAAAAAAAAABIRAgMkGR/9oACAEBAAY/AoNdpDSM1b//xAAbEAACAgMBAAAAAAAAAAAAAAABEQAxECFRIP/aAAgBAQABPyEG05eEIRUKVs2zcDCGvss2934//9oADAMBAAIAAwAAABDs333/xAAVEQEBAAAAAAAAAAAAAAAAAAABIP/aAAgBAwEBPxBWP//EABURAQEAAAAAAAAAAAAAAAAAAAEg/9oACAECAQE/EAI//8QAHBABAQADAAMBAAAAAAAAAAAAAREAITEgQWGR/9oACAEBAAE/EHHGipHeJSzbuNfcRF0Y4TQ0AxN/msnCGyLb31lLodUcfvh//9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;jpeg-1000.png&quot;
        title=&quot;jpeg-1000.png&quot;
        src=&quot;/static/bdea14ab3faf27d842012d9e5d5ac72e/1c72d/jpeg-1000.jpg&quot;
        srcset=&quot;/static/bdea14ab3faf27d842012d9e5d5ac72e/a80bd/jpeg-1000.jpg 148w,
/static/bdea14ab3faf27d842012d9e5d5ac72e/1c91a/jpeg-1000.jpg 295w,
/static/bdea14ab3faf27d842012d9e5d5ac72e/1c72d/jpeg-1000.jpg 590w,
/static/bdea14ab3faf27d842012d9e5d5ac72e/a8a14/jpeg-1000.jpg 885w,
/static/bdea14ab3faf27d842012d9e5d5ac72e/a2510/jpeg-1000.jpg 1000w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/40ae49267ef38c60d43c79bda028987e/c58a3/jpeg-1500.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMCBP/EABcBAQEBAQAAAAAAAAAAAAAAAAACAQT/2gAMAwEAAhADEAAAAZ1nqOnnGUAB/8QAGxAAAgEFAAAAAAAAAAAAAAAAAQIAEBITICH/2gAIAQEAAQUCRL5hNEPBr//EABURAQEAAAAAAAAAAAAAAAAAACAh/9oACAEDAQE/AaP/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAcEAACAAcAAAAAAAAAAAAAAAAAARASICEiMTP/2gAIAQEABj8Cs0bUHlKdaf/EABsQAQEAAQUAAAAAAAAAAAAAAAERABAgIVFh/9oACAEBAAE/IVqCd6+gQcJDiAfdv//aAAwDAQACAAMAAAAQA++C/8QAFhEBAQEAAAAAAAAAAAAAAAAAIQEg/9oACAEDAQE/EKjH/8QAFREBAQAAAAAAAAAAAAAAAAAAICH/2gAIAQIBAT8Qg//EAB0QAQACAgIDAAAAAAAAAAAAAAERIQBRIDFBYZH/2gAIAQEAAT8QbCCKTLLGveJx0q3LUVraGJCmsHaKNjKnkTrI5JAA/Rj23PD/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;jpeg-1500.png&quot;
        title=&quot;jpeg-1500.png&quot;
        src=&quot;/static/40ae49267ef38c60d43c79bda028987e/1c72d/jpeg-1500.jpg&quot;
        srcset=&quot;/static/40ae49267ef38c60d43c79bda028987e/a80bd/jpeg-1500.jpg 148w,
/static/40ae49267ef38c60d43c79bda028987e/1c91a/jpeg-1500.jpg 295w,
/static/40ae49267ef38c60d43c79bda028987e/1c72d/jpeg-1500.jpg 590w,
/static/40ae49267ef38c60d43c79bda028987e/a8a14/jpeg-1500.jpg 885w,
/static/40ae49267ef38c60d43c79bda028987e/fbd2c/jpeg-1500.jpg 1180w,
/static/40ae49267ef38c60d43c79bda028987e/c58a3/jpeg-1500.jpg 1500w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/c3591b26c337dcfae3a0c0f7f2498246/svg-300.svg&quot; alt=&quot;svg-300.svg&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/56e87b7b9f2952e799cc2aa6d86c6c5d/pdf-300.pdf&quot;&gt;pdf-300.pdf&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ExpoのSDK35がリリースされたので早速アップデート（SDK34→SDK35）]]></title><description><![CDATA[ExpoのSDK35がリリースされました。数日遅れですが早速アップデートしてみました。その時の引っ掛かりなど記録しておきます。 Expo SDK 35 is now available SDK34で作っていたアプリは必要なら3…]]></description><link>https://honmushi.com/2019/09/24/expo-sdk35/</link><guid isPermaLink="false">https://honmushi.com/2019/09/24/expo-sdk35/</guid><pubDate>Tue, 24 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ExpoのSDK35がリリースされました。数日遅れですが早速アップデートしてみました。その時の引っ掛かりなど記録しておきます。&lt;br&gt;
&lt;a href=&quot;https://blog.expo.io/expo-sdk-35-is-now-available-beee0dfafbf4&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo SDK 35 is now available&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SDK34で作っていたアプリは必要なら35にアップデートしていく必要があるので、その際の手順として記録しています。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SDK35の変更点&lt;/li&gt;
&lt;li&gt;SDK34からSDK35へのアップデート手順&lt;/li&gt;
&lt;li&gt;発生したエラーとその対応&lt;/li&gt;
&lt;li&gt;おわりに&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SDK35の変更点&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.expo.io/expo-sdk-35-is-now-available-beee0dfafbf4&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo SDK 35 is now available&lt;/a&gt;に記載の内容です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iOS13 への対応&lt;br&gt;
これが大きいもののようです。
Dark ModeやApple Authenticationというものへの対応が行われており、必要なモジュールを利用すれば簡単に実装できそうです。
すぐには利用する予定はないですが、ゆくゆくは使ってみようと思います。&lt;/li&gt;
&lt;li&gt;Expo Webの改善&lt;br&gt;
SSRの対応を行ったようです。すべてのExpoパッケージがサーバサイドレンダリングに対応するようになりました。
私はExpo Webを利用したことがないのですが、試しにやってみようかな。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;端末や環境関連のモジュールの追加&lt;br&gt;
使う機会はそれほど多くないと思いますが、機種の情報やネットワーク・バッテリーの情報を取得するモジュールが用意されました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Device  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;provides information about the physical device/manufacturer as well as the operating system.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Application  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;provides information about your application and its environment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Battery  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;provides information about the power state of the device.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Network  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;provides information about the device’s current network connection.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cellular  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;provides information about the device’s current cellular network and telephony state.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Expo client のSDK31とSDK32のサポート終了&lt;br&gt;
最新のExpo clientアプリではSDK31・32で作ったアプリは動作しません。
すでにビルドしてあるアプリについては特に問題ないですが、ずっと昔のアプリをExpo clientでテストする場合なんかに困ると思います。
頑張ってExpo SDKのバージョンを上げましょう。&lt;/li&gt;
&lt;li&gt;Android Branchのサポート&lt;br&gt;
以下のモジュールのことらしいです。 &lt;a href=&quot;https://docs.expo.io/versions/latest/sdk/branch/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Branch&lt;/a&gt;&lt;br&gt;
私は利用したことがありません。機会あれば触ってみます。deep linkに関するモジュールのようです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;他にも細かい改善なんかもありますので、リリースを一度読んでおくと良いです。&lt;/p&gt;
&lt;p&gt;Breaking Changesとして以下の記載がありましたので、Admob使う場合は修正が必要かもしれません。admobの管理画面からアプリの一意なIDを取得して、引数に加えてねということらしいです。あとで試してみて追記します。&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;Admob: all Admob ads now require a new configuration value in app.json, expo.[platform].config.googleMobileAdsAppId. The value can be found by following the guide in this Google Support answer. (Related PR.)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;SDK34からSDK35へのアップデート手順&lt;/h2&gt;
&lt;p&gt;今回SDK34からSDK35へのアップデートの手順を以下に記載しています。
基本的には最初にも記載した以下のページに載っている内容です。&lt;br&gt;
&lt;a href=&quot;https://blog.expo.io/expo-sdk-35-is-now-available-beee0dfafbf4&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo SDK 35 is now available&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;1. app.jsonの sdkVersion を “35.0.0”に変更&lt;/h3&gt;
&lt;h3&gt;2. package.jsonの以下の項目を変更&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;react-native を ”&lt;a href=&quot;https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz&lt;/a&gt;”&lt;/li&gt;
&lt;li&gt;expo を “^35.0.0”&lt;/li&gt;
&lt;li&gt;react を “16.8.3”&lt;/li&gt;
&lt;li&gt;react-navigation を “^4.0.6” &lt;/li&gt;
&lt;li&gt;jest-expo を “^35.0.0” &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;sentry-expo を “~2.0.0” &lt;/p&gt;
&lt;p&gt;使っていないものは変更の必要無いです。jestとかsentryなんかは使ってない場合もあると思います。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. react-navigation を利用する場合は 「expo install react-native-gesture-handler react-native-reanimated」を行う&lt;/h3&gt;
&lt;p&gt;expoの packageに含まれなくなったため、改めてinstallする必要があるそうです。&lt;/p&gt;
&lt;h3&gt;4. プロジェクトの /node_modules/ ディレクトリを削除して npm install を行う&lt;/h3&gt;
&lt;h3&gt;5. expo start -c を実行&lt;/h3&gt;
&lt;h3&gt;6. Expo clientアプリをストアで更新を確認&lt;/h3&gt;
&lt;p&gt;expo-cliも確認しておきましょう。&lt;/p&gt;
&lt;h3&gt;7. &lt;a href=&quot;https://blog.expo.io/expo-sdk-35-is-now-available-beee0dfafbf4&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo SDK 35 is now available&lt;/a&gt;の 「breaking changes」を確認&lt;/h3&gt;
&lt;h3&gt;8. すでにビルドしている場合、SDKを更新するためには改めてビルドする必要がある&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;expo publish&lt;/code&gt;ではアプリのSDKの更新はできないよ、という意味だと思います。&lt;/p&gt;
&lt;h2&gt;発生したエラーとその対応&lt;/h2&gt;
&lt;p&gt;上記の内容を参考にしながら進めていく中で、いくつかエラーに遭遇しました。
私が対処した内容をメモしておきます。環境の差によってうまくいかない場合もあると思いますが、参考になればと思います。&lt;/p&gt;
&lt;h3&gt;関連パッケージでエラー&lt;/h3&gt;
&lt;p&gt;以下のモジュールに対してバージョンが適していないというエラーが出ました。メッセージに対応内容が書かれていましたのでそのとおり対応したところ動作しました。&lt;br&gt;
具体的にはpakage.jsonのバージョンを書き換えて&lt;code&gt;npm install&lt;/code&gt;です。全部7.0.0に更新するように表示されていましたのでそうしました。&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;expo-asset
expo-constants
expo-font
expo-web-browser&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;expo-fontでエラー&lt;/h3&gt;
&lt;p&gt;font familyに関するエラーが発生します。
以下に現象が報告されていますので、その内容通りに対応すれば良いです。  &lt;a href=&quot;https://github.com/expo/expo/issues/5717&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Unrecognized font family on SDK35&lt;/a&gt;&lt;br&gt;
具体的には以下の手順です&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;expo install expo-font&lt;/code&gt;を実行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/node_modules/&lt;/code&gt;フォルダーを削除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pakage-lock.json&lt;/code&gt;を削除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm install&lt;/code&gt;を実行&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;react-navigationでエラー&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.expo.io/expo-sdk-35-is-now-available-beee0dfafbf4&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo SDK 35 is now available&lt;/a&gt;の 「breaking changes」の内容に含まれている内容だと思います。react-navigationで大きめの変更があったためいくつか対応が必要です。
私の場合は、以下2点対応しました。他にも環境や利用しているモジュールによって対応が必要になると思います。基本エラーに対応方法が書いてあるので、それに従えば問題ないです。必要であればドキュメントを確認しましょう。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;react-navigation-stack を追加&lt;br&gt;
&lt;code&gt;createStackNavigator&lt;/code&gt;を&lt;code&gt;react-navigation-stack&lt;/code&gt;からimportするように変更します
&lt;code&gt;npm install react-navigation-stack&lt;/code&gt;も実行します&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;react-navigation-tabs を追加&lt;br&gt;
&lt;code&gt;createBottomTabNavigator&lt;/code&gt;を&lt;code&gt;react-navigation-tabs&lt;/code&gt;からimportするように変更します
&lt;code&gt;npm install react-navigation-tabs&lt;/code&gt;も実行します&lt;/p&gt;
&lt;p&gt;上記は以前&lt;code&gt;react-navigation&lt;/code&gt;に含まれていましたが、それぞれ分離されたようです。他のコンポーネントも分離されているのだと思います。都度対応しましょう。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;とりあえずSDK35で動作させることが出来ました。
以前作っていたアプリをアップデートする必要があります。がんばります。&lt;/p&gt;
&lt;p&gt;SDK35で追加された新しい機能も使っていこうと思います。特にiOS13への対応は結構重要だと思いますので進めていきたいです。&lt;/p&gt;
&lt;p&gt;上記それほど重要でなければしばらくはSDK34を使い続けるというのもありです。
ある程度バグとか少なくなってから利用するのも一つの手です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[expo-cliのコマンド自分用メモ]]></title><description><![CDATA[expo-cli のコマンドのメモです。
それほど種類もないので簡単なのですが、オプションが結構あるので使いたいときに確認するためにブログに記録しておきます。 基本的にはExpo-CLIに書いてあることの引用です。
よく使う順に並び替えて、メモを足しています。 Expo-CLI…]]></description><link>https://honmushi.com/2019/09/24/expo-command/</link><guid isPermaLink="false">https://honmushi.com/2019/09/24/expo-command/</guid><pubDate>Tue, 24 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;expo-cli のコマンドのメモです。
それほど種類もないので簡単なのですが、オプションが結構あるので使いたいときに確認するためにブログに記録しておきます。&lt;/p&gt;
&lt;p&gt;基本的には&lt;a href=&quot;https://docs.expo.io/versions/latest/workflow/expo-cli/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo-CLI&lt;/a&gt;に書いてあることの引用です。
よく使う順に並び替えて、メモを足しています。&lt;/p&gt;
&lt;h2&gt;Expo-CLI コマンドメモ&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;Usage: expo [options] [command]&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;Options:
  -V, --version                                       output the version number
  -o, --output [format]                               Output format. pretty (default), raw
  --non-interactive                                   Fail, if an interactive prompt would be required to continue. Enabled by default if stdin is not a TTY.
  -h, --help                                          output usage information&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;あまり使わないです。&lt;code&gt;-h&lt;/code&gt;でヘルプ。
各コマンドのヘルプを見るときは&lt;code&gt;expo [command] --help&lt;/code&gt;します&lt;/p&gt;
&lt;h2&gt;よく使うコマンド&lt;/h2&gt;
&lt;h3&gt;start|r [options] [project-dir]&lt;/h3&gt;
&lt;p&gt;ローカルサーバを開始&lt;/p&gt;
&lt;h3&gt;build:ios|bi [options] [project-dir]&lt;/h3&gt;
&lt;p&gt;iOSのビルドipaファイルがサーバに生成される。&lt;code&gt;expo bi&lt;/code&gt;は省略版&lt;/p&gt;
&lt;h3&gt;build:android|ba [options] [project-dir]&lt;/h3&gt;
&lt;p&gt;アンドロイドのビルドapk がサーバに生成される。&lt;code&gt;expo ba&lt;/code&gt;が省略版&lt;br&gt;
&lt;code&gt;expo ba -t app-bundle&lt;/code&gt;でaabが生成される。こっちのほうが使う。&lt;/p&gt;
&lt;h3&gt;fetch:ios:certs [options] [project-dir]&lt;/h3&gt;
&lt;p&gt;iOSの証明書やキーなどの情報を取得する。別の場所に大切に保管する。&lt;br&gt;
パスワードが出力されるのでメモしておく。&lt;/p&gt;
&lt;h3&gt;fetch:android:keystore [options] [project-dir]&lt;/h3&gt;
&lt;p&gt;Androidの証明書やキーなどの情報を取得する。別の場所に大切に保管する。&lt;br&gt;
パスワードが出力されるのでメモしておく。&lt;/p&gt;
&lt;h3&gt;optimize|o [options] [project-dir]&lt;/h3&gt;
&lt;p&gt;assetの圧縮、ビルド時に警告でるので気づいたら実行する。&lt;/p&gt;
&lt;h3&gt;login|signin [options]&lt;/h3&gt;
&lt;p&gt;expoへのログイン、必要なときに行う&lt;/p&gt;
&lt;h3&gt;logout&lt;/h3&gt;
&lt;p&gt;expoからのログアウト&lt;/p&gt;
&lt;h2&gt;使いそうなもの&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;build:status|bs [options] [project-dir]             Gets the status of a current (or most recently finished) build for your project.
eject [options] [project-dir]                       Creates Xcode and Android Studio projects for your app. Use this if you need to add custom native functionality.
diagnostics [project-dir]                           Prints environment info to console.
generate-module [options] [new-module-project]      Generate a universal module for Expo from a template in [new-module-project] directory.
init|i [options] [project-dir]                      Initializes a directory with an example project. Run it without any options and you will be prompted for the name and type.
publish:history|ph [options] [project-dir]          View a log of your published releases.
publish:details|pd [options] [project-dir]          View the details of a published release.
publish:set|ps [options] [project-dir]              Set a published release to be served from a specified channel.
publish:rollback|pr [options] [project-dir]         Rollback an update to a channel.
publish|p [options] [project-dir]                   Publishes your project to exp.host&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;あまり使わないもの&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;android [options] [project-dir]                     Opens your app in Expo on a connected Android device
build:web [options] [project-dir]                   Build a production bundle for your project, compressed and ready for deployment.
bundle-assets [options] [project-dir]               Bundles assets for a detached app. This command should be executed from xcode or gradle.
client:ios [options]                                Build a custom version of the Expo client for iOS using your own Apple credentials and install it on your mobile device using Safari.
doctor [options] [project-dir]                      Diagnoses issues with your Expo project.
export [options] [project-dir]                      Exports the static files of the app for hosting it on a web server.
fetch:android:hashes [options] [project-dir]        Fetch this project&amp;#39;s Android key hashes needed to set up Google/Facebook authentication. Note: if you are using Google Play signing, this app will be signed with a different key after publishing to the store, and you&amp;#39;ll need to use the hashes displayed in the Google Play console.
fetch:android:upload-cert [options] [project-dir]   Fetch this project&amp;#39;s upload certificate needed after opting in to app signing by Google Play or after resetting a previous upload certificate.
install:ios                                         Install the latest version of Expo client for iOS on the simulator
install:android                                     Install the latest version of Expo client for Android on a connected device or emulator
ios [options] [project-dir]                         Opens your app in Expo in an iOS simulator on your computer
opt-in-google-play-signing [options] [project-dir]  Switch from the old method of signing APKs to the new App Signing by Google Play. The APK will be signed with an upload key and after uploading it to the store, app will be re-signed with the key from the original keystore.
prepare-detached-build [options] [project-dir]      Prepares a detached project for building
push:android:upload [options] [project-dir]         Uploads a Firebase Cloud Messaging key for Android push notifications.
push:android:show [options] [project-dir]           Print the value currently in use for FCM notifications for this project.
push:android:clear [options] [project-dir]          Deletes a previously uploaded FCM credential.
register                                            Sign up for a new Expo account
send [options] [project-dir]                        Sends a link to your project to an email address
upload:android|ua [options] [projectDir]            Uploads a standalone Android app to Google Play (works on macOS only). Uploads the latest build by default.
upload:ios|ui [options] [projectDir]                Uploads a standalone app to Apple TestFlight (works on macOS only). Uploads the latest build by default.
url|u [options] [project-dir]                       Displays the URL you can use to view your project in Expo
url:ipa [options] [project-dir]                     Displays the standalone iOS binary URL you can use to download your app binary
url:apk [options] [project-dir]                     Displays the standalone Android binary URL you can use to download your app binary
webhooks:set [options] [project-dir]                Set a webhook for the project.
webhooks:show [options] [project-dir]               Show webhooks for the project.
webhooks:clear [options] [project-dir]              Clear a webhook associated with this project.
whoami|w                                            Checks with the server and then says who you are logged in as&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;とりあえずこんな感じ。
またよく使うものとかあったら逐次足していく予定です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[マークダウンエディタアプリ「skeleton md editer」をリリース]]></title><description><![CDATA[マークダウンを編集することに特化したスマホ用エディタアプリを作成しました。
いつものようにReact Native とExpoで構築しました。
現在はまだAndroidしかありませんが、すぐにiOS版も公開予定です。 LP…]]></description><link>https://honmushi.com/2019/09/20/mdediter-dev/</link><guid isPermaLink="false">https://honmushi.com/2019/09/20/mdediter-dev/</guid><pubDate>Fri, 20 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;マークダウンを編集することに特化したスマホ用エディタアプリを作成しました。
いつものようにReact Native とExpoで構築しました。
現在はまだAndroidしかありませんが、すぐにiOS版も公開予定です。&lt;/p&gt;
&lt;p&gt;LPはこちら&lt;br&gt;
&lt;a href=&quot;/lp/mdediter/&quot;&gt;スマートフォンでマークダウンを編集するために、エディタを作りました。&lt;/a&gt;&lt;/p&gt;
&lt;h2&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;li&gt;おわりに&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;機能&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 312px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/02bbb2d327cd394d8f098948e4bef6c5/17474/sc-04.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 141.89189189189187%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAExElEQVRIx9VVW1NbZRTNP/FFfbFOVU6A3EggJDQk5HaSkwsnN0JIoBBtoVg7dUZxdGTK2GnHGV/0B+iMD44z+uToTLVeaoVAaS0qAaQW2nArpfSSZLm/7xA4TGl9NjNrdvIl3zpr7732jkZn0MFoMaKhsQFGswGGJgP0Rj2PDIIgQKgToNVqD4QgaOmuDgZzMxp0OmgsdgucISf0Jj3ag+1wd7rhlj1KJLDzRn0jXX4FdcJLELQvKxCUWFd3mM4FGK12HjUN2nro6uth0DXCqNdBR0r1jY38s8mgh9lkgKWlGf5EGuFML8RkBoFUBlI6R8hC6srCH0vDE0nAHUlC02oxIxUOIurzIOTuQE8sgmw8ioQkQmx3wGNtRrQzgW8vT+PCT5ewsFTCtb/mceHny/ju4i/4/Muv8P2lcRQXFvH1+J8KISMZHsihLxVDLOAjsgBk0YuAsx2e1hZE5SQmZ2YxXRjH7VvLuDp9BVOTBfx48QdcmZrEZKGAuT+u45uJGSI0m5EIisglOhEP+uGyWuGx2zn8jiPw2qwIhjpxY3UTT3pVd+LUzTvQ2Ehh0NUOZ0sL3DYbJ9kFpcwIpbCMxZU7/NLK6jpm5xYUomqVo1xRKAs31qCxmpsQ8bopRR/V0AXfkTYOhVQhDEViuFpcxOpKCUvLy9jevo9KpYJyuczx8FGZE04srkLT0mRCOhpCPpNCRg7D22ZXqVQIw0Q4OVPE7aWbKM7OqpLc/7pe2lZqyLrptrXukqkVsqbIsRQ+/uwLjJ47jzMffoT3zp7DW6NjGDnzgYKxsxh5fxTvfPKp0uUopSx1ODlxjUyJ9CCyTSLZjdypt6El8+odHTC5vHjBYMGzgg7PafV4vsGIZw4dhiN7Ahp7czOysSh6kzKSoYBKndIU5sM4mfrNsfOI9/Qg3N0DOduLcLqHJiwCZ7gTHdEYbF4/kqdHqcvNFhzLprkX891JbmiPfa/bSg1lFIq3UFzaxI3SJpbJQrfW7mJpbQurd+5hmWLl0QP8On9bnbKLp8xQIxPJ2DXC3+bW8PtyBf+sl7F2r4qVrSrmVx5h5W4FNzfKOz7cgKbN2oLjuTROD/bzSWGd7qJRZEY/mk4gFfQh19dPajZVNj4IzIfrikLWEGZutUI2dkHWqDYbwtE4/i5t8EvMxDVDP25sIrQ2NUFktSLL1Ey9C3ZOtmGjVyOsHEBY2UdIk6K2y5NGT024b46fRvg46f+TsPIfTXlaDVWEi6V1RRERcptU9yxTrVb4d5O19aVWqMZuU2jbFFfv8Uv3ieMhxQcqbO+kP7G0tWObA9NVFoSP7CR2dKA3P4T88ZMYGDyJvmPDyA++gf7XXkd+SIn9+WHIuVfJ2LQcQn4RfieZ20tLNiBxSGIQQZ+fzrzwu9zo7g0jng7Ab7bglCTBYTYhFveRV1uRykgYevcohEMv1vZhOzcxn1+XCwG3m+bYiQApE11OSt2JZFIiAnoYvT8WCpPyNsjRAIlxIyYH0X8iA5NOr9QwKnkpPTsCHi9Xx9Jkams7kdXS53BSPWma2DJm2dBvPWwp05+Z5HVBjvj3CLvSEU4o+USEpQgnYinXpoWpZun7d2odoM/sTHTSvqSHdHVHMDQyAEN9A/4FQrF8wkCKVnIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;スクリーンショット&quot;
        title=&quot;スクリーンショット&quot;
        src=&quot;/static/02bbb2d327cd394d8f098948e4bef6c5/17474/sc-04.png&quot;
        srcset=&quot;/static/02bbb2d327cd394d8f098948e4bef6c5/12f09/sc-04.png 148w,
/static/02bbb2d327cd394d8f098948e4bef6c5/e4a3f/sc-04.png 295w,
/static/02bbb2d327cd394d8f098948e4bef6c5/17474/sc-04.png 312w&quot;
        sizes=&quot;(max-width: 312px) 100vw, 312px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;プレビュー機能&lt;br&gt;
画面右上の「&amp;#x3C;&gt;」ボタンを押すことでプレビューのオン・オフが切り替えられます。
プレビューを表示したまま編集することができ、リアルタイムで反映されます。&lt;/p&gt;
&lt;p&gt;テキスト入力部分に重なるように表示しているのですが、どうでしょうか。画面幅が小さいのでこの方がいいかと思っていますが、しばらく様子を見て変更するかもしれません。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;記号挿入ボタン&lt;br&gt;
キーボードの上に張り付く形で、いくつかのボタンが表示されています。このボタンを押すと記号がカーソル位置に挿入されます。
マークダウンの編集を行う上で利用頻度の高いものを設定しています。これがあるだけでだいぶ便利になっています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;作るキッカケ&lt;/h2&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;p&gt;React NativeとExpoを使っています。今回の構築のポイントとなったのは以下です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;プレビュー機能&lt;br&gt;
markedというパッケージを使いました。テキストインプットに入力されたテキストをマークダウンとしてmarkedに渡すことで、HTMLへの変換を行うことが出来ます。&lt;/p&gt;
&lt;p&gt;そして生成されたHTMLをExpoのWebViewに渡すことで表示しています。URLではなくHTMLそのものをWebViewに渡すことで表示を行っています。&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;&amp;lt;WebView
originWhitelist={[&amp;#39;*&amp;#39;]}
source={{ html: &amp;#39;&amp;lt;h1&amp;gt;Hello world&amp;lt;/h1&amp;gt;&amp;#39; }}
/&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;WebViewでの表示の際には独自のスタイルを設定することで、文字サイズやハイライトなどを表現しています。そのためにHTMLの頭にスタイルをつなげてWebViewに渡しています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;記号ボタン&lt;br&gt;
テキストインプットのプロパティを利用しています。&lt;code&gt;onSelectionChange&lt;/code&gt;と&lt;code&gt;selection&lt;/code&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;「カーソル位置までの文字列」+ 「記号」+ 「カーソル位置より後の文字列」&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;という形でJavaScriptの文字列結合を行っています。  &lt;/p&gt;
&lt;p&gt;記号挿入後のカーソル位置の扱いがAndroidとiOSで異なっていたため苦戦しました。記号の後にカーソルが移動するものと、記号の前の位置に残るものとあります。適切にカーソル位置を+1することで意図した動作になりました。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;オリジナルのヘッダー要素&lt;br&gt;
特に要件がなければReactNavigationのヘッダーを設置するのですが、今回は右上にプレビュー表示ボタンを設置したかったので、ヘッダーを独自実装しました。  &lt;/p&gt;
&lt;p&gt;スクリーン内に実装するのでコンポーネントの利用やpropsの利用もわかりやすいのですが、iPhoneXなどでは画面の上部が隠れてしまいます。その場合は全体を&lt;code&gt;SafeAreaView&lt;/code&gt;で囲うことで解決できました。  &lt;/p&gt;
&lt;p&gt;他のアプリでも同様の現象が起こっている場合がありますので修正しておこうと思います。ただしReactNavigationのヘッダーの場合は正しく調整されて表示されていますので、対応の必要はありませんでした。特別な理由がなければ基本的にReactNavigationのものを利用するのが良いです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;このサイトはGatsbyで作成しているため、記事をmdで書いています。最終的にはこのアプリを利用して記事を書ける状態を目指して工夫していきたいです。
今のところはfrontmatterなどのテンプレートを呼び出せるようにすることと、スマホから何らかの方法でPCへ共有できることを考えています。&lt;/p&gt;
&lt;p&gt;他にもプレビューのスタイルの変更などもできると嬉しいですね。全画面プレビューなんかもあるといいでしょうか。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[iOS版アプリをapp storeで公開]]></title><description><![CDATA[ReactNative+Expoを使ってアプリを開発しています。Androidでの公開はいくつも行っていたのですが、ついにapp storeにて公開することができました。 今回公開できたのは以下のアプリです。一言で説明するならシンプルなメモ帳アプリです。 coffee memo…]]></description><link>https://honmushi.com/2019/09/02/ios-app/</link><guid isPermaLink="false">https://honmushi.com/2019/09/02/ios-app/</guid><pubDate>Mon, 02 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ReactNative+Expoを使ってアプリを開発しています。Androidでの公開はいくつも行っていたのですが、ついにapp storeにて公開することができました。&lt;/p&gt;
&lt;p&gt;今回公開できたのは以下のアプリです。一言で説明するならシンプルなメモ帳アプリです。&lt;br&gt;
&lt;a href=&quot;/lp/coffeememo/&quot;&gt;coffee memoをリリースしました&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ざっくリと今回の気づきを記録しておきます。各作業の詳細な手順や意味などはまた別の記事にする予定です。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ReactNativeなら簡単&lt;/li&gt;
&lt;li&gt;Expo使うとビルドも簡単&lt;/li&gt;
&lt;li&gt;レビューで却下された例&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ReactNativeなら簡単&lt;/h2&gt;
&lt;p&gt;クロスプラットフォーム開発が出来ますので、当然ですがAndoridとiOS両方での開発が1人で同時にできました。
jsの知識があれば問題なく構築できますので、敷居の低さもとても良いです。&lt;/p&gt;
&lt;p&gt;いくつかAndoridからiOSに移行する際に躓いたところがありました。別記事にまとめていますのでよければご覧ください。&lt;br&gt;
&lt;a href=&quot;/2019/08/29/reactnative-ios/&quot;&gt;ReactNativeのアプリをiOSでも動作させる&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Expo使うとビルドも簡単&lt;/h2&gt;
&lt;p&gt;私はExpoを使って開発・ビルドを行っています。app storeで公開するためのビルドについてもExpoを利用するととても簡単に出来ました。&lt;/p&gt;
&lt;p&gt;Apple Developerで作成する証明書やバンドルIDなどを、Expo側でリクエストして作成している様子でした。
もちろん自分で予め用意したものを使うことも出来ますが、特に理由がなければExpoにまかせてしまうので良さそうに感じました。&lt;/p&gt;
&lt;p&gt;証明書作ったり、キーチェーンに登録したり、ID作成したり、profile作ったりなど、複数のややこしい行程と概念がありますが、基本Expoに任せることが出来ます。&lt;/p&gt;
&lt;p&gt;Expoでビルドして、自分はApp storeにアプリを登録して必要な情報を登録。完了したらビルドをアップロードして、審査に申し込みと言うような簡単なフローになります。&lt;/p&gt;
&lt;p&gt;いざというときのために、自分の環境でもビルド等できるように試してみようと思います。しかし、なにか不便などがなければExpoに任せたいと思います。&lt;/p&gt;
&lt;h2&gt;レビューで却下された例&lt;/h2&gt;
&lt;p&gt;聞いてはいましたがAndroidよりもアプリの審査は厳しいです。&lt;/p&gt;
&lt;p&gt;例えば以下の理由で却下されました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;機能にオリジナリティが足りない&lt;br&gt;
Webサイトのコンテンツをそのままアプリにしたようなものなんかは却下されます。&lt;/li&gt;
&lt;li&gt;スクリーンショットにテスト広告が表示されている&lt;br&gt;
レビューする人によって精度の差もあるかもしれませんが、テスト広告やデバッグデータ何かがアプリ内・またはスクリーンショットに含まれていると、却下される対象になるようです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基本的にはレビューに関するガイドがあるので、それを参考にして構築すれば問題ありません。かなりボリュームがありますがその分親切に書いてあります。&lt;br&gt;
&lt;a href=&quot;https://developer.apple.com/jp/app-store/review/guidelines/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;App Store Review Guidelines.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;なんとかiOSのアプリも公開することが出来ました。とりあえず無事に出来たのでホッとしています。&lt;/p&gt;
&lt;p&gt;Androidの「.abb」形式よりも容量が大きいので、容量のスリム化を考えたいです。
Expo使っていることなども原因にあると思いますが、容量削減のコツや方法を現在勉強中です。&lt;/p&gt;
&lt;p&gt;引き続きクロスプラットフォームでの開発を進めて、ノウハウを蓄積していくつもりです。
インストール数や評価などの仕組みも大きく違うと思います、そのあたりも使って行く中で理解したいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[App Storeの審査で却下された]]></title><description><![CDATA[Androidで公開済みのアプリ「のっティ時刻表」App Storeの審査へ進めてみました。その結果不合格だったので、その時のことを書いてきます。
いくつか修正して再審査に出して、なんとかstore…]]></description><link>https://honmushi.com/2019/08/30/app-store-review/</link><guid isPermaLink="false">https://honmushi.com/2019/08/30/app-store-review/</guid><pubDate>Fri, 30 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Androidで公開済みのアプリ「のっティ時刻表」App Storeの審査へ進めてみました。その結果不合格だったので、その時のことを書いてきます。
いくつか修正して再審査に出して、なんとかstoreで公開したいと思っています。&lt;/p&gt;
&lt;p&gt;審査に至るまでの手順は別の記事で残しておく予定です。
Expoを使ったビルドはとても簡単でしたが、よくわからない単語がたくさん出てくるので結構迷うこともありました。&lt;/p&gt;
&lt;p&gt;その経過についても追記して書いていくつもりです。&lt;/p&gt;
&lt;h2&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;li&gt;考えられる原因&lt;/li&gt;
&lt;li&gt;対応策の検討&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;色々済ませていざ審査へ&lt;/h2&gt;
&lt;p&gt;ビルドやアップロード、ストア掲載情報やスナップショットを用意し登録したので、審査を申し込みました。
上記の手順については他の記事で書こうと思います。結構盛りだくさんで、今でも意味が理解しきれていない点があるので調べて見ようと思っています。&lt;/p&gt;
&lt;p&gt;とりあえず、時間軸的には以下でした。8/28に審査に申し込んで、8/30日には却下されてしまいました。
8/29の夜のうちに審査が行われた様子で、審査中のステータスは見ることが出来ませんでした。&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;・提出準備中
・審査待ち 8/28
・審査中 ？
・却下済み 8/30&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;審査が始まるまで&lt;/h2&gt;
&lt;p&gt;審査が始まるまでの状態、すなわち「審査待ち」の状態であれば、ビルドのアップロード以外の修正であれば出来ます。
例えばストアの掲載情報などでしょうか、私もスナップショットとか結構修正していました。&lt;/p&gt;
&lt;p&gt;App Storeでは掲載情報を修正しても、都度storeに反映されるわけではなく、審査を通す必要がある？のでしょうかね。無事にstoreに公開できるころにはそのあたりも把握出来ていると思います。&lt;/p&gt;
&lt;h2&gt;却下済みの状態に&lt;/h2&gt;
&lt;p&gt;8/30日の朝に確認すると、却下済みの状態になっていました。&lt;/p&gt;
&lt;h3&gt;外部テスター向けの審査は通っていました&lt;/h3&gt;
&lt;p&gt;ストア公開の審査と同時に、外部テスター向けのビルドもアップロードしていました。こちらについては無事に「承認済み」の状態になっていましたので、基準がちょっとゆるくなっているのだと思います。&lt;/p&gt;
&lt;p&gt;App StoreのアプリではTextFlightをつかって実機テストができるのですが、以下の2通りあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;App Store Connectユーザ&lt;br&gt;
ユーザーとして登録済みのAppleIDにテストしてもらうことが出来ます。こちらはビルドをアップロードすればすぐにテストを始めることができ、審査不要です。自分で開発して自分でテストするのであればこれで十分です。内部テスト的なイメージでしょうか。&lt;/li&gt;
&lt;li&gt;外部テスター&lt;br&gt;
こちらは登録していないアカウントに対してメールやURLを発行してテストしてもらうための仕組みのようです。こちらについてはビルドアップロード後に審査が必要になります。外部テストのイメージですかね。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;考えられる原因&lt;/h2&gt;
&lt;p&gt;App Store connect上でReviewのメッセージを見ることが出来ます。
英語なので戸惑うかもしれませんが、ガイドラインに沿った指摘でしたので、分かりやすかったです。&lt;/p&gt;
&lt;p&gt;「ガイドラインの〇〇に引っかかっているぞ」と言う内容なので、そこに従って修正を行えば良さそうです。&lt;br&gt;
&lt;a href=&quot;https://developer.apple.com/jp/app-store/review/guidelines/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;App Store Reviewガイドライン&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;「Guideline 4.2 - Design - Minimum Functionality」という指摘&lt;/h3&gt;
&lt;p&gt;ガイドラインを見る限りは「&lt;code&gt;主な目的がマーケティングの資料の提供、広告、Webクリッピング、コンテンツのまとめ、リンク集であるAppは許可されません。&lt;/code&gt;」の部分が原因かなと思いました。&lt;/p&gt;
&lt;p&gt;今回審査に提出したアプリは時刻表アプリなのですが、乗り換え案内機能とかはありません。
バス停の時刻のコンテンツをまとめただけのものだと判断されてしまったのではないかと思います。&lt;/p&gt;
&lt;h2&gt;対応策の検討&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;Appを作成する際は、Webサイトを単に再パッケージしたようなものではなく、優れた機能、コンテンツ、UIを作成するようにしてください。
特に便利でも、ユニークでも、「Appらしく」もない場合、そのAppをApp Storeで提供することはできません。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ということがガイドラインに書かれているので、もう少し便利な機能を付けるとか、オリジナルの要素を追加するとか、UIをAppらしくするとかの対応が必要だなと考えています。&lt;/p&gt;
&lt;p&gt;お気に入りバス停機能とか到着予想などの、新機能の開発を考えようと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;噂に聞いてはいましたが、App Storeの審査はgoogleの比べると厳しかったです。
しかし、ガイドライン等もしっかりした作りになっており、開発者にとってもわかりやすいものだと感じました。これを参考にすることが良いアプリ開発の近道になるようにも思います。 実際に経験できてよかったです。&lt;/p&gt;
&lt;p&gt;いくつか対応を進めて、storeでの公開を目指そうと思います。進捗あったら追記していきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[iOSアプリの公開に向けて「Apple Developer」に登録する]]></title><description><![CDATA[これまでいくつかアプリを作りましたが、まだAndroidでしか公開していません。
そろそろapp storeでも公開しようと思いましたので現在挑戦中です。
いくつも躓くところや気付きがあったので、その過程をメモします。 同じように、ReactNative + expo…]]></description><link>https://honmushi.com/2019/08/29/apple-develop/</link><guid isPermaLink="false">https://honmushi.com/2019/08/29/apple-develop/</guid><pubDate>Thu, 29 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;これまでいくつかアプリを作りましたが、まだAndroidでしか公開していません。
そろそろapp storeでも公開しようと思いましたので現在挑戦中です。
いくつも躓くところや気付きがあったので、その過程をメモします。&lt;/p&gt;
&lt;p&gt;同じように、ReactNative + expo で作ったアプリをiOSで公開する場合の参考になればと思います。&lt;/p&gt;
&lt;h2&gt;app store公開までの大まかな手順&lt;/h2&gt;
&lt;p&gt;大まかには以下のような手順が考えられます。この記事では最初の「AppleIDとapple developerへの登録」の部分について残しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AppleIDとapple dveloperへの登録 [この記事で取り扱う内容]&lt;/li&gt;
&lt;li&gt;iOSに向けたアプリの修正&lt;/li&gt;
&lt;li&gt;iOSアプリのビルド&lt;/li&gt;
&lt;li&gt;iOS端末による実機での確認&lt;/li&gt;
&lt;li&gt;app store への審査申し込み&lt;/li&gt;
&lt;li&gt;app store でのリリース &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;AppleIDが必要&lt;/li&gt;
&lt;li&gt;apple developerに登録&lt;/li&gt;
&lt;li&gt;お金を払う&lt;/li&gt;
&lt;li&gt;数日たって反映される&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;AppleIDが必要&lt;/h2&gt;
&lt;p&gt;app storeにアプリを公開するためにはapple developerのアカウントが必要になります。
apple developerのアカウント作成時にはAppleIDが必要です。&lt;/p&gt;
&lt;p&gt;iCloudとかを使っているのであればすでに持っていると思います。それを使ってもいいですし、任意のメールアドレスで新しく作ることも出来ます。&lt;/p&gt;
&lt;p&gt;私は大昔に作ったものがあったのですが、「秘密の質問」みたいなやつの答えがわからなかったので、新しく作りました。
開発用のものを新しく作ることが推奨されているようですし、そのほうが良さそうです。&lt;/p&gt;
&lt;h3&gt;2ファクタ認証を有効にする必要がある&lt;/h3&gt;
&lt;p&gt;後述のapple developerに登録を進めるのですが、住所などの情報の入力に加えて、「2ファクタ認証」を有効にする必要があります。&lt;/p&gt;
&lt;p&gt;これを有効にすると結構めんどくさいのですが、認証が強固になります。
通常のID/PWに加えて、登録してある電話番号にSMSで使い捨てパスワードが届き、それを入力してログインします。一度ログインすれば端末を記憶してくれるようでした。&lt;/p&gt;
&lt;h2&gt;apple developerに登録&lt;/h2&gt;
&lt;p&gt;AppleIDを用意したらapple developerに登録します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://developer.apple.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;開発用Documenntなどのいくつかの項目は利用できますが、肝心のProgram関連の項目は利用できません。
アプリ公開を行うためには、お金を支払って「Apple Developer Program - 1年間のメンバーシップ」を購入する必要があります。&lt;/p&gt;
&lt;p&gt;apple developerのアカウント画面から購入画面に進めるのでそこから支払いを進めましょう。&lt;/p&gt;
&lt;h2&gt;お金を払う&lt;/h2&gt;
&lt;p&gt;金額は11800円+消費税でクレジットカードで払いました。&lt;br&gt;
クレジットカードで払うかitunesのクレジットで払うか選べます。&lt;/p&gt;
&lt;h2&gt;数日たって反映される&lt;/h2&gt;
&lt;p&gt;払ってもすぐに有効になるわけではありません。
わたしは8月22日に支払いを行い、8月27日に「Welcome to the Apple Developer Program.」というメールが届きました。間に土日を挟んでいるので3日かかったというくらいです。気長に待ちましょう。あまりに時間がかかる場合は問い合わせを行うといいらしいです。&lt;/p&gt;
&lt;p&gt;上記のメールが来てから確認すると、apple developerの画面にも項目が増えており、「Certificates, Identifiers &amp;#x26; Profiles」や「App Store Connect」の項目が利用できるようになりました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;これで開発者メニューが利用できるようになりました。androidと比べると金額が高いのでドキドキしますが、無事に利用できる状態になりました。&lt;/p&gt;
&lt;p&gt;引き続き、app storeでの公開に向けての取り組みを記録していきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ReactNativeのアプリをiOSでも動作させる]]></title><description><![CDATA[ReactNative + Expoで作ったアプリをiOS、すなわちapp storeでも公開するために作業中です。 クロスプラットフォーム開発が可能なReactNativeですが、いくつかAndroidと同じプログラムでは旨くいかない箇所がありました。 すでにAndroid…]]></description><link>https://honmushi.com/2019/08/29/reactnative-ios/</link><guid isPermaLink="false">https://honmushi.com/2019/08/29/reactnative-ios/</guid><pubDate>Thu, 29 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ReactNative + Expoで作ったアプリをiOS、すなわちapp storeでも公開するために作業中です。&lt;/p&gt;
&lt;p&gt;クロスプラットフォーム開発が可能なReactNativeですが、いくつかAndroidと同じプログラムでは旨くいかない箇所がありました。&lt;br&gt;
すでにAndroidではアプリを公開していますが、iOSでの開発を進めていくなかで気づく点がありました。忘れないようにこの記事にメモしておきます。&lt;/p&gt;
&lt;p&gt;随時増えていくと思いますので、ドンドン追記していきます。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;app.json にiOS関連の記述を追加する&lt;/li&gt;
&lt;li&gt;アイコンは1024&lt;/li&gt;
&lt;li&gt;borderRadiusが効かない場合がある&lt;/li&gt;
&lt;li&gt;elevetionはiOSでは利用不可&lt;/li&gt;
&lt;li&gt;ReactNavigationのStackNavigatorのヘッダースタイルに差異がある&lt;/li&gt;
&lt;li&gt;StatusBar.currentHeightはiOSでは利用不可&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;app.json にiOS関連の記述を追加する&lt;/h2&gt;
&lt;p&gt;app.jsonにiOSの記述を追加する必要があります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/v34.0.0/workflow/configuration/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v34.0.0/workflow/configuration/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;重要なのは「bundleIdentifier」の項目でしょうか。app storeで管理するIDのようなものです。androidのpackageと同じと考えていいと思います。&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;    &amp;quot;ios&amp;quot;: {
      &amp;quot;bundleIdentifier&amp;quot;: &amp;quot;app storeで登録されるID&amp;quot;,
      &amp;quot;buildNumber&amp;quot;:&amp;quot;1.1.2&amp;quot;,
      &amp;quot;icon&amp;quot;: &amp;quot;./assets/icon_ios.png&amp;quot;,
      &amp;quot;splash&amp;quot;: {
        &amp;quot;backgroundColor&amp;quot;: &amp;quot;#ffffff&amp;quot;,
        &amp;quot;image&amp;quot;: &amp;quot;./assets/splash.png&amp;quot;
      }
    },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;アイコンは1024&lt;/h2&gt;
&lt;p&gt;iOS用のアイコンを用意する必要があります。
調べた所、サイズは1024×1024で、角丸にしてはいけない、その他appleが提示する使用に従う必要があります。&lt;/p&gt;
&lt;p&gt;上記のようにapp.jsonで専用のものを指定する必要があります。&lt;/p&gt;
&lt;p&gt;ビルド時にはこのアイコンをリサイズしてさまざまな画像を用意してくれるそうです。
ビルドをアップロードしたら、app storeで使われるstore アイコン？にもこの画像が利用されました。&lt;/p&gt;
&lt;h2&gt;borderRadiusが効かない場合&lt;/h2&gt;
&lt;p&gt;borderRadius属性が聞いていないものがたまにありました。条件は確実なものはわからなかったのですが、borderがあるか・重なっている背景、などが影響しているようです。&lt;/p&gt;
&lt;p&gt;以下に参考となる情報がありました。&lt;br&gt;
&lt;a href=&quot;https://facebook.github.io/react-native/docs/view-style-props#borderradius&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://facebook.github.io/react-native/docs/view-style-props#borderradius&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;結論、iOSの場合は&lt;code&gt;overflow:&apos;hidden&apos;&lt;/code&gt;を付けることで解決できます。&lt;/p&gt;
&lt;h2&gt;elevetionはiOSでは利用不可&lt;/h2&gt;
&lt;p&gt;ドキュメントにも書かれていましたし、サンプルのアプリでも対応されていたのですでに知っていたのですが、styleの「elevetion」属性はAndroidでしか効きません。&lt;/p&gt;
&lt;p&gt;iOSで実装する場合は以下のように「Platform」を利用して出し分ける必要があります。
必要であればこれに加えて、「zIndex」を使うことになると思います。&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;...Platform.select({
    ios: {
        shadowColor: &amp;#39;black&amp;#39;,
        shadowOffset: { width: 0, height: 3 },
        shadowOpacity: 0.1,
        shadowRadius: 3,
    },
    android: {
        elevation: 20,
    },
}),&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ReactNavigationのStackNavigatorのヘッダースタイルに差異がある&lt;/h2&gt;
&lt;p&gt;StackNavigatorで設置されるヘッダーのスタイルに以下2点の差異を見つけました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;header領域に枠線がある&lt;br&gt;
header領域とscreen領域の間に枠線がでます。
もともとAndroidではデフォルトでelevetionが効いてました。その代替としてborderが有効になっているのではないかと思います。&lt;/p&gt;
&lt;p&gt;不要であればStyleで消すことができます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;headerTitleStyleに枠線が表示されない&lt;br&gt;
header内のタイトル文字の装飾として下線を表示したかったのですが、iOSでは出来ませんでした。&lt;br&gt;
「headerTitleStyle」で下線を指定すればAndroidでは表示されていたのですが、iOSでは表示されませんでした。&lt;/p&gt;
&lt;p&gt;解決方法もまだわかっていません。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;StatusBar.currentHeightはiOSでは利用不可&lt;/h2&gt;
&lt;p&gt;keybordAvoidingViewの動作確認時に発見しました。&lt;br&gt;
以下の記述をしていたため、iOSではエラーが発生しました。&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;keyboardVerticalOffset = {android:Header.HEIGHT + StatusBar.currentHeight}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;StatusBar.currentHeight&lt;/code&gt;はAndroidのみで利用できます。ドキュメントにもありました。&lt;br&gt;
&lt;a href=&quot;https://docs.expo.io/versions/v34.0.0/react-native/statusbar/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/v34.0.0/react-native/statusbar/&lt;/a&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;Constants currentHeight (Android only) The height of the status bar.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;iOSではステータスバーの部分はアプリの領域に含まれていない様子なので、意識しなくとも問題ないようです。&lt;/p&gt;
&lt;p&gt;KeyboardAvoidingViewに関しては、OSごとに出し分ける修正を行うことで解決しました。&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;&amp;lt;KeyboardAvoidingView 
  style={styles.avoidView}
  behavior={&amp;#39;position&amp;#39;}
  keyboardVerticalOffset={Platform.select({
    ios: Header.HEIGHT, // iOS
    android:Header.HEIGHT + StatusBar.currentHeight, // android
  })}
/&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;基本的にはそのまま動作しますが、細かいところでOSの差がでるようです。 &lt;/p&gt;
&lt;p&gt;とはいえReactNativeは十分にクロスプラットフォーム開発と言えるくらいの精度ですので、とても助かります。
1人で両方のアプリが一度に構築できるというのはとても便利です。&lt;/p&gt;
&lt;p&gt;google playとapp storeにも、いくつもフローの違いがあるようでした。
躓いた所はメモしておこうと思っています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「AdMob は app-ads.txt のサポートを開始します」というメールがAdmobから届いたので対応する]]></title><description><![CDATA[2019年8月8日にGoogle Admobから以下のメールが届きました。 ざっくり言うと「app-ads.txt…]]></description><link>https://honmushi.com/2019/08/08/appads/</link><guid isPermaLink="false">https://honmushi.com/2019/08/08/appads/</guid><pubDate>Thu, 08 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2019年8月8日にGoogle Admobから以下のメールが届きました。&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;AdMob は app-ads.txt のサポートを開始します
app-ads.txt 導入の準備はお済みですか？&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ざっくり言うと「app-ads.txt」が導入されるので、不正な利用を防御するために設定するといいですよとのこと。&lt;br&gt;
対応しなくてもすぐに広告が停止されることはなさそうですが、念の為やっておきました&lt;/p&gt;
&lt;h2&gt;結論（対応内容）&lt;/h2&gt;
&lt;p&gt;やることは以下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;admobの管理画面でコードスニペットを取得して  &lt;/li&gt;
&lt;li&gt;storeのウェブサイトに登録しているドメインのルートに  &lt;/li&gt;
&lt;li&gt;「app-ads.txt」で設置する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;詳細は以下です。&lt;/p&gt;
&lt;h3&gt;1.Admob管理画面で状況を確認&lt;/h3&gt;
&lt;p&gt;Admobの管理画面に項目が追加されています。&lt;br&gt;
アプリメニューで「すべてのアプリを表示」を選択すると、アプリ一覧が表示されます。
その画面に以下画像のように「APP-ADS.TXT」のタブが表示されています。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1c3c5883e6bbaf663f129a5941e5e12e/fdaf8/admobapp.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 31.756756756756754%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAzElEQVQY05VRu5LDIAzk///w+kyKBGwDkpAwRifgkqtShJmdXb0FOM6Z6fbDft84hI0Ria/r4tYMxteXcDGBsojGlPTx9JoBtdZTpdYJlu/g7h564drN6IBkWvoBtd+D9Ewy/eUFXsx/erEsPy/t9iOqidld5hRRINaEg2XGPoF55fjDEO2WIPpuiIgaQtA9JtOkOSclQuOsyZ4DAMymycl8I2fosUApZcbGAOfD9p42ChFHkNUeWMfpvdvmMvlln+c52T7N6v5zW2v6C9kW0wmm7F70AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Admobの管理画面&quot;
        title=&quot;Admobの管理画面&quot;
        src=&quot;/static/1c3c5883e6bbaf663f129a5941e5e12e/fcda8/admobapp.png&quot;
        srcset=&quot;/static/1c3c5883e6bbaf663f129a5941e5e12e/12f09/admobapp.png 148w,
/static/1c3c5883e6bbaf663f129a5941e5e12e/e4a3f/admobapp.png 295w,
/static/1c3c5883e6bbaf663f129a5941e5e12e/fcda8/admobapp.png 590w,
/static/1c3c5883e6bbaf663f129a5941e5e12e/fdaf8/admobapp.png 674w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;タブを選択すると、アプリとそこから取得されたデベロッパーのドメインが並んでいます。
私はここに出ているアプリと出ていないアプリがありました。おそらくですがアクセス数やインストール数・広告のリクエスト数などで状況が変わると予測されます。&lt;/p&gt;
&lt;p&gt;この画面にapp-ads.txtの状況が表示されています。設置していなければ、「app-ads.txt ファイルが見つかりません」でステータスもグレーです。正しく設置すれば表示が変わり緑色に、間違っていれば赤色になるようです。&lt;/p&gt;
&lt;h3&gt;2.app-ads.txtを設置&lt;/h3&gt;
&lt;p&gt;「APP-ADS.TXT」のタブの右上の「APP-ADS.TXTの設定方法」を選択すると手順が表示されるので、それにしたがって進めます。&lt;/p&gt;
&lt;p&gt;ざっくりとは、ここに表示されるスニペットをそのままコピーして、デベロッパーのサイトとしてストアに登録しているドメインのルートにファイル名「app-ads.txt」で設置します。&lt;br&gt;
例えば、「sampledomain.com/app-ads.txt」です。&lt;/p&gt;
&lt;h3&gt;3.反映されたか確認&lt;/h3&gt;
&lt;p&gt;反映には少なくとも24時間かかるそうなので、気長に待ちましょう。反映されたら「APP-ADS.TXT」のタブの表示が変わると思いますので、正常に反映されたら画像を貼っておきます。&lt;/p&gt;
&lt;h4&gt;[追記] 翌日見ると以下の画像のようになっていました。&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 169px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c0c35930a91f4b9a51d2b71154078d07/d23e3/admobapp1.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 158.10810810810813%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAACXBIWXMAAAsTAAALEwEAmpwYAAADIUlEQVRIx61V6W7bMAzeA2+PsyfZfm0DumHBDqxY28Vpc9htDts5ndixHd/6Rsp26qPpWqwGPoiiKJLSJ9KvgjBCGMU4BCFClglBGCKojaX+Xhc2UNq9Kh16/gFpmuJ/v5pDQGA2GaPfH0DXZ7juKZjOdGgjFYahQ+n1cH7+C11FgTlfYDYdY7VeQ1NVDIZDjEbDpkNgThvZYLnkDVPMaaNpGLBtG/PFggLpWK1W2O1scmZh57iwnT2s7RabzbruUGQZbdzJ7AaDATld4euXM3Q6HaiqJrNUKdsF6Q+HCMM58FlJsXRPHDkjhyFduu/7CIJAwnU5A5scBLRGOkJENpLISMA9CESpkNclhKg7TJJERuEFds4jo9RVIdczIlGkJKeSUEbLYeng1MebHrNpHZmNx+MJVE2DZVm4uenTZW/QpzvlOX9RFBHL84Kopbxrvtf1etN2yBmMRiNMJlPJnKL0YJomul1Fsssf3/HviyuMyWZEZN1RApyEQXbPftgc9EkPe+96sPcuXM+HQzKj1EnZy+d7Wj/qCeV6iZrDre1IpV0YMjx6Lk0dz33a59Gzaq7XHO7oxTuVrHj88PETZroBl65EnoBGk4jofPuOi6suLv90sSQyOPOTDu/h4ppYXm2s4wbWW1R2QyJDuxtjSsF4Xtq3jsybdgVY9qmtOUUwuca1u/fkUV0/KDL3Cn3FIZNxoDthOYyiI1iX21RQ6X/BqX7oF+/wRfth+Q7L0spEhtdnb9HfzvKykwEF9tQQLsdUAPMUupXhRs9lRqtSkPeN4/j+9ic2gVMLlJKZ7QvsPEHPhzpOkAfhsZVhs6tUK6Sufxg1h3EcS6dJco8wjhBTF2rq4ziHlMt5cuLID33ipUh5Q6QMGqTwXXUnKbRlCnObYWimuCVZW/wjw1OkJGS23gsJdi4J8vOx1bGzor2XOHbqik6IrEJEVkOblKLJlgiIlCRlUur6I0ENsp5Bini5SilJKQPyI76iSlGJBIMqpW/ksnqKlOqv893tD2wOzUoR2FKVbN28UjiA4+fj0yvlCVXSqpTogUphHbNf1T2Gv0UcsA4F6gOqAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Admobの管理画面のステータスがグリーン&quot;
        title=&quot;Admobの管理画面のステータスがグリーン&quot;
        src=&quot;/static/c0c35930a91f4b9a51d2b71154078d07/d23e3/admobapp1.png&quot;
        srcset=&quot;/static/c0c35930a91f4b9a51d2b71154078d07/12f09/admobapp1.png 148w,
/static/c0c35930a91f4b9a51d2b71154078d07/d23e3/admobapp1.png 169w&quot;
        sizes=&quot;(max-width: 169px) 100vw, 169px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
表示がグリーンになりました。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 333px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/17dadfbe3e2fe65d210547481c6d0676/24c7e/admobapp2.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 97.2972972972973%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAAsTAAALEwEAmpwYAAACNUlEQVQ4y61U25KbMAzl/z+v0+4uTdpswm4S7jeDbQhodWRMSTuZyUOZOWNZsuWjG4E2lp6BsW5te0uK0el79NrZg2cdWnZYK0vhh6Hdp6H92dAhNnSMnRyl7qHADiMN420F9o9g7MDr8I/O2JE0r8KwaRoqy5KqqpK1bVvqup7RrfA6rTUZY6jv+0XXiayUEv3ADwR5llOaJJQkMaVZJk7runH7NKEMuqIQB94JSOR5Lmuz6OFYHNJ//CyHHUzTRACS3vdacjTNs+hut4lDsQLYEBrC9ne2mPmOOPTekQOEgAvbD3sAtozTU9f1Q4YSsuJktygCM+i04dJr2asFoheb5l4zIvs723OiUx0FZdNSyUX4uf9F376/ULjbU15WVLWKMl5f3kL68RrS/veBDseI3tiOs9i/hjtK84KqxQfWAF5brpzyTMAQOtHfM18BRpvzcgfVB8NZCjBL6QtuD7QMkoxv5EaP45iRLLaaWykV1JzTKPqg6/XKLVS4wnJBxSFQcmPjYFXVXN3bmmQUAj2GLhj4AornZVTe7935TdtsPzD2ejj3DsZxFBltBFlzKiDD5ltP2gYME2YXRRFPSLJhONDh/Z3O54tMDMYT4QOQj8cT284cWSY+Bn5kZYh84VU4u63spqenBA7xi1tziDw1y6wiZHxwfrlcHEOeXccwXhmeTqeVvTDcFgUXcBlDD6auyqP8LP4UYhTZ/VkGeRxTBJuM3qOizLMvynynA7b7v22Y5S/Xm8MR20vJAwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Admobの管理画面の詳細も確認&quot;
        title=&quot;Admobの管理画面の詳細も確認&quot;
        src=&quot;/static/17dadfbe3e2fe65d210547481c6d0676/24c7e/admobapp2.png&quot;
        srcset=&quot;/static/17dadfbe3e2fe65d210547481c6d0676/12f09/admobapp2.png 148w,
/static/17dadfbe3e2fe65d210547481c6d0676/e4a3f/admobapp2.png 295w,
/static/17dadfbe3e2fe65d210547481c6d0676/24c7e/admobapp2.png 333w&quot;
        sizes=&quot;(max-width: 333px) 100vw, 333px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
詳細も「app-ads.txt ファイルが見つかり、確認されました」になってます。反映されました。&lt;/p&gt;
&lt;p&gt;自分が公開しているアプリの他に「Expo」アプリの表示もあります。多分以下のどれかが原因で「このアプリでもAdmob使ったよね」って言われているのだと思います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expoクライアントアプリを使って実機テストしているときに、admobのテスト広告を表示した。&lt;/li&gt;
&lt;li&gt;ExpoSDKを使用している&lt;/li&gt;
&lt;li&gt;Expoでアプリをビルドした&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Expoアプリの所持者でもありませんし、もちろんExpoクライアントアプリで広告出すこともないので、一旦おいておきます。&lt;/p&gt;
&lt;h2&gt;app-ads.txtとは&lt;/h2&gt;
&lt;p&gt;基本的なことは以下に記載されています。&lt;br&gt;
&lt;a href=&quot;https://support.google.com/admob/answer/9363762#&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Admobヘルプ app-ads.txt の概要&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adsenseのads.txtのAdmob版のようです。なりすましの被害などを防ぐために作られたものだそうです。&lt;br&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;app-ads.txt の使用は必須ではありませんが、強く推奨されています。
特に自社アプリがなりすましの被害を受けていることが懸念される場合は、使用をおすすめします。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;届いたメールには「2019-08-08よりapp-ads.txtのサポートを開始します」とあり、ちょっと焦るかもしれませんが、急いで対応しなくても多分ペナルティ等はなさそうです。&lt;/p&gt;
&lt;p&gt;アプリのなりすまし？や広告の不正配信などで被害が有る場合は、app-ads.txtで解決できるかもとのことです。
&lt;a href=&quot;https://www.blog.google/products/admob/app-ads-txt-protects-app-revenue-and-brand/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.blog.google/products/admob/app-ads-txt-protects-app-revenue-and-brand/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ただし、Adsenseのads.txtと同様に間違った内容で設置していると、警告がでるらしいです。そのまま放置すると広告のブロック等のペナルティを受けるようですので気をつけましょう。&lt;/p&gt;
&lt;p&gt;アプリのなりすましというのはどういう攻撃なのか、今度調べようと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Emmet-vimでReactNative用のsnippetを作成]]></title><description><![CDATA[React Nativeでは表示についてcssに似た記法の「Style」で指定することが出来ます。
しかし、ReactNativeのStyle…]]></description><link>https://honmushi.com/2019/08/01/emmet-react-native/</link><guid isPermaLink="false">https://honmushi.com/2019/08/01/emmet-react-native/</guid><pubDate>Thu, 01 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeでは表示についてcssに似た記法の「Style」で指定することが出来ます。
しかし、ReactNativeのStyleはキャメルケースで記述しないといけません。&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;const styles = StyleSheet.create({
  inputName: {
    borderWidth: 1,
    borderColor: &amp;#39;#DDD&amp;#39;,
    width: &amp;quot;80%&amp;quot;,
    marginBottom: 20,
  },
})&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これ書くのがいつも面倒だったので、なんとか出来ないかやってみました。
ちなみに私は開発ではVimを使っています。UbuntuでVimです。
もともとcssなんかを書く際にはEmmet-vimを使っていたので、これをカスタマイズして使うのがいいかなと思いました。&lt;/p&gt;
&lt;h2&gt;結論&lt;/h2&gt;
&lt;p&gt;Emmet-vimにオリジナルのsnippetを追加することで解決しました。&lt;/p&gt;
&lt;p&gt;軽く調べた所、VSCodeで使えるプラグイン？で以下を見つけました。&lt;br&gt;
&lt;a href=&quot;https://saugatmaharjan.github.io/react-native-emmet/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;react-native-emmet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;まさにこれがやりたいのですが、vimには対応していませんでした。しかし、このプラグインのsnippetの内容が公開されていたので、それを参考にして自分用のsnippetを作成しました。&lt;br&gt;
&lt;a href=&quot;https://gist.github.com/saugatmaharjan/493ab5eaaf1a29eaba1b3e73119df1c4&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;react-native-emmetのsnippetの内容&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;カスタムsnippetファイルを作る&lt;/li&gt;
&lt;li&gt;vimrcに設定ファイルを記載&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;カスタムsnippetファイルを作る&lt;/h2&gt;
&lt;p&gt;今回のReactNative用のsnippetを作成しました。&lt;code&gt;snippets_custom.json&lt;/code&gt;などの名前で保存します。
&lt;a href=&quot;https://docs.emmet.io/customization/snippets/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Emmet&lt;/a&gt;のサイトにカスタマイズの書き方など載っているので参考にするといいです。&lt;/p&gt;
&lt;p&gt;今回は以下のVSCodeのプラグインの定義を見つけたので、そちらを書き直して作成しました。&lt;br&gt;
&lt;a href=&quot;https://gist.github.com/saugatmaharjan/493ab5eaaf1a29eaba1b3e73119df1c4&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;react-native-emmetのsnippetの内容&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下&lt;code&gt;snippets_custom.json&lt;/code&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;{
  &amp;quot;javascript&amp;quot;: {
    &amp;quot;filters&amp;quot;: &amp;quot;html&amp;quot;,
    &amp;quot;profile&amp;quot;: &amp;quot;javascript&amp;quot;,
    &amp;quot;snippets&amp;quot;: {
      &amp;quot;create&amp;quot;: &amp;quot;const styles = StyleSheet.create({})&amp;quot;,
      &amp;quot;pselect&amp;quot;: &amp;quot;...Platform.select({ ios: {}, android: {}})&amp;quot;,
      &amp;quot;sdw&amp;quot;: &amp;quot;...Platform.select({ ios: { ...shadowProperties }, android: { elevation }}),&amp;quot;,
      &amp;quot;v&amp;quot;: &amp;quot;&amp;lt;View style={{}}&amp;gt;&amp;lt;/View&amp;gt;&amp;quot;,
      &amp;quot;te&amp;quot;: &amp;quot;&amp;lt;Text style={{}}&amp;gt;&amp;lt;/Text&amp;gt;&amp;quot;,
      &amp;quot;v&amp;gt;te&amp;quot;: &amp;quot;&amp;lt;View&amp;gt;&amp;lt;Text&amp;gt;&amp;lt;/Text&amp;gt;&amp;lt;/View&amp;gt;&amp;quot;,
      &amp;quot;img&amp;quot;: &amp;quot;&amp;lt;Image source={{}} style={{}} /&amp;gt;&amp;quot;,
      &amp;quot;fl&amp;quot;:  &amp;quot;&amp;lt;FlatList data={} renderItem={} /&amp;gt;&amp;quot;,
      &amp;quot;sl&amp;quot;: &amp;quot;&amp;lt;SectionList data={} renderItem={} /&amp;gt;&amp;quot;,
      &amp;quot;sv&amp;quot;: &amp;quot;&amp;lt;ScrollView&amp;gt;&amp;lt;/ScrollView&amp;gt;&amp;quot;,
      &amp;quot;ti&amp;quot;: &amp;quot;&amp;lt;TextInput value={} placeholder=&amp;#39;&amp;#39; underlineColorAndroid={false} onChange={} /&amp;gt;&amp;quot;,
      &amp;quot;mdl&amp;quot;: &amp;quot;&amp;lt;Modal visible={} animation=&amp;#39;slide&amp;#39;&amp;gt;&amp;lt;/Modal&amp;gt;&amp;quot;,
      &amp;quot;to&amp;quot;: &amp;quot;&amp;lt;TouchableOpacity style={} onPress={}&amp;gt;&amp;lt;/TouchableOpacity&amp;gt;&amp;quot;,
      &amp;quot;twf&amp;quot;: &amp;quot;&amp;lt;TouchableWidthoutFeedback style={} onPress={}&amp;gt;&amp;lt;/TouchableWidthoutFeedback&amp;gt;&amp;quot;,
      &amp;quot;th&amp;quot;: &amp;quot;&amp;lt;TouchableHighlight style={{}} onPress={}&amp;gt;&amp;lt;/TouchableHighlight&amp;gt;&amp;quot;,
      &amp;quot;twnf&amp;quot;: &amp;quot;&amp;lt;TouchableWithNativeFeedback style={} onPress={}&amp;gt;&amp;lt;/TouchableWithNativeFeedback&amp;gt;&amp;quot;,
      &amp;quot;actind&amp;quot;: &amp;quot;&amp;lt;ActivityIndicator color=&amp;#39;#00ff00&amp;#39; /&amp;gt;&amp;quot;,
      &amp;quot;btn&amp;quot;: &amp;quot;&amp;lt;Button color=&amp;#39;#00ff00&amp;#39; title=&amp;#39;button&amp;#39; onPress={} /&amp;gt;&amp;quot;,
      &amp;quot;pos&amp;quot;: &amp;quot;position: &amp;#39;absolute&amp;#39;,&amp;quot;,
      &amp;quot;pos:a&amp;quot;: &amp;quot;position: &amp;#39;absolute&amp;#39;,&amp;quot;,
      &amp;quot;pos:r&amp;quot;: &amp;quot;position: &amp;#39;relative&amp;#39;,&amp;quot;,
      &amp;quot;t&amp;quot;: &amp;quot;top: 0,&amp;quot;,
      &amp;quot;t:a&amp;quot;: &amp;quot;top: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;r&amp;quot;: &amp;quot;right: 0,&amp;quot;,
      &amp;quot;r:a&amp;quot;: &amp;quot;right: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;b&amp;quot;: &amp;quot;bottom: 0,&amp;quot;,
      &amp;quot;b:a&amp;quot;: &amp;quot;bottom: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;l&amp;quot;: &amp;quot;left: 0,&amp;quot;,
      &amp;quot;l:a&amp;quot;: &amp;quot;left: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;z&amp;quot;: &amp;quot;zIndex: 2,&amp;quot;,
      &amp;quot;ov&amp;quot;: &amp;quot;overflow: &amp;#39;hidden&amp;#39;,&amp;quot;,
      &amp;quot;ov:v&amp;quot;: &amp;quot;overflow: &amp;#39;visible&amp;#39;,&amp;quot;,
      &amp;quot;ov:h&amp;quot;: &amp;quot;overflow: &amp;#39;hidden&amp;#39;,&amp;quot;,
      &amp;quot;m&amp;quot;: &amp;quot;margin: 4,&amp;quot;,
      &amp;quot;m:a&amp;quot;: &amp;quot;margin: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;mt&amp;quot;: &amp;quot;marginTop: 4,&amp;quot;,
      &amp;quot;mt:a&amp;quot;: &amp;quot;marginTop: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;mr&amp;quot;: &amp;quot;marginRight: 4,&amp;quot;,
      &amp;quot;mr:a&amp;quot;: &amp;quot;marginRight: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;mb&amp;quot;: &amp;quot;marginBottom: 4,&amp;quot;,
      &amp;quot;mb:a&amp;quot;: &amp;quot;marginBottom: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;ml&amp;quot;: &amp;quot;marginLeft: 4,&amp;quot;,
      &amp;quot;ml:a&amp;quot;: &amp;quot;marginLeft: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;p&amp;quot;: &amp;quot;padding: 4,&amp;quot;,
      &amp;quot;pt&amp;quot;: &amp;quot;paddingTop: 4,&amp;quot;,
      &amp;quot;pr&amp;quot;: &amp;quot;paddingRight: 4,&amp;quot;,
      &amp;quot;pb&amp;quot;: &amp;quot;paddingBottom: 4,&amp;quot;,
      &amp;quot;pl&amp;quot;: &amp;quot;paddingLeft: 4,&amp;quot;,
      &amp;quot;w&amp;quot;: &amp;quot;width: 120,&amp;quot;,
      &amp;quot;w:a&amp;quot;: &amp;quot;width: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;h&amp;quot;: &amp;quot;height: 120,&amp;quot;,
      &amp;quot;h:a&amp;quot;: &amp;quot;height: &amp;#39;auto&amp;#39;,&amp;quot;,
      &amp;quot;maxw&amp;quot;: &amp;quot;maxWidth: 120,&amp;quot;,
      &amp;quot;maxh&amp;quot;: &amp;quot;maxHeight: 120,&amp;quot;,
      &amp;quot;minw&amp;quot;: &amp;quot;minWidth: 120,&amp;quot;,
      &amp;quot;minh&amp;quot;: &amp;quot;minHeight: 120,&amp;quot;,
      &amp;quot;bc&amp;quot;: &amp;quot;borderColor: &amp;#39;#000&amp;#39;,&amp;quot;,
      &amp;quot;bc:t&amp;quot;: &amp;quot;borderColor: &amp;#39;transparent&amp;#39;,&amp;quot;,
      &amp;quot;bw&amp;quot;: &amp;quot;borderWidth: 1,&amp;quot;,
      &amp;quot;btw&amp;quot;: &amp;quot;borderTopWidth: 1,&amp;quot;,
      &amp;quot;brw&amp;quot;: &amp;quot;borderRightWidth: 1,&amp;quot;,
      &amp;quot;bbw&amp;quot;: &amp;quot;borderBottomWidth: 1,&amp;quot;,
      &amp;quot;blw&amp;quot;: &amp;quot;borderLeftWidth: 1,&amp;quot;,
      &amp;quot;btc&amp;quot;: &amp;quot;borderTopColor: &amp;#39;#000&amp;#39;,&amp;quot;,
      &amp;quot;btc:t&amp;quot;: &amp;quot;borderTopColor: &amp;#39;transparent&amp;#39;,&amp;quot;,
      &amp;quot;brc&amp;quot;: &amp;quot;borderRightColor: &amp;#39;#000&amp;#39;,&amp;quot;,
      &amp;quot;brc:t&amp;quot;: &amp;quot;borderRightColor: &amp;#39;transparent&amp;#39;,&amp;quot;,
      &amp;quot;bbc&amp;quot;: &amp;quot;borderBottomColor: &amp;#39;#000&amp;#39;,&amp;quot;,
      &amp;quot;bbc:t&amp;quot;: &amp;quot;borderBottomColor: &amp;#39;transparent&amp;#39;,&amp;quot;,
      &amp;quot;blc&amp;quot;: &amp;quot;borderLeftColor: &amp;#39;#000&amp;#39;,&amp;quot;,
      &amp;quot;blc:t&amp;quot;: &amp;quot;borderLeftColor: &amp;#39;transparent&amp;#39;,&amp;quot;,
      &amp;quot;br&amp;quot;: &amp;quot;borderRadius: 4,&amp;quot;,
      &amp;quot;bgc&amp;quot;: &amp;quot;backgroundColor: &amp;#39;#fff&amp;#39;,&amp;quot;,
      &amp;quot;bgc:t&amp;quot;: &amp;quot;backgroundColor: &amp;#39;transparent&amp;#39;,&amp;quot;,
      &amp;quot;c&amp;quot;: &amp;quot;color: &amp;#39;#333&amp;#39;,&amp;quot;,
      &amp;quot;c:r&amp;quot;: &amp;quot;color: &amp;#39;rgb(0, 0, 0)&amp;#39;,&amp;quot;,
      &amp;quot;c:ra&amp;quot;: &amp;quot;color: &amp;#39;rgba(0, 0, 0, 0.5)&amp;#39;,&amp;quot;,
      &amp;quot;ta&amp;quot;: &amp;quot;textAlign: &amp;#39;center&amp;#39;,&amp;quot;,
      &amp;quot;ta:l&amp;quot;: &amp;quot;textAlign: &amp;#39;left&amp;#39;,&amp;quot;,
      &amp;quot;ta:c&amp;quot;: &amp;quot;textAlign: &amp;#39;center&amp;#39;,&amp;quot;,
      &amp;quot;ta:r&amp;quot;: &amp;quot;textAlign: &amp;#39;right&amp;#39;,&amp;quot;,
      &amp;quot;ta:j&amp;quot;: &amp;quot;textAlign: &amp;#39;justify&amp;#39;,&amp;quot;,
      &amp;quot;td&amp;quot;: &amp;quot;textDecoration: &amp;#39;underline&amp;#39;,&amp;quot;,
      &amp;quot;t:s&amp;quot;: &amp;quot;transform: [{ scale: 1.2 }]&amp;quot;,
      &amp;quot;t:sx&amp;quot;: &amp;quot;transform: [{ scaleX: 1.2 }]&amp;quot;,
      &amp;quot;t:sy&amp;quot;: &amp;quot;transform: [{ scaleY: 1.2 }]&amp;quot;,
      &amp;quot;t:r&amp;quot;: &amp;quot;transform: [{ rotate: &amp;#39;90deg&amp;#39; }]&amp;quot;,
      &amp;quot;t:rx&amp;quot;: &amp;quot;transform: [{ rotateX: &amp;#39;90deg&amp;#39; }]&amp;quot;,
      &amp;quot;t:ry&amp;quot;: &amp;quot;transform: [{ rotateY: &amp;#39;90deg&amp;#39; }]&amp;quot;,
      &amp;quot;t:rz&amp;quot;: &amp;quot;transform: [{ rotateZ: &amp;#39;90deg&amp;#39; }]&amp;quot;,
      &amp;quot;t:tx&amp;quot;: &amp;quot;transform: [{ translateX: x }]&amp;quot;,
      &amp;quot;t:ty&amp;quot;: &amp;quot;transform: [{ translateY: y }]&amp;quot;,
      &amp;quot;lh&amp;quot;: &amp;quot;lineHeight: 24,&amp;quot;,
      &amp;quot;ls&amp;quot;: &amp;quot;letterSpacing: 1,&amp;quot;,
      &amp;quot;fw&amp;quot;: &amp;quot;fontWeight: 600,&amp;quot;,
      &amp;quot;fw:b&amp;quot;: &amp;quot;fontWeight: &amp;#39;bold&amp;#39;,&amp;quot;,
      &amp;quot;fst&amp;quot;: &amp;quot;fontStyle: &amp;#39;italic&amp;#39;,&amp;quot;,
      &amp;quot;fst:i&amp;quot;: &amp;quot;fontStyle: &amp;#39;italic&amp;#39;,&amp;quot;,
      &amp;quot;fs&amp;quot;: &amp;quot;fontSize: 14,&amp;quot;,
      &amp;quot;ff&amp;quot;: &amp;quot;fontFamily: &amp;#39;Roboto&amp;#39;,&amp;quot;,
      &amp;quot;o&amp;quot;: &amp;quot;opacity: 0.5,&amp;quot;,
      &amp;quot;fd&amp;quot;: &amp;quot;flexDirection: &amp;#39;row&amp;#39;,&amp;quot;,
      &amp;quot;fd:r&amp;quot;: &amp;quot;flexDirection: &amp;#39;row&amp;#39;,&amp;quot;,
      &amp;quot;fd:rr&amp;quot;: &amp;quot;flexDirection: &amp;#39;row-reverse&amp;#39;,&amp;quot;,
      &amp;quot;fd:c&amp;quot;: &amp;quot;flexDirection: &amp;#39;column&amp;#39;,&amp;quot;,
      &amp;quot;fd:cr&amp;quot;: &amp;quot;flexDirection: &amp;#39;column-reverse&amp;#39;,&amp;quot;,
      &amp;quot;fwrap&amp;quot;: &amp;quot;flexWrap: &amp;#39;wrap&amp;#39;,&amp;quot;,
      &amp;quot;fwrap:n&amp;quot;: &amp;quot;flexWrap: &amp;#39;nowrap&amp;#39;,&amp;quot;,
      &amp;quot;fwrap:w&amp;quot;: &amp;quot;flexWrap: &amp;#39;wrap&amp;#39;,&amp;quot;,
      &amp;quot;jc&amp;quot;: &amp;quot;justifyContent: &amp;#39;center&amp;#39;,&amp;quot;,
      &amp;quot;jc:fs&amp;quot;: &amp;quot;justifyContent: &amp;#39;flex-start&amp;#39;,&amp;quot;,
      &amp;quot;jc:fe&amp;quot;: &amp;quot;justifyContent: &amp;#39;flex-end&amp;#39;,&amp;quot;,
      &amp;quot;jc:c&amp;quot;: &amp;quot;justifyContent: &amp;#39;center&amp;#39;,&amp;quot;,
      &amp;quot;jc:se&amp;quot;: &amp;quot;justifyContent: &amp;#39;center&amp;#39;,&amp;quot;,
      &amp;quot;jc:sb&amp;quot;: &amp;quot;justifyContent: &amp;#39;space-between&amp;#39;,&amp;quot;,
      &amp;quot;jc:sa&amp;quot;: &amp;quot;justifyContent: &amp;#39;space-around&amp;#39;,&amp;quot;,
      &amp;quot;ai&amp;quot;: &amp;quot;alignItems: &amp;#39;center&amp;#39;,&amp;quot;,
      &amp;quot;ai:fs&amp;quot;: &amp;quot;alignItems: &amp;#39;flex-start&amp;#39;,&amp;quot;,
      &amp;quot;ai:fe&amp;quot;: &amp;quot;alignItems: &amp;#39;flex-end&amp;#39;,&amp;quot;,
      &amp;quot;ai:c&amp;quot;: &amp;quot;alignItems: &amp;#39;center&amp;#39;,&amp;quot;,
      &amp;quot;ai:s&amp;quot;: &amp;quot;alignItems: &amp;#39;stretch&amp;#39;,&amp;quot;,
      &amp;quot;f&amp;quot;: &amp;quot;flex: 1,&amp;quot;,
      &amp;quot;as&amp;quot;: &amp;quot;alignSelf: &amp;#39;center&amp;#39;,&amp;quot;,
      &amp;quot;mh&amp;quot;: &amp;quot;marginHorizontal: 16,&amp;quot;,
      &amp;quot;mv&amp;quot;: &amp;quot;marginVertical: 16,&amp;quot;,
      &amp;quot;bfv:v&amp;quot;: &amp;quot;backfaceVisibility: &amp;#39;visible&amp;#39;,&amp;quot;,
      &amp;quot;bblr&amp;quot;: &amp;quot;borderBottomLeftRadius: 4,&amp;quot;,
      &amp;quot;bbrr&amp;quot;: &amp;quot;borderBottomRightRadius: 4,&amp;quot;,
      &amp;quot;btlr&amp;quot;: &amp;quot;borderTopLeftRadius: 4,&amp;quot;,
      &amp;quot;btrr&amp;quot;: &amp;quot;borderTopRightRadius: 4,&amp;quot;,
      &amp;quot;rm&amp;quot;: &amp;quot;resizeMode: &amp;#39;cover&amp;#39;,&amp;quot;,
      &amp;quot;ovclr&amp;quot;: &amp;quot;overlayColor: &amp;#39;#fff&amp;#39;,&amp;quot;,
      &amp;quot;bs&amp;quot;: &amp;quot;borderStyle: &amp;#39;dashed&amp;#39;,&amp;quot;,
      &amp;quot;elv&amp;quot;: &amp;quot;elevation: 4&amp;quot;,
      &amp;quot;tsc&amp;quot;: &amp;quot;textShadowColor: &amp;#39;#000&amp;#39;,&amp;quot;,
      &amp;quot;tso&amp;quot;: &amp;quot;textShadowOffset: { width: 0, height: 4 },&amp;quot;,
      &amp;quot;tsr&amp;quot;: &amp;quot;textShadowRadius:  2,&amp;quot;,
      &amp;quot;tav&amp;quot;: &amp;quot;textAlignVertical: &amp;#39;center&amp;#39;,&amp;quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;vimrcに設定ファイルを記載&lt;/h2&gt;
&lt;p&gt;Emmet-vimのドキュメントにもありますが、オリジナルの設定を追加出来ます。&lt;br&gt;
&lt;a href=&quot;https://github.com/mattn/emmet-vim&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Emmet-vim&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;.vimrcに上記で作成したカスタムsnippetファイルを指定します。&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 g:user_emmet_settings = webapi#json#decode(join(readfile(expand(&amp;#39;~/.vim/custom/snippets_custom.json&amp;#39;)), &amp;quot;\n&amp;quot;))&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;web-apiを有効にする&lt;/h3&gt;
&lt;p&gt;JSONパーサーを含んでいるweb-apiというプラグインが必要です。&lt;br&gt;
無い場合は用意しておきましょう。Emmet-vimと同様にVimにインストールすればいいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;これでReactNativeのStyle定義のEmmetが動作するようになりました。ファイルが&lt;code&gt;.js&lt;/code&gt;すなわちJavaScriptの場合はこのsnippetが適応されるようになっています。&lt;/p&gt;
&lt;p&gt;細かいところは改良が出来ますし、他の拡張子に対しての設定や追加・継承なんかも出来ます。&lt;/p&gt;
&lt;p&gt;そういえば&lt;code&gt;neosnippet.vim&lt;/code&gt;を使うという手段もあったんですが、どっちが良かったんでしょうかね。
今のところはReact Nativeの記法は&lt;code&gt;Emmet-vim&lt;/code&gt;で、JavaScriptの基本構文は&lt;code&gt;neosnippet&lt;/code&gt;という棲み分けになってます。
私はそれぞれ&lt;code&gt;&amp;#x3C;C-e&gt;&lt;/code&gt;と&lt;code&gt;&amp;#x3C;C-k&gt;&lt;/code&gt;に割り当ててます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[スマホアプリ開発でFirestoreを使ってみる]]></title><description><![CDATA[最近React NativeとExpoを利用してスマホアプリを作っています。
いくつかAndroidで公開もしているので興味があればこちらからどうぞ。 そのなかでもいくつかのアプリについてはFirebaseをバックエンドとして利用しました。
Firebaseは認証やDB…]]></description><link>https://honmushi.com/2019/07/31/firestore/</link><guid isPermaLink="false">https://honmushi.com/2019/07/31/firestore/</guid><pubDate>Wed, 31 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近React NativeとExpoを利用してスマホアプリを作っています。
いくつかAndroidで公開もしているので興味があれば&lt;a href=&quot;/2019/07/24/expo-app-make/&quot;&gt;こちらからどうぞ&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;そのなかでもいくつかのアプリについてはFirebaseをバックエンドとして利用しました。
Firebaseは認証やDB、ストレージなどを提供するWebアプリケーション開発プラットフォームというようなGoogleのサービスです。&lt;/p&gt;
&lt;p&gt;今回はその中でも「Firestore」というデータベースを使った感想を記録します。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;サーバレスという概念&lt;/li&gt;
&lt;li&gt;Authとの連携&lt;/li&gt;
&lt;li&gt;NoSQL型&lt;/li&gt;
&lt;li&gt;クエリによるデータの取得 &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;サーバレスという概念&lt;/h2&gt;
&lt;p&gt;よく考えたらややこしいのですが。Firebaseを使う場合でもAPIを用意したり、DBとしてデータを保持します。&lt;/p&gt;
&lt;p&gt;それってサーバじゃない？と思いますが、大きく違うのはサーバの管理が不要ということです。
サーバがちゃんと動いているかとかサービス立ち上げるとかがほぼ不要で、簡単に始めることができ管理も簡単です。
アプリから直接DBサーバに同期するここもでき、使いどころに注意が必要ですが簡単に難しい機能を実現できます。&lt;/p&gt;
&lt;p&gt;最初にアプリケーションを設定が必要だったり、必要な機能を有効にしたりする必要はありますが、ブラウザから設定できます。
APIなどのソースコードをデプロイするのもとても簡単です。できることは制限されますが、その分簡単に利用できます。
ログなんかもブラウザで確認出来ます。DBもです。&lt;/p&gt;
&lt;p&gt;バックエンドの経験もある私の使用感としては、サーバ管理のコストが大幅に減ることが大きく実感しました。&lt;/p&gt;
&lt;h2&gt;Authとの連携&lt;/h2&gt;
&lt;p&gt;Firestoreにはセキュリティルールをもうけることが出来ます。誰でもデータの読み取り・書き込みできては困るので、通常制御すると思います。&lt;/p&gt;
&lt;p&gt;Firebase のAuthenticationと組み合わせて使うことで、「ログインしている場合のみデータへのアクセス可能」と言ったセキュリティルールを実現できます。Functions経由の場合はログインは不要でした。この使い方も便利そうでした。&lt;/p&gt;
&lt;h2&gt;NoSQL型&lt;/h2&gt;
&lt;p&gt;FirestoreはNoSQLと呼ばれるDBを採用しており、RDBとは大きく違います。RDBで当たり前のようにやっていたことができなかったりしますが、そもそもの仕組みが違うため概念から改めて考え直す必要があります。&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;/p&gt;
&lt;h3&gt;「!=」は使えない&lt;/h3&gt;
&lt;p&gt;クエリを使ってコレクション内のドキュメントを絞り込んで取得するのですが、「=」や「&gt;」なんかは使えますが、「!=」は利用できません。
説明では「&gt;」の結果と「&amp;#x3C;」の結果を合わせることで実現できると書かれていました。ちょっと不便ですね。&lt;/p&gt;
&lt;p&gt;ただ、「!=」を使うことがそもそもNoSQL的には良くない操作のように感じました。ドキュメントのIDのを指定して1件のみを取り出して実現する仕組みを考えたほうがいいです。&lt;/p&gt;
&lt;p&gt;Firebaseの料金プラン的にも、Firestoreで取り出したドキュメントの読み取り件数がカウントされています。「!=」のように大量のドキュメントを取得するかもしれない操作は避けたほうがいいです。少なくともlimit付けるようにしたほうが良いかなと思います。&lt;/p&gt;
&lt;h3&gt;「count」も工夫が必要&lt;/h3&gt;
&lt;p&gt;上記の取得件数によって料金が決まることがあり、ドキュメントの件数を取得するのにも工夫が必要です。
クエリに「count」はありませんので、普通にやるのであれば全件取得して、プログラム側でlengthを取得することになります。
これではFirebaseの従量にも、端末のメモリにも大きく不可を与えてしまうので避けたほうが良さそうです&lt;/p&gt;
&lt;p&gt;公式では「分散カウンタ」と呼ばれる方式をおすすめしていました。ややこしいですが、件数が増える度に数を記録する用のコレクションに複数のドキュメントを作成しておく、というものです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://firebase.google.com/docs/firestore/solutions/counters?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;分散カウンタについて&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ドキュメントが書き込まれると、件数用コレクションのドキュメントの数値を1インクリメントする。countする場合はその件数用のドキュメント1件を読み取ることで取得。&lt;/li&gt;
&lt;li&gt;しかし、Firebaseにはドキュメントは更新後、1秒間は更新出来ません。上記のインクリメントはリアルタイムでの更新が多いと大きなボトルネックになってしまいます。&lt;/li&gt;
&lt;li&gt;そこで、件数用コレクション内にドキュメントを複数個用意します。ドキュメント書き込みの際にはこれらのどれかをインクリメントします。countを行う際はこれらの複数個のドキュメントを取得して数値を足し合わせて取得します。&lt;/li&gt;
&lt;li&gt;これによって、書き込み時のボトルネックは用意したドキュメントの数分軽減されます。読み取りの際はドキュメントの数分の読み取り件数が消費されますが、固定値にできます。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;こんな感じで、RDBとは似ているようで異なる概念になっており、使い勝手が大きく異なります。
今までの経験からRDBの利用方法を前提として考えてしまいがちですが、そもそもの仕組みが異なりますので、一度頭を空っぽにして設計してみることが大切だと感じます。&lt;/p&gt;
&lt;p&gt;NoSQLで得意なことや、推奨されている使い方。パフォーマンスの面など知りたいことがたくさんです。&lt;/p&gt;
&lt;p&gt;何よりサーバ側の管理等がとても楽になるのは大きいです。RDBではないことでやりにくいこともありますが、Firestoreによる制約を考えながら設計することも結構よし設計に貢献したりします。&lt;/p&gt;
&lt;p&gt;無料でもある程度は利用できますので、Firebaseの他の機能についてもドンドン使っていこうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Nativeでスマホアプリを作成しました]]></title><description><![CDATA[React Nativeの勉強を兼ねて、いくつかアプリを作成しました。
気になるものがあったらダウンロードしてみてください。よろしくお願いします。 どれもまだAndroidのみなのですが、ゆくゆくはiOSにも対応させる予定です。
クロスプラットフォームで開発できるReact…]]></description><link>https://honmushi.com/2019/07/24/expo-app-make/</link><guid isPermaLink="false">https://honmushi.com/2019/07/24/expo-app-make/</guid><pubDate>Wed, 24 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeの勉強を兼ねて、いくつかアプリを作成しました。
気になるものがあったらダウンロードしてみてください。よろしくお願いします。&lt;/p&gt;
&lt;p&gt;どれもまだAndroidのみなのですが、ゆくゆくはiOSにも対応させる予定です。
クロスプラットフォームで開発できるReact Nativeを使っていますので、対応は簡単にできるつもりです。&lt;/p&gt;
&lt;p&gt;学んだ点や躓いた点など紹介していこうと思います。&lt;/p&gt;
&lt;p&gt;これからも引き続き色々作ってみようと思います。&lt;/p&gt;
&lt;h2&gt;作ったアプリ一覧&lt;/h2&gt;
&lt;h3&gt;のっティ時刻表&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.notybus&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Google Play&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 144px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f752d9b23ab0ff13ab8a547d1906fcf6/75706/noty.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.77777777777777%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAkCAYAAACJ8xqgAAAACXBIWXMAAAsTAAALEwEAmpwYAAADy0lEQVRIx51WyU5rRxBtphUb/gF2rBALBHwGi6z4Cr4gq6xQQJEC6AmBmIQYJGBBFiQIsBMws8FMNh4xmNFmMjOc3FNQV8ayeTZXOuq+1X2rTg1dfc3k5CQGBwfR3NyM1tZWQUtLiw2VtbW1ob+/HwMDAxgdHUV3dzd6enrkvbe3F11dXejs7IQ5ODjA4eEhdnZ24PP5ZPT7/QgGgwLKNjY2sLW1Za9zDAQC2Nvbk5H7Od/d3YW5v7+Xzefn5yJMJpNYXFzE9PQ0pqamsL29jXwec319jZWVFWGzv7+P4+NjzM7OYnx8XLC2tiYbX19fZXx7e7M/Tp8T5vb2Fo+Pj7i7u8PDw4MwfHl5EQUE166urkDDucDQ1YuLC8TjcZydnQlOT09t8J17coXhR5FQCOFwWASJREKUfxfGb8Vu/K9JTExMIBqNCltlmg8z9dScev2I/eMAs538iKOCcSUY11xA70zU6ULgtz/tbNF1lg/ZMmG0mprNrx4mz8RW3Ij+GJBsEvEPl6mI7G5uboStrmfD09PTO8Pw0RHWvD7RTtB1dZfKyJLyy8tLe086dE2SMm8do9//+9emHbCSxKNEllTOjXm5vGApbHE48cZCtgqayohYLCaBpvXn52e70LOBRrnXhGOHWPXv2nVEJWSmrrL6c61NKRt/dBMu36gcN4IK6C6V6ZEkQ13PBrIUhjvhJfzt+WHHIRQKSveJRCKSFBZsXjGMHAXh9rtEu2ZLD7rOde1nEJfjJ4tIHv8hcZPT8lH12n1UngukDi+OJnAf/cWm7fFsSg/kiWFi6HKuz3v7ijmQiPxqWXgQkDotcZEKiVzY0RthGI8ncHn1zoStTDuHdpz0/vgVJIZs+VsejxQyLVCoDfdb/ZD3SF9fn5wObUF0Wws1XxiNGRXyhuNIIycnJ1KHmcpDjWVkSGXM6PLyMtbX1+XedbvdtvKQdT3w7mahcx/7JOOa6sEnhbTIK5TKvF6vXNabm9ZxdLngdDoxPz8vxjiurq4KuI+Jy8TUVsiPHQ4HFhYWsLS0JCzJivOZmRmR80jyL4LybAk0KtRyUavpV2nqpfXVBWa0PaVml2BCvgMzNzcnvxxjY2NylXI+NDQkIaC7jCXB/51cYDo6OqBob2//NFdkkmWDGR4eRipGRkaQLsuGTHtNfX09FLW1taiurkZdXZ2861hTUyNIlRFVVVXyTarcWA9S0djYiHRZQ0ODIF3e1NSEsrKyz/LCwkIQBQUFKC4uRkVFBUpKSuS9qKhINpWXl4ucc8r0m8rKSpSWlopcZf8D1ifGa8ifp2IAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;のっティ時刻表&quot;
        title=&quot;のっティ時刻表&quot;
        src=&quot;/static/f752d9b23ab0ff13ab8a547d1906fcf6/75706/noty.png&quot;
        srcset=&quot;/static/f752d9b23ab0ff13ab8a547d1906fcf6/75706/noty.png 144w&quot;
        sizes=&quot;(max-width: 144px) 100vw, 144px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&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;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.okaimon&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Google Play&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;タスクを登録するアプリです。&lt;/p&gt;
&lt;p&gt;ずっと更新していないので使いにくいです。stateの管理とか学ぶことが出来ました。
その後もいくつか作っているうちに、Reactのライフサイクルや再描写のタイミングなども理解してきたので、ちゃんと作ろうと思います。&lt;/p&gt;
&lt;p&gt;フォームで入力した内容をAsyncStrageでローカルに保存したりしています。チェックボックスで完了状態にしたり、削除したりといった挙動を画面に反映するのがちょっとややこしかったです。&lt;/p&gt;
&lt;p&gt;結構前にビルドしたので、まだ64bit対応されていないアプリです。8月1日までに64bitでビルドして更新するつもりです。&lt;/p&gt;
&lt;h3&gt;オンラインじゃんけんバトル&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.jyanken&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Google Play&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 140px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b5848005b47da9ec59a3b2abef307158/0d3e1/jyan.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.85714285714286%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAkCAYAAACJ8xqgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFlUlEQVRIx6VWWU9bVxC+ItuPyFvyP9qHiqoSKgVatQ+p8gP6noc2D32K1McIRWrVBrOYxRCbJcFgbHaSADGbIRiD8W7jfd8u3r7OHNvUMZBU7ZU+n3NmOzNz585Y0mg0GB0dhVKpxOTkJMbHxzE2Nob+/n4MDQ2hu7sbT58+FRgcHMTIyAhevHgh+KzDe157e3vR09MD6fT0FAyr1Qqn0wm73Q6bzSbOTD86OoKZYT4StJOTE8F3OByC73K5PtCR8D+fSqXywVk6Pz/HdSgXC/DEcli2JbFmT8GfyKNEtI/pSIVCAc0oFotileU80tk83GTUE00jnZOFUqNMMyRmNKJROJVKIZvJIJ2MI5tOQs7nBa1Rpln/ksHGm0ulEnK5HKyU/HAkcuXFnzTYfHuevIqQsUAgIIzzJf/Zw7rBeDyOaCxGe/mj3v0rg8lEAslkAvFYVOSz2ODhtQave2tFLhFa0/lzxLNUFoWioF1VEfW91OxZuVQU4DMqJViCWQzvxbBEteiM5kDFSbVYxVXhS803xDJVbxjyeQHRtAxvPI9AUkaY9nmiJXPnwmveX+lho+s+Uj4OZXFGX4U/WTXmT1b3rlhe0G0RKnSiJ+jSTxqsh8OoUOistOFKY8uTRlaupqRRprmEpEYCG+AcXeSQ9sGUjMNAFtZwToRc5zMqNTTmUWr0jBU4PM4j5yiTLwhwiLu+jKClKH8sF6khmpEvPC1QFdS6TQEoFWA4SUB9QG/0NAGjO4V3hE1XCiZfGjOWOMyBDIWfwitzHHqSZfm3zpTwWq53m3pPKzPKFT5c9DY+Vs9VXr33Vf5phuLE9DpPstns8Hg8OPMRvB54CQ6HEzZqCNyVxdnlFjJeQrU7n4ruzvJWhxtuonvcbtG1JZ1Oh1AohHWLB4Z9YvpDeH+wjx6FAsZ37+ANhPDHqgOvzR7EqEksLS9DoeiFnYxaPQGojS68tXgRDgZoJk1BWl1dQZY++g17FK+tEfiokbocNhpCA7AcmRFP57ByEsG8JYxIMkuXbGJgQIlYOIgddxw7zij23TH6ztOYnZ2FNEM/1pNjHFttOLRRaF4vLBaLmGTLyytwOuzYeG/DmslKLcyPN2/ekMEBIXPm92PFZMPeMYXv80Kr1ULikbm+vo6d7W1srr/Fzs4OYVeMywkaqUajEYeUgt1tI/Z2d7G2tibG6ebmJraI937fhO0tI7a2tqFjD3n2LiwsYH5+HtPTWugNBsxqp2kmD0KlGoVubg5zej1mdHOY1s5ArdZgmHj6OR04Otbl98DesXMSD3kOgUNUDg5BNdiP33on0N53jO/7zfhOsY9vFSb80LePHwcO0NVnxteKIzzrG4VqSIkB0mOPGSqVquohh8eHoeERqFVDePJcg8+e7aLtzz10Pjeh/S8TOmjt6jGh9fc9fN69hW7FCMZUwxgkfTamrBmVVqkM5sltvd6AhcVFLC0tw0BhajTjUGsmMDH1EhOTLzEuMEX7KWinp7GyvCRkNyj/nEt+B+v0DiSZCjwUjsDl8Yo1mUrDT7XnOwvQLElc+4+hVCqL9cB8DNXEK/SNqHFoob8ithTNWhpCPNliNIiCgSAC/oBY6/sIXRQOhZHN5sSgkgkZmi/8zBgW8ejXJ/jp0WPoF1chpWT6J0AftSxX/xUkeCglkkQriInH4E7CPO5M7FmZBpVcKNG5dMlzqVIuiVnL4Ie/x2AwWAurRE2hfAE+86DihqAyRaG3ckrKteFV64fNN+Ry+Wpz/cRjIVsnqct0qbOzE4yuri50dHSgra0N7e3foE6/Dl+2deGLr9ov0SV60IgHDx6gmfbw4UO0trZeoj/+5We03LjxIf0GERgtLS24ffs27t69i5s3bwoaryx07949Qef9Be/WLdy/fx937twRunU7fwPxlMmgbHlrXQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;じゃんけん&quot;
        title=&quot;じゃんけん&quot;
        src=&quot;/static/b5848005b47da9ec59a3b2abef307158/0d3e1/jyan.png&quot;
        srcset=&quot;/static/b5848005b47da9ec59a3b2abef307158/0d3e1/jyan.png 140w&quot;
        sizes=&quot;(max-width: 140px) 100vw, 140px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;オンラインでじゃんけんするアプリです。普通のじゃんけんなのですが、グーチョキパーのそれぞれの手に名前を付けることが出来ます。オリジナルの必殺技を手に付けて遊んでほしいです。&lt;/p&gt;
&lt;p&gt;Firebaseを利用してバックエンドを用意しました。FirestoreとFunctionsを利用してます。&lt;/p&gt;
&lt;p&gt;FunctionのonCallとかの関数の定義法、ReactNativeアプリでのfunctionの呼び方などマスターできました。
当然ですが、Firebase functionを実行しているサーバはUSとかにあるので、時間が日本と異なります。&lt;code&gt;new Date()&lt;/code&gt;とかでちょっとつまづきました。&lt;/p&gt;
&lt;p&gt;FirestoreはNoSQLです。効率的な使い方がまだわかっていない気がします。RDBなら設計も実装も得意なのですが、NoSQLはまだわからないことばかりです。簡単に実装できますがこれが最適化されているのか自信が無いです。&lt;/p&gt;
&lt;p&gt;ReactNativeのアニメーションも使ってみました。&lt;code&gt;LayoutAnimation&lt;/code&gt; を使っています。setState時の画面表示の簡単なアニメーションならこれで出来ました。もっとこったアニメーションを実装する方法もある様子ですので、試そうと思っています。&lt;/p&gt;
&lt;h3&gt;GPSメモ&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.gpsmemo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Google Play&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 143px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/0ac222df7636a885d7035364db296d16/a6b04/gps.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.62237762237763%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAkCAYAAACJ8xqgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD+UlEQVRIx61WS09TURC+vP4BLtiwMibuTcTEQltbVBRMUBeuJKUxsnClIcREDWqMISTGGImgaEXAUNQSF0I0agJCeCx4lLewQSKK4Q3l0dv7OXPoqbftbQXjSb6cc6Yzc76ZOWdulSuVlShraMDtujpcvH8fRQRHeTmOXb2KvQUF2O90Yn9hIfY5HDh76xZO37yJ82VlyL12Dadu3MCFe/eQd/06sktKYCcoJ2pqcPLFC5yqrUX206fIrKqCiZBRUYEDDx7g4MOHAhkE6+PHMD16BFt1NY67XGJ/kuztZMdr65Mn5NDjwfmWFpjdbuQ1NeFOdzcqvV5UEZ6PjKC4rQ2XW1tR9OkTLI2NOPbmDeyvX8P26hWygzPvs4NQDtfXw07ODhJLE60Lm5tR9P69mC99+IBzb98ijxRzyJB1DlEk8aA0DA7iJbFxDw2B1zX9/XD19YXm2oEB1BHqgzpu0hHgtQEU/OehqIEAwqBpAlt+P/yqKmQaKQYIer3IvYSikbEePFqoSHV0jSYmJjA6Ooo2KswAhd3b24uOjg6x7+npEboBPlBnHwpZ73CQcuSh6nspb9PT0xgbGxOOx8fHxVrKpV1YyPoNn8aDjeup4t10hdgBs+unInV2doq5vb0dMzMz8R3KHyIV4g0jXUUfrh4qFUSOlZUVLC8vh0USi4BidIqULS4uisL00X0cHh4W4S8tLSEWiRBDPnFtbQ3r6+vY3NwMOfbT1WE5g+XMlGXxUiAcrq6uYoTe7dTUFCYnJ4UxGzL4MAangGeWbW1tRSGMoWTB4czNzQlwzjY2NgTreODDFxYWQpEJh7yZnZ0VDlnJ5/MJZyzfCVhfFlE4ZMp8Wflu8ZoVdouwkDmH7IiTzvSZKTM0ylUkmBnrG4bM10TmbTchs758ZcIhC/iecTGYuqzwbhAVMleZGc7Pz4uwZWH+qcr6QkhFdsbw+dbpsG3o5RJRVd5NM9hJs4jZHORBX758w7NnXrhcXmqwP4LNQYv/lmM1B00LwOF4h/x8D44edaO4+LOQq6oWs83FdchXwelsxpkzTcjJaURJyQ4cxgpXGnz8+BUVFV0CXV1TcUMO+6YYfVuMSOgbq2HHNmKlN+DwVDUgoGcWqRdiKPvddlsPYH7Nj5UNaqLaH7kRIvulRIihGnyLd1t/wjO0uN2x1UAUA/lmuSHw64r8NkflcPAX8H3175dYdu6oHFosFpgJPGdlZSHDdASHTFbam4XMbDbDbrfDZrOJtSWom5mZCavVKqCXKzQgkZycjEJHAfQyhpP+xebm5kbJS0tLhU2YPDExERL8Y2rqHiQlJYk9z6yUlpZG8lSx1v+Wnp6OlJQUJCQkhHz8BqhC2v4d4PNkAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;GPSメモ&quot;
        title=&quot;GPSメモ&quot;
        src=&quot;/static/0ac222df7636a885d7035364db296d16/a6b04/gps.png&quot;
        srcset=&quot;/static/0ac222df7636a885d7035364db296d16/a6b04/gps.png 143w&quot;
        sizes=&quot;(max-width: 143px) 100vw, 143px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;現在地の緯度経度を端末のGPAを利用して取得し、メモ付きで記録できるアプリです。&lt;/p&gt;
&lt;p&gt;あまり使いみちは無いと思いますが、ローカルアプリの開発時に、チェックポイントの位置なんかを記録するために作成しました。
これを使ってローカルのお出かけアプリなんかを作れたらなあと考えています。&lt;/p&gt;
&lt;p&gt;端末のGPSの利用と、それに伴う権限の取得なんかを実装しました。&lt;/p&gt;
&lt;p&gt;データの一覧を表示する画面があるのですが、作成したメモがその画面に反映されない問題がありました。setStateしたときと、画面をマウントしたときはrenderが走りますが、それ以外では基本renderされないので発生しました。
画面にforcusが載ったときに、データ取得・setStateが行われるようにイベントリスナーを登録することで意図した挙動が実現できました&lt;/p&gt;
&lt;h3&gt;QRコードリーダー&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.qrreader&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Google Play&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 140px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/25857318e1afcd8218a00c4d7e93f636/0d3e1/qr.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.85714285714286%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAkCAYAAACJ8xqgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD3ElEQVRIx51W2Su1XxR+TVdKyRDlgj/ClSsi7uTGMWZ2OAfnw2cIUcYbmTPmArnEhZRCyZAhV0oi81DE//D8zrO03/Z5z8H5feqx13722utda+219zpGd3c32tvbUVFRgfz8fBM2mw1dXV1ITU1FYmIi0tPTUV5ejpKSEtTW1iInJwfZ2dky55iXl4esrCwYTqcT1dXVslBYWIiioiIUFxfLSJ6K3JCbmys8P1ZaWgq73S76VVVVKCsrk/3cY/CrRGVlpShxVCBPjpvUmhoZEWXqUFZ7DCWQtOI7/icd06DVu3+BGOQ/5oQ5IJgPzjnqUKkhFEc97lfrZsidnZ0YGBhAb28vmpub5XTr6+vlNLnW398vPGWXyyVrdXV1GB0dlX3kOBcPGerY2BgWFxcxMTGBlpYWjIyMiFEaGRwcRF9fH5qamjA0NCQjDbe2tmJ+fh4dHR0C8vRSTplfIOhtY2OjyCoFDodDRp40vWCYLB/q1tTUmOli2GbIKicqn2pRlY5KuOIZFedqzetQdFKvO13m6IvX95tlo9eUujEKBQUFPmWC0aj9ZmHrxqjQ1tYmhzQ8PCynOD4+LjJBmQdGmTo8CN2oR8jqbm5sbODj4wPPz8+4u7vD5eUl3t/f8fb2houLCzw8PMja5+cnlpaW5G6r0H0aXF9fl0339/fY2dnBzMwM9vf3RZ6amsLR0RFub2/x9PSEhYUFScOvBunB9fW1eLiysoLp6WkJk2v8ENdeX1//v0GOTMHk5CRmZ2dxcHAg3NXVlRjkZfArZIZDTw4PDzE3N4fl5WXhV1dXcXp6Kp6/vLz4b1AdyNnZGXZ3d+UDzOvW1hbOz88lhypkvww+Pj5KyCcnJzg+Psbe3h42NzextraG7e1t3NzcyEd/zSEXVdnQKxqmZxzpMQ0xFVxj2aiQeWs8DCqjvPQNDQ3yurB59fT0mODTRlDmGnX4vPFmeRW2DobNjuYP2JSs+w39Lurh+wPrPTbvsj/NyN9G5eWhrvRTM/Jl0KONWg2rfqtD56zPnldfthp1OGrc5VDthkNGu73K5Hzlzus9tOLPn7/uEmpx95F6d5drkpFzl6sRTmftt/k01NNuxddpf+HLmwpzrrcEK4zfao2/wlhvrE+b7ffaNJKTk/EdUlJSkJSUJD2YLZMyuZ/2GPzd9xsYIr1MS0vz4DMyMrx0jaioKBDR0dGIjIxERESEyDofFxcnUJxCeHi4qaM4w/0HhdDQ0K+T0jiCyc7MzPTggoOD5bEICwuz6hsICAiQSVBQEGJjYxEYGAidj4+PR0xMjAdHnYSEBISEhHjw/wHM1lh1grr4YwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;QRコードリーダー&quot;
        title=&quot;QRコードリーダー&quot;
        src=&quot;/static/25857318e1afcd8218a00c4d7e93f636/0d3e1/qr.png&quot;
        srcset=&quot;/static/25857318e1afcd8218a00c4d7e93f636/0d3e1/qr.png 140w&quot;
        sizes=&quot;(max-width: 140px) 100vw, 140px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;シンプルなQRコードリーダです。QRコードの読み取りと、読み取ったデータの履歴を確認出来ます。
特に複雑な機能はありません。QRコードリーダもExpoSDKに用意されていたので、それを利用して実装しています。&lt;/p&gt;
&lt;p&gt;読み取るためのカメラの領域が小さいのがちょっと悩んでいます。画面いっぱいに大きくしたいのですが、やり方がわからず。&lt;/p&gt;
&lt;h3&gt;みんなで大文豪&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.honmushi.bungo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Google Play&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 149px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/676a90380628e1ef744ed16d5848fe40/d371d/bungo.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 177.7027027027027%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAkCAYAAACJ8xqgAAAACXBIWXMAAAsTAAALEwEAmpwYAAADWElEQVRIx+2Wx0plQRCGGwPiYwgu3PgWLt0pGBDRd/BB1JUuBBUUXOhCRMSFujFiVsw555zTP/MV1OXMNY0yA7OYhqJPV66/61bf0NHRoZaWFtXX16u1tdW+GxoaVF1drYqKClVWVqq8vFxVVVVqbGw0am5uVm1trWpqatTU1KS6ujqz5xzW19e1urqq2dlZra2taWtry87z8/OamZnR3Nyc0cLCghYXF42/ubkpt2NHBuEjPD8/6+LiQqyHhweNj49rY2NDJycnOj8/187Ojhlub28LXXgEwunk5KRubm4UXQEnR0dHdri9vdXo6Khluru7q8PDQ3O0srJi+93dnQXCEdkODw/r8vIy5uzl5UUBpfv7e11fXxs9PT3ZGXp8fJTLCUw2fJMpMhywUyG2yMLe3p7htry8bJHBaGJiwnbwAT++yXJqasp0pqenTYYNmbsOTgPeDw4ODBeMTk9PTQFlzgQEw/39fcONYDgFZwgZ9uhRfgArgB8bGzOnCDBGGT54EgR8wQ8Z2IL78fGx8bAhO7sUUkbI7ZE2Z3DEkAwJCI7RBXbxCx7YBoA8Ozszp5TvrQKuAO7KbxGBCeYXZw45XF1dxZyROgEoBaX3nLlDdPBBF5hDAAUv8KBczvGlvEdvrRAVfqQYH4AFJFREf3JpliGpUjJE+uyUTtm0gZ8x8GbG0HfKhs9uDjGiDbhVDGkBmpZ24XLAkv4DCpy+BUOUF/TF9RGm5vAzhd+5iDcv5U/Rl0v+NMP/Dv9Bh3+1bb7j4FWG0R/6d1b8sAhMCj4gxhBTxqcPgwPyJ9b5LkOX4er2TK4QzYz3gyeyra1N7e3t6u7uVldXl/3fgdfZ2WnU09OjwcFBe4OiA5kRFiuZxRhbWlrSyMiIhoaG7Mnkr8nAwID6+/uNzz8LXkjeaH92vXSqDf4vgXSZdz5IIXgQkX2QRvmu7/aUbxOb1dfXp97e3thodwcsyuLNicqcyBIs/dGKtQ3Tmcn81duO1w+lpaUqKipSXl6ecnNzlZ2dLXglJSUxKiwsVEFBwSt+Tk6OyYqLi2O88HMpShjG8/Lz85WVlfWKX1ZWpqSkpF/5iYmJghISEpSSkqL09HRTgufKGRkZSktLs2+XJScnKzMzU6mpqWbr/B8I3T1fyfwrNwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;みんなで大文豪&quot;
        title=&quot;みんなで大文豪&quot;
        src=&quot;/static/676a90380628e1ef744ed16d5848fe40/d371d/bungo.png&quot;
        srcset=&quot;/static/676a90380628e1ef744ed16d5848fe40/12f09/bungo.png 148w,
/static/676a90380628e1ef744ed16d5848fe40/d371d/bungo.png 149w&quot;
        sizes=&quot;(max-width: 149px) 100vw, 149px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;みんなの投稿によって物語を作るアプリです。
お題と導入だけはこちらで作成していますので、その後の物語をみんなで作っていってもらったら、面白い作品ができる。かもしれないというものです。インストール数が少ないので全く盛り上がりませんが、いつの日か盛り上がってくれたら嬉しいです。&lt;/p&gt;
&lt;p&gt;こちらもFirabaseを利用しており、データをFirestoreに保存しています。&lt;/p&gt;
&lt;p&gt;今は1日1回しか投稿できないので、広告をみるとかで再投稿できるようにしようと考えています。
過去の作品を静的コンテンツ化してWebで見れるようにすることで、Firebseへのリクエストを軽減するつもりです。&lt;/p&gt;
&lt;p&gt;キーボードを表示したときに入力フォームの位置を調整する&lt;code&gt;KeybordAvoidingView&lt;/code&gt;というのがあるのですが、いまいち挙動が掴みきれていません。一見それらしい実装は出来ていますが、ちょっとやりたいようには出来ていない状態です。とくに、正常に位置が動かない場合があることと、逆に上に行き過ぎてしまう現象を解決したいです。&lt;/p&gt;
&lt;h2&gt;開発環境&lt;/h2&gt;
&lt;p&gt;Expoを利用しています。ビルド等もサーバにやってもらえるので、とてもラクです。何よりもテストが簡単になります。&lt;/p&gt;
&lt;p&gt;Expoクライアントアプリをテスト端末にインストールする必要がありますが、プログラムの変更をビルド無しで反映できるホットリロードが簡単に実現できるので便利です。
たまにキャッシュからアプリが立ち上がり、ホットリロードが効かなくなるときがあります。端末のキャッシュやデータを消して治ることもありますが、原因は調査中です。わかったらまとめようと思います。&lt;/p&gt;
&lt;p&gt;ビルドもExpoを利用していますので、ejectはしていません。ネイティブモジュールを特に利用するものは作っていないので、今のところは問題ないです。
ejectして自分でビルドもやってみたいと思っています。&lt;/p&gt;
&lt;h2&gt;これからやってみたいこと&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Expo ejectして自分でビルド&lt;/li&gt;
&lt;li&gt;Flutterでの開発&lt;/li&gt;
&lt;li&gt;iOS向けアプリの開発と公開&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;非同期通信によるassetのロード&lt;/li&gt;
&lt;li&gt;いろんな広告パターンを試す&lt;/li&gt;
&lt;li&gt;ログイン機能&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ReactNativeとExpoを使えばとても簡単にアプリの開発が出来ます。&lt;/p&gt;
&lt;p&gt;こった作りや、ネイティブの処理などは難しいところがありそうですが、さくっと作って見るという点においては、ほっとリロードなどの機能あとても便利です。ビルドもサーバにお願いすることができるので、時間も節約できます。&lt;/p&gt;
&lt;p&gt;何が出来て何が出来ないのかといったことがまだ把握しきれていないので、もう少し触ってみようと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[GatsbyのServiceWorkerを削除する]]></title><description><![CDATA[このサイトはReactとGatsbyを使って作成しています。
GatsbyStarterでよさそうなものを選んで初めたのですが、サイトの更新がすぐに反映されないことに困っていました。 ズバリ、ServiceWorker…]]></description><link>https://honmushi.com/2019/07/22/gatsby-sw-delete/</link><guid isPermaLink="false">https://honmushi.com/2019/07/22/gatsby-sw-delete/</guid><pubDate>Mon, 22 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このサイトはReactとGatsbyを使って作成しています。
GatsbyStarterでよさそうなものを選んで初めたのですが、サイトの更新がすぐに反映されないことに困っていました。&lt;/p&gt;
&lt;p&gt;ズバリ、ServiceWorkerが動いているため、ブラウザのキャッシュを使ってサイトを表示していることが原因でした。ServiceWorkerがあれば、オフラインでもサイトを閲覧できるという良い点もあるのですが、サイトのトップが更新されず、新着の記事が表示されていません。&lt;/p&gt;
&lt;p&gt;F5などで更新すれば表示されるのですが、ブログとして望ましい形ではないので修正しました。&lt;/p&gt;
&lt;p&gt;ServiceWorkerを削除して見たので、その時の手順をメモしています。以降はサイトの更新がすぐに反映されると思います。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;手順&lt;/li&gt;
&lt;li&gt;消えたことを確認&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;手順&lt;/h2&gt;
&lt;p&gt;ざっくりとは以下の手順になります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;「gatsby-plugin-offline」を取り除く。&lt;/li&gt;
&lt;li&gt;「gatsby-plugin-remove-serviceworker 」を追加する。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;gatsby-plugin-offline&lt;/h3&gt;
&lt;p&gt;こちらのプラグインがあるため、ServiceWorkerがブラウザで有効になっています。
ですのでこれを取り除きます。 &lt;/p&gt;
&lt;p&gt;ただしこれを取り除いただけでは、すでにブラウザにキャッシュされているServiceWorkerが無効になりません。以下のプラグインを同時に取り入れます。&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;gatsby-plugin-remove-serviceworker&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;gatsby-plugin-remove-serviceworker&lt;/h3&gt;
&lt;p&gt;こちらのプラグインはすでに動作しているServiceWorkerを削除するものです。npmでインストールしたあとに&lt;code&gt;gatsby-config.js&lt;/code&gt;に追加します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gatsby-config.js&lt;/code&gt;の&lt;code&gt;gatsby-plugin-offline&lt;/code&gt;を削除して&lt;code&gt;gatsby-plugin-remove-serviceworker&lt;/code&gt;を追加します。記載する順序によって旨く動作しない場合があるという情報がありましたが、削除して追加するという方法は意図通りになりました。&lt;/p&gt;
&lt;h2&gt;消えたことを確認&lt;/h2&gt;
&lt;p&gt;GoogleChromeの検証から、Applicationのタブを開きます。そこに「ServiceWorker」の項目があります。ここでブログドメインのものが「deleted」になっていれば、削除完了です。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;どうでしょうか、新しい記事の更新がちゃんと反映されていないでしょうか。ServiceWorkerという仕組みは便利ですが、普通のブログとかであればそれほど必要ではないように思います。&lt;/p&gt;
&lt;p&gt;Googleの評価等にも影響ありそうですが、Gatsbyはもともと静的なHTMLを作成して配信していますので十分早いです。
これからも他にできることがあればいろいろと直していこうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoクライアントアプリで「Building Javascript bundle」が動作しなくなったときの解決法]]></title><description><![CDATA[ExpoとReactNativeを使ってアプリを作成しているときに発生した問題の解決方法です。 私はスマホ端末にExpoのクライアントアプリをインストールして、実機による確認を行いながら開発しています。
Expo クライアントアプリ Android 今回はExpo…]]></description><link>https://honmushi.com/2019/07/19/expo-data-clear/</link><guid isPermaLink="false">https://honmushi.com/2019/07/19/expo-data-clear/</guid><pubDate>Fri, 19 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ExpoとReactNativeを使ってアプリを作成しているときに発生した問題の解決方法です。&lt;/p&gt;
&lt;p&gt;私はスマホ端末にExpoのクライアントアプリをインストールして、実機による確認を行いながら開発しています。
&lt;a href=&quot;https://play.google.com/store/apps/details?id=host.exp.exponent&amp;#x26;hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expo クライアントアプリ Android&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回はExpoのホットリロードが効かなくなり、&lt;code&gt;expo start&lt;/code&gt;をやり直しても、端末のExpoで更新ボタンを押してもテストしたいアプリが更新されない状態になりました。
修正前のテストアプリがキャッシュされて動いている印象で、他のアプリをExpoで動かしてもずっと同じアプリが立ち上がる奇妙な現象が発生しました。&lt;/p&gt;
&lt;p&gt;急に発生したので困っていましたが解決できたので内容を記録しておきます。&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;Androidの設定の「ストレージ」で、Expoアプリの「キャッシュ削除」と「データ削除」を行うことで解決出来ました。
破損したデータが消去された、または領域が確保されたことによって現象が解決しました。&lt;/p&gt;
&lt;h2&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;li&gt;注意点&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;現象&lt;/h2&gt;
&lt;p&gt;最初は突然ホットリロードが動作しなくなりました。手動で更新ボタンを押すことでテストアプリの開発中プログラムを反映するようにしました。&lt;/p&gt;
&lt;p&gt;さらにしばらく立つと、ずっと同じアプリが立ち上がるようになってしまいました。プログラムを修正しても反映されず、別のアプリを動かそうと他のソースで&lt;code&gt;expo start&lt;/code&gt;してもずっと同じアプリが動き出します。
任意のアプリの開発が出来ず、修正した内容も検証することが出来ないので困りました。&lt;/p&gt;
&lt;p&gt;印象としては、端末にキャッシュしているプログラムをずっと立ち上げている様子でした。
ただ起動時のSplashはアプリごとの画像が表示されている様子で、&lt;code&gt;expo start&lt;/code&gt;したディレクトリ内の画像が表示されることがありました。&lt;/p&gt;
&lt;h2&gt;調査によりわかった状況&lt;/h2&gt;
&lt;p&gt;以下その時の状況です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;他の端末では正常に動作する。&lt;/li&gt;
&lt;li&gt;問題の端末では、expoと連携しても「Building Javascript bundle」がコンソールに表示されず、すぐにテストアプリが動き出す。&lt;/li&gt;
&lt;li&gt;expoの通知領域から確認できるテストアプリ情報の「SHOW MANIFEST」の内容がいつも同じで、最後の方にある&lt;code&gt;loadedFromCache&lt;/code&gt;が&lt;code&gt;true&lt;/code&gt;になっている&lt;/li&gt;
&lt;li&gt;端末の再起動では解決出来ず、Expoの通知領域から選択できる「CLEAR DATA」でも解決できない&lt;/li&gt;
&lt;li&gt;Expoクライアントアプリのデータが大きくなっている。 アプリのサイズは&lt;code&gt;70〜80MB&lt;/code&gt;で、削除する前のユーザーデータやキャッシュがかなり大きな数値。削除前の合計データ量は&lt;code&gt;200MB&lt;/code&gt; くらい&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;解決方法&lt;/h2&gt;
&lt;p&gt;一度Expoクライアントのデータを削除したところ問題が解消しました。&lt;/p&gt;
&lt;p&gt;Androidの設定の「ストレージ」からアプリのキャッシュデータを削除します。Expoは「その他のアプリ」内にあります。&lt;br&gt;
「キャッシュを削除」のみでは問題は解消されず、「データを削除」を行う必要がありました。&lt;/p&gt;
&lt;p&gt;上記で解決できました。以降は元通りホットリロードも動作しており快適に検証できています。削除後は合計データ量も&lt;code&gt;100MB&lt;/code&gt;を下回るくらいです。&lt;/p&gt;
&lt;h2&gt;注意点&lt;/h2&gt;
&lt;p&gt;端末上でExpoアプリのデータを削除すると、Expoのログイン情報が失われます。&lt;br&gt;
ログインしていない状態でも使うことは出来ますが、利用する用途によっては再度ログインを行う必要があります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;似たような現象に遭遇した場合は一度お試しください。&lt;/p&gt;
&lt;p&gt;今回は調べても原因や解決方法が出てこなかったので、自分でなんとか見つけました。
Expoの情報は結構多く開発も盛んな印象です。英語の情報がほとんどですが本家のForumでだいたい解決できます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoで64bitビルドができるようになった]]></title><description><![CDATA[以前の記事でGoogle Play Consoleにて、警告が出るという話をしていました。 ExpoでビルドしたアプリをGoogle Play Consoleにアップすると警告「Android App Bundleの利用」と「64bitビルド」 「8月1日からは64bit…]]></description><link>https://honmushi.com/2019/07/17/expo-64bit/</link><guid isPermaLink="false">https://honmushi.com/2019/07/17/expo-64bit/</guid><pubDate>Wed, 17 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前の記事でGoogle Play Consoleにて、警告が出るという話をしていました。&lt;br&gt;
&lt;a href=&quot;/2019/06/29/expo-64bit/&quot;&gt;ExpoでビルドしたアプリをGoogle Play Consoleにアップすると警告「Android App Bundleの利用」と「64bitビルド」&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「8月1日からは64bitデバイス向けのビルドが必要」というのが警告の概要です。Expoを利用してのビルドではそれが出来なかったのですが。この度それが解決されました、良かった！&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;発生していた警告&lt;/li&gt;
&lt;li&gt;64bitビルドのやり方&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;発生していた警告&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;警告
このリリースは Google Play の 64 ビット要件に準拠していません

以下の APK または App Bundle は 64 ビットのデバイスで利用できますが、32 ビット向けネイティブ コードしか含まれていません。1
2019年8月1日 以降、すべてのリリースが Google Play の 64 ビット要件に準拠していなければなりません。

アプリには 64 ビットと 32 ビットのネイティブ コードを含めます。Android App Bundle 公開形式を使用して、各デバイスのアーキテクチャが自動的に必要なネイティブ コードだけを受け取るようにします。
これにより、アプリ全体のサイズが増大することを回避できます。詳細&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Google Play Consoleにapkやaabをアップロードした際に、上記の警告が出ていました。
Expoでのビルドでは64bitに対応していなかったので、できることは特に無し。デタッチして自分でビルドすればなんとかなる印象でした。&lt;/p&gt;
&lt;h2&gt;64bitビルドのやり方&lt;/h2&gt;
&lt;p&gt;以下のフォーラムでの投稿にもあるとおり、対応が行われました！SDKのバージョンが33であれば、64bit向けのビルドが作成できます。特にやり方に変更は必要なく、通常通りにビルドすれば自動的に64bit向けのビルドになっています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.expo.io/64-bit-support-and-android-app-bundles-fe0c6a28669&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://blog.expo.io/64-bit-support-and-android-app-bundles-fe0c6a28669&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;必要なことは「Expo SDKのバージョンを33以降にする」ことだけです。apkもaabも対応されているそうです。見た目には特にわからないのですが、Play Consoleにアップロードしてみると確かに警告が出なくなりました。64bit向けにビルドされていることが確認できます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;8月1日に無事に間に合ったようで良かったです。とても助かります。
すでにいくつかのアプリをビルドしていますがエラーもありません。安定して利用できています。&lt;/p&gt;
&lt;p&gt;これからもExpoのお世話になろうと思います。でも、念のためにデタッチして自分でビルドするという手順も勉強して試してみようと思います。またやってみて難しかった所など共有します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoで端末のGPSを利用して緯度・経度を取得する]]></title><description><![CDATA[Expoを利用して作成したスマホアプリで、端末のGPSを利用した処理を実装しました。その手順をメモしておきます。 とても簡単でした。Expo…]]></description><link>https://honmushi.com/2019/07/12/expo-app-gps/</link><guid isPermaLink="false">https://honmushi.com/2019/07/12/expo-app-gps/</guid><pubDate>Fri, 12 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Expoを利用して作成したスマホアプリで、端末のGPSを利用した処理を実装しました。その手順をメモしておきます。&lt;/p&gt;
&lt;p&gt;とても簡単でした。Expo便利です。
ストアにアップする際の権限周りの設定についても記載しています。&lt;/p&gt;
&lt;h2&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;h2&gt;必要なモジュールのインポート&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;import Constants from &amp;#39;expo-constants&amp;#39;;
import * as Location from &amp;#39;expo-location&amp;#39;;
import * as Permissions from &amp;#39;expo-permissions&amp;#39;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;位置情報取得に必要なのが「expo-location」で、それを使う際に端末から権限をもらう必要があります。その際に他のモジュールも一緒に利用します。&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;  componentDidMount() {
    if (Platform.OS === &amp;#39;android&amp;#39; &amp;amp;&amp;amp; !Constants.isDevice) {
      this.setState({
        errorMessage: &amp;#39;Oops, this will not work on Sketch in an Android emulator. Try it on your device!&amp;#39;,
      });
    } else {
      this._getLocationAsync();
    }
  }

  _getLocationAsync = async () =&amp;gt; {
    let { status } = await Permissions.askAsync(Permissions.LOCATION);
    if (status !== &amp;#39;granted&amp;#39;) {
      this.setState({
        errorMessage: &amp;#39;位置情報の取得が許可されませんでした。&amp;#39;,
      });
    }

    let location = await Location.getCurrentPositionAsync({});
  };&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;緯度・経度のみでなく高度や速度、方角も取得できていました。詳細は以下のドキュメントをご確認ください。&lt;br&gt;
&lt;a href=&quot;https://docs.expo.io/versions/latest/sdk/location/#type-location&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/latest/sdk/location/#type-location&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;{
    timestanp: 時刻,
    coords:{
        latitude:緯度,
        longitude:経度,
        altitude:高度,
        heading:方角,
        speed:速度,
        accuracy:精度,
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ストアにアップする際の権限周りの設定&lt;/h2&gt;
&lt;p&gt;今回の機能では以下のように「LOCATION」で権限を要求しています。&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 { status } = await Permissions.askAsync(Permissions.LOCATION);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このことからストアにアップする際にも権限を利用することを知らせる必要があります。
これはapp.jsonに書くことになります。&lt;/p&gt;
&lt;p&gt;今回の機能が何に対応しているのかわからなかったので調べてみました。
以下のページに表としてまとめらているので、これを参考に「&lt;code&gt;ACCESS_COARSE_LOCATION&lt;/code&gt;」「&lt;code&gt;ACCESS_FINE_LOCATION&lt;/code&gt;」を今回は指定しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.expo.io/versions/latest/sdk/permissions/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://docs.expo.io/versions/latest/sdk/permissions/&lt;/a&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;&amp;quot;android&amp;quot;: { 
  &amp;quot;permissions&amp;quot;: [
    &amp;quot;ACCESS_COARSE_LOCATION&amp;quot;,
    &amp;quot;ACCESS_FINE_LOCATION&amp;quot;
  ], 
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;注意点&lt;/h2&gt;
&lt;p&gt;非同期による処理なのでそのことを理解しておきましょう。
もしも画面がアンマウントされている状態でstateを変更すると黄色い警告を発します。&lt;/p&gt;
&lt;p&gt;私は&lt;code&gt;componentWillUnMount()&lt;/code&gt; を使って、コンポーネントがアンマウントされた場合はフラグをONにして、フラグがONの場合は非同期処理の結果でsetStateは空振りするように対応しました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;こんな感じでとても簡単に実装ができました。方角なんかも取得できるので、色々とできそうな気がします。
GoogleのAPIを用意しておけば地図情報なんかも取得できそうでした。機会があればやってみます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Navigationで画面遷移時に処理を実行する]]></title><description><![CDATA[Expoでアプリを作ってますが、ReactNavigationの利用時に難しかったことをメモしておきます。
マウント時でも更新時でもなく、フォーカス時に処理を行いたいというものです。 結論「‘didFocus’ event listener…]]></description><link>https://honmushi.com/2019/07/12/react-navigation-screen-change/</link><guid isPermaLink="false">https://honmushi.com/2019/07/12/react-navigation-screen-change/</guid><pubDate>Fri, 12 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Expoでアプリを作ってますが、ReactNavigationの利用時に難しかったことをメモしておきます。
マウント時でも更新時でもなく、フォーカス時に処理を行いたいというものです。&lt;/p&gt;
&lt;p&gt;結論「‘didFocus’ event listener」を使ってイベントリスナーを登録することで実装できました。
Reactのライフサイクルも理解出来たのでとても良い勉強になったと思います。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;やりたいこと&lt;/li&gt;
&lt;li&gt;「createBottomTabNavigator」のオプションでは実現できず&lt;/li&gt;
&lt;li&gt;「‘didFocus’ event listener」を使ってイベントを登録することで実装&lt;/li&gt;
&lt;li&gt;別のやり方もある&lt;/li&gt;
&lt;li&gt;Reactのライフサイクルについて&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;やりたいこと&lt;/h2&gt;
&lt;p&gt;Reactのライフサイクルとしては、マウント時そして更新時にそれぞれrenderによって描写が行われます。&lt;br&gt;
&lt;a href=&quot;https://ja.reactjs.org/docs/react-component.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://ja.reactjs.org/docs/react-component.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;マウント時は画面を開いた際に処理され画面を破棄するまでのこります。更新についてはsetStateを行うことで発生します。&lt;/p&gt;
&lt;p&gt;今回は、「すでにコンポーネントがマウント済みの状態で、他の画面から遷移して再度表示した際に画面を更新したい」というものでした。&lt;/p&gt;
&lt;p&gt;例えば、一覧画面がありその各要素を更新・削除・追加した際とかです。各要素を一覧画面のstateにしておけば要素を編集した際にrenderが行われます。今回は編集画面を別のScreenにしていたので、編集画面で要素を更新・削除しても、一覧画面では編集前の要素が表示されたままでした。&lt;/p&gt;
&lt;p&gt;画面に遷移した際、すなわちフォーカスされた時をどうやって実装するのかわからなかったので調べました。&lt;/p&gt;
&lt;h2&gt;「createBottomTabNavigator」のオプションでは実現できず&lt;/h2&gt;
&lt;p&gt;下部のタブを作成する際の「createBottomTabNavigator」にて、configとして以下の設定ができますが、こちらをtrueにしても意図通りの挙動にはなりませんでした。&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;resetOnBlur - Reset the state of any nested navigators when switching away from a screen. Defaults to false.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;説明にもありますが画面から離れた際、すなわちフォーカスが外れた際にのみstateのリセットが行われます。タブナビゲーションで遷移していればこれで良さそうでしたが、今回は同一タブ内でスタックしているscreen間での遷移でしたので、意図通りに更新されませんでした。&lt;/p&gt;
&lt;h2&gt;「‘didFocus’ event listener」を使ってイベントを登録することで実装&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://reactnavigation.org/docs/en/function-after-focusing-screen.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://reactnavigation.org/docs/en/function-after-focusing-screen.html&lt;/a&gt;&lt;br&gt;
上記のページにズバリやりたいことがありました。こちらを参考にすることで意図した挙動を実現できました。&lt;/p&gt;
&lt;p&gt;マウント時に、&lt;code&gt;didFocus&lt;/code&gt;にイベントリスナーを追加しておくことで、フォーカスされた際に処理を実行できます。この中に、データの再取得とsetStateを実行するようにしました。&lt;/p&gt;
&lt;p&gt;エクスポートする際に&lt;code&gt;withNavigation&lt;/code&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;import { withNavigation } from &amp;quot;react-navigation&amp;quot;;

~~~~~~
  componentDidMount() {
    const { navigation } = this.props;
    this.focusListener = navigation.addListener(&amp;quot;didFocus&amp;quot;, () =&amp;gt; {
      // The screen is focused
      // Call any action
    });
  }

  componentWillUnmount() {
    // Remove the event listener
    this.focusListener.remove();
  }
~~~~~~

export default withNavigation(TabScreen);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;別のやり方もある&lt;/h2&gt;
&lt;p&gt;同じページに記載されているのですが、「withNavigationFocus」と「isFocused」を利用することでも実現ができる？ように書かれていました。&lt;/p&gt;
&lt;p&gt;ただ、このドキュメントの例では「componentDidUpdate」の中で処理が行われているため、更新時にフォーカスが移ってきたかどうかを判定するものと判断し、利用しませんでした。&lt;/p&gt;
&lt;h2&gt;Reactのライフサイクルについて&lt;/h2&gt;
&lt;p&gt;基本的に以下のドキュメントに書いてあることですが、この機会にまとめとして記録しておきます。&lt;br&gt;
&lt;a href=&quot;https://ja.reactjs.org/docs/react-component.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://ja.reactjs.org/docs/react-component.html&lt;/a&gt;&lt;/p&gt;
&lt;h3&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;constructor()
static getDerivedStateFromProps()
render()
componentDidMount()&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;UNSAFE_componentWillMount()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;更新&lt;/h3&gt;
&lt;p&gt;更新はpropsやstateの変更によって発生する。コンポーネントが再レンダーされるときに、これらのメソッドが次の順序で呼び出されます。&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;static getDerivedStateFromProps()
shouldComponentUpdate()
render()
getSnapshotBeforeUpdate()
componentDidUpdate()&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;UNSAFE_componentWillUpdate()
UNSAFE_componentWillReceiveProps()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;アンマウント&lt;/h3&gt;
&lt;p&gt;コンポーネントが DOM から削除されるときに呼び出されます。&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;componentWillUnmount()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ReactNavigationを使うことでタブ構造やスタック構造によるページを簡単に作成することが出来とても快適です。
Expoを使ったアプリでもWebの様に利用できるため、知識を流用しやすいです。&lt;/p&gt;
&lt;p&gt;URLとかメタタグ何かのSEO処理はちょっとややこしそうですが、アプリであればそれほど考えることもないのでさくっと実装ができます。&lt;/p&gt;
&lt;p&gt;タブナビゲーションやスタックナビゲーションなど、それらしい形になるものが一通り揃っているので、とりあえずデフォルトのアプリでも触ってみると理解が深まって良いと思います。最初はややこしいと思いましたが、ScreenとStackとTabナビゲーションの関係をドキュメント見ながら理解するとすぐに使いこなせるようになりますよ。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expoを利用したアプリでFirebaseを導入する方法]]></title><description><![CDATA[Firebaseの機能をスマホアプリで利用したかったので、Expoを使った実装で試してみました。
特に難しい点はなく簡単に出来ます。以下手順を記載しています。 概要 Firebaseの準備 npmで「firebase」をインストール 「firebase…]]></description><link>https://honmushi.com/2019/07/04/expo-firebase/</link><guid isPermaLink="false">https://honmushi.com/2019/07/04/expo-firebase/</guid><pubDate>Thu, 04 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Firebaseの機能をスマホアプリで利用したかったので、Expoを使った実装で試してみました。
特に難しい点はなく簡単に出来ます。以下手順を記載しています。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Firebaseの準備&lt;/li&gt;
&lt;li&gt;npmで「firebase」をインストール&lt;/li&gt;
&lt;li&gt;「firebase」をインクルード&lt;/li&gt;
&lt;li&gt;Firebase Authを利用する&lt;/li&gt;
&lt;li&gt;Firebase Functionsを利用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Firebaseの準備&lt;/h2&gt;
&lt;p&gt;まずFirebaseの管理画面でプロジェクトを作成します。&lt;/p&gt;
&lt;h3&gt;アプリの種類はWebアプリを選択&lt;/h3&gt;
&lt;p&gt;Firebaseにてアプリを設定する際に、「Web」「Androird」「iOS」のいずれかを選択する必要があります。
今回はReactNativeとExpoによるクロスプラットフォームなのでどれにするか悩みましたが、 結論「Web」を選択すれば問題ありません。&lt;/p&gt;
&lt;h2&gt;npmで「firebase」をインストール&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;npm install firebase&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ですね。firebase関連のパッケージが他にもいくつかあるのですが、これで問題ないです。必要なものをまるごとインストールする形です。プログラムで利用する際に、必要なものを選択してimportしましょう。&lt;/p&gt;
&lt;h3&gt;npm startを行うとエラー&lt;/h3&gt;
&lt;p&gt;上記firebaseパッケージをインストールした後、いつものように&lt;code&gt;npm start&lt;/code&gt;でExpoを使ってローカルでアプリを立ち上げた所エラーが発生しました。監視対象のファイル数の上限を超えたことが原因でした。Linuxでファイル監視が動作しているときに起こり得るエラーらしいです。&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;System limit for number of file watchers reached&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;真っ当な解決策として、不要なパッケージを取り除いて進めたいところです。firebase関連の機能ごとのパッケージを利用する方法はどうかと考えましたがうまくいきませんでした。ですので、今回は監視対象の上限を大きな数値に設定することで解決しました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;cat /proc/sys/fs/inotify/max_user_watches&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記コマンドで監視ファイルの上限を確認出来ます。デフォルトは「8192」になっていました。&lt;/p&gt;
&lt;/li&gt;
&lt;li&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;echo fs.inotify.max_user_watches=14288 | sudo tee -a /etc/sysctl.conf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記コマンドで数値を変更できます。数値の所を適したものに変更しましょう。私はいきなり大きくするのは嫌だったので少しずつ上げて確認しました。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;エラーが出なくなりfirebaseを利用する準備が出来ました。&lt;/p&gt;
&lt;h2&gt;「firebase」をインクルード&lt;/h2&gt;
&lt;p&gt;実際にプログラム内でFirebaseの機能を利用する場合は以下のようにします。
必要なプラグインのimportとfirebaseSDKの初期化を行います。
&lt;code&gt;Firebase.js&lt;/code&gt;というファイルでcomponentとして切り出して利用できるようにしています。&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 firebase from &amp;#39;firebase&amp;#39;;
require(&amp;quot;firebase/functions&amp;quot;);

const firebaseConfig = {
    apiKey: &amp;quot;管理画面で取得した情報を記載&amp;quot;,
    authDomain: &amp;quot;管理画面で取得した情報を記載&amp;quot;,
    databaseURL: &amp;quot;管理画面で取得した情報を記載&amp;quot;,
    projectId: &amp;quot;管理画面で取得した情報を記載&amp;quot;,
    storageBucket: &amp;quot;管理画面で取得した情報を記載&amp;quot;,
    messagingSenderId: &amp;quot;管理画面で取得した情報を記載&amp;quot;,
    appId: &amp;quot;管理画面で取得した情報を記載&amp;quot;
};

try {
  firebase.initializeApp(firebaseConfig);
} catch(e) {
  console.log(e);
}

export default firebase&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;今回アプリ内ではfireabseのAuthとFunctionsを利用します。&lt;/p&gt;
&lt;h2&gt;Firebase Authを利用する&lt;/h2&gt;
&lt;p&gt;まずはFirebaseのアカウント認証機能を利用します。管理画面で機能を有効にして、ログイン方法も必要なものを有効にしておきましょう。&lt;/p&gt;
&lt;h3&gt;アプリ内での実装&lt;/h3&gt;
&lt;p&gt;先程作成したFirebase.jsを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;import firebase from &amp;#39;../components/Firebase&amp;#39;;&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;firebase.auth().signInAnonymously()
  .then((result)=&amp;gt;{
    console.log(&amp;#39;sign in successfully&amp;#39;);
  }).catch((error) =&amp;gt; {
    console.log(error.message);
  })&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Functionsを利用&lt;/h2&gt;
&lt;p&gt;次はFunctionsを利用してみます。こちらも管理画面で機能を有効にします。そして、アプリとは別の場所で&lt;code&gt;firebase init&lt;/code&gt;などを進めて、利用する関数をFirebase Functions側に実装・デプロイしておきましょう。関数を定義する際は「onCall」で定義したものをFirebase functionsにデプロイしておきます。&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;exports.関数名 = functions.https.onCall((request, response) =&amp;gt; {
    //
    // 処理
    //
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;アプリ内での実装&lt;/h3&gt;
&lt;p&gt;ファイル上部で先程作成したFirebase.jsを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;import firebase from &amp;#39;../components/Firebase&amp;#39;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下で、引数を渡してFirebase functionsにリクエストを行うことが出来ます。&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 getItems = firebase.functions().httpsCallable(&amp;#39;関数名&amp;#39;);
getItems({date:name,skill:skill}).then((result) =&amp;gt; { 
    //
    // 成功したときの処理
    //
}).catch(error =&amp;gt; {
    console.log(error.message);
}) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;私はFunctions内でFirestoreを使ってデータのやり取りを行う形で実装しました。
アプリから直接Firestoreを操作することもできます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;とても簡単に実装が出来ました。特にExpoをejectする必要もなく、そのままExpoでビルドが行なえます。&lt;/p&gt;
&lt;p&gt;Firebaseを使うことで簡易なサーバ側の処理を行うことが出来ますので、データ同期やログインなどの複雑な処理を行うアプリの場合選択肢として良いのではないかと思います。自分でサーバを用意しなくても良いですので管理の必要も無く快適です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ExpoでビルドしたアプリをGoogle Play Consoleにアップすると警告「Android App Bundleの利用」と「64bitビルド」]]></title><description><![CDATA[先日、React Native + expo で作成したアプリをExpoでビルドしてアップロードしたのですが、アップロード後に警告が出ました。…]]></description><link>https://honmushi.com/2019/06/29/expo-64bit/</link><guid isPermaLink="false">https://honmushi.com/2019/06/29/expo-64bit/</guid><pubDate>Sat, 29 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;先日、React Native + expo で作成したアプリをExpoでビルドしてアップロードしたのですが、アップロード後に警告が出ました。2つ警告が出ており、どちらもアプリのビルドに関する内容です。&lt;/p&gt;
&lt;p&gt;これらは無視しても先に進むことができます。しかし、内容のメッセージから察すると2019年8月1日以降は状況が変わりそうですので、解決できないか調べました。&lt;/p&gt;
&lt;p&gt;調査のためにはExpoのフォーラムなどを確認するのがよいです。英語なのですが、そもそも日本語の情報はまだまだ少ないので、本家のサイト確認するのがおすすめです。簡単な英語ばかりなのでGoogle翻訳しながら読める様なものばかりです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://forums.expo.io&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expoフォーラムサイト&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;「Android App Bundle」の件&lt;br&gt;
Expoでのビルドの際にオプションを設定することで解決できました。以降はこの方法でビルドを行えばいいのかなと思います。&lt;/li&gt;
&lt;li&gt;「64bitビルド」の件&lt;br&gt;
Expoはまだ未対応の様子です。コミュニティでは8月1日までに対応する予定ということですので、その情報を受けてから対応するしかなさそうです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;発生した警告&lt;/h2&gt;
&lt;p&gt;以下の2つが発生していた警告です。&lt;/p&gt;
&lt;h3&gt;1. Android App Bundleの利用&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;APK が最適化されていません
警告:
この APK では、使用されていないコードやリソースがユーザーに送信されます。Android App Bundle を使用すると、アプリのサイズを小さくすることができます。
デバイスの設定に合わせてアプリを最適化しないと、ユーザーのデバイスにダウンロードしてインストールするアプリのサイズが必要以上に大きくなります。
アプリは、サイズが大きくなるほどインストール成功率の低下を招き、ユーザーのデバイスのストレージを消費します。

解決策:
Android App Bundle を使用してデバイスの設定に合わせて自動的に最適化するか、複数の APK を使って自分で管理します。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;解決方法&lt;/h3&gt;
&lt;p&gt;すでにExpoはAndroid App Bundleに対応しています。ズバリ、ビルドコマンドにオプションをつけることで利用できます。&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;expo build:android --type app-bundle&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;特に準備や変更が必要ないので気軽に利用できました。&lt;/p&gt;
&lt;h3&gt;2. 64bitビルド&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;警告
このリリースは Google Play の 64 ビット要件に準拠していません

以下の APK または App Bundle は 64 ビットのデバイスで利用できますが、32 ビット向けネイティブ コードしか含まれていません。1
2019年8月1日 以降、すべてのリリースが Google Play の 64 ビット要件に準拠していなければなりません。

アプリには 64 ビットと 32 ビットのネイティブ コードを含めます。Android App Bundle 公開形式を使用して、各デバイスのアーキテクチャが自動的に必要なネイティブ コードだけを受け取るようにします。
これにより、アプリ全体のサイズが増大することを回避できます。詳細&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;解決方法&lt;/h3&gt;
&lt;p&gt;こちらについては&lt;a href=&quot;https://forums.expo.io/t/does-expo-package-64-bit-version/18947/2&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Expoのフォーラム&lt;/a&gt;でも話に上がっていました。この問題は把握しており、現在対応中のようです。2019年8月1日までには対応する予定ですので、それを待ってから対応することになりそうです。&lt;/p&gt;
&lt;p&gt;Expoの対応を待てば良さそうです。Expoのバージョンをアップデートする必要もあると思いますので、プログラムの修正が必要になる箇所があるかもしれません。8月1日までに忘れずに対応するようにしましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;久しぶりにビルドしたものをアップしたら警告が出たので何事かと思いました。それほど問題もありませんでしたし、順次対応されて解決できそうなものばかりでした。ただExpoのアップデートが必要になる可能性がありますので、エラー等発生しないか要チェックです。&lt;/p&gt;
&lt;p&gt;久しぶりに触ってみて改めて感じましたが、Google Playのリリース関連のフローはややこしいです。内部テストやクローズドテストあたりのフローについてもややこしいことが多いので、たまに触っておかないと忘れてしまいます。&lt;/p&gt;
&lt;p&gt;こまめに触るかGoogleの変更を追いかけるかを続けようと思います。
もしくは、警告を読んで対応できるように知識を蓄えておくことが必要そうです。&lt;/p&gt;
&lt;h2&gt;追記&lt;/h2&gt;
&lt;p&gt;後日、64bitビルドも対応されました。特にコマンドの変更は必要なく、通常通りにexpoでビルドを行えば64bitビルドで作成されます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[しゃがんでデザインを見る『デザインの知恵』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/06/24/design-chie/</link><guid isPermaLink="false">https://honmushi.com/2019/06/24/design-chie/</guid><pubDate>Mon, 24 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4845918277/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4845918277&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=906023bf06ddea65ba57756277983e2a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4845918277&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4845918277&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&gt;デザインに唯一の正答はあるか&lt;/h2&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;p&gt;科学は一つの答えに向かって可能性を狭めながら唯一の答えに迫っていく、垂直の答え探しです。
芸術は未知の世界への可能性を横へ広げて選択肢を増やしていく、水平の答え探し・答えづくりだと言えます
。&lt;/p&gt;
&lt;p&gt;科学と芸術では探求の方法・探求の狙いが根本的に異なるものです。&lt;/p&gt;
&lt;h2&gt;やって・みる・わかる&lt;/h2&gt;
&lt;p&gt;これはデザインの展開法のことらしいです。&lt;/p&gt;
&lt;p&gt;前半の「やって・みる」は自身が体験することで何かを感じること。後半の「みる・わかる」は表現を振り返ることでその意味を見出すことだそうです。
こうして進めることでデザインの考え方となるようです。&lt;/p&gt;
&lt;h2&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></item><item><title><![CDATA[問題の根源を考えること『誰のためのデザイン？』]]></title><description><![CDATA[UIデザインの観点で良くオススメとして挙げられる本です。近所の図書館でたまたま見つけたので読んでみました。 思っていたよりも本が厚く、内容は盛り沢山。読むのに体力を結構使います、452ページあるので。
その分学びも多く、UIデザイン/UX…]]></description><link>https://honmushi.com/2019/06/21/darenotameno/</link><guid isPermaLink="false">https://honmushi.com/2019/06/21/darenotameno/</guid><pubDate>Fri, 21 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;UIデザインの観点で良くオススメとして挙げられる本です。近所の図書館でたまたま見つけたので読んでみました。&lt;/p&gt;
&lt;p&gt;思っていたよりも本が厚く、内容は盛り沢山。読むのに体力を結構使います、452ページあるので。
その分学びも多く、UIデザイン/UXデザインの概念・目指すべきことがわかりました。&lt;/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 target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4788514346/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4788514346&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=c38f2d84f4cd17b23ed6c784a425575c&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4788514346&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4788514346&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&gt;デザインの要素&lt;/h2&gt;
&lt;p&gt;良いデザインにおける重要な特性は2つ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;発見可能性&lt;/p&gt;
&lt;p&gt;何をどうすればいいのか&lt;br&gt;
→ 操作すべき場所を見つけられるか、ひらくためのとってとかボタンとかがわかりやすいか&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;理解&lt;/p&gt;
&lt;p&gt;何を意味しているのか、どんな使われ方をするのか&lt;br&gt;
→ 開くためのボタンや取っ手をどうすればいいのか、押すのか引くのかなど&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下の3つのデザインについて考察しています。色やレイアウトよりも、インタラクションな表現であったり操作するまでの理解・ルールなどに重点が置かれている印象です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;インダストリアル・デザイン&lt;/p&gt;
&lt;p&gt;機能・価値・外観を最適化する概念と使用を作る、形と素材を考える。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;インタラクションデザイン&lt;/p&gt;
&lt;p&gt;何ができるか、何が起きているか、についての理解を向上させる。理解可能性と使いやすさを考える
心理学、デザイン、アート、情動の原則を利用する。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;エクスペリエンスデザイン&lt;/p&gt;
&lt;p&gt;質と愉しさに焦点を合わせ、製品・プロセス・サービス・イベント・環境をデザインする。
情動面への影響を考える。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;人間中心デザイン&lt;/h2&gt;
&lt;p&gt;人間中心デザイン（Human-Centered-Design）は心理学とテクノロジーを理解することから。ニーズと能力を取り上げ、それに合わせてデザインする。人間から機械、機械から人間へのコミュニケーションをデザインします。&lt;/p&gt;
&lt;p&gt;特に重要なこととして、旨くいかないこと旨くいかなかったときのことを考慮することが大切です。&lt;/p&gt;
&lt;h3&gt;インタラクションの要素&lt;/h3&gt;
&lt;p&gt;インタラクションは以下の要素で構成されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;アフォーダンス&lt;/p&gt;
&lt;p&gt;ものと人の関係のこと、可能か不可能が明確に知覚可能であると良い&lt;br&gt;
どんなことが可能なのか。「押せる」「動かせる」&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;シグニファイア&lt;/p&gt;
&lt;p&gt;アフォーダンスが存在することを示すもののこと。記号とかが代表的だが、音とかも含むことが出来ます。&lt;br&gt;
どこでできるのか。「丸いところを押す」「矢印の方向に動かせる」&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;制約&lt;/p&gt;
&lt;p&gt;物理的、文化的、意味的、論理的の4つ。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;対応付け&lt;/p&gt;
&lt;p&gt;どのボタンがどの電気と対応しているのか。集合の中での対応のこと。どこを動かせばどこが動くのか。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;フィードバック&lt;/p&gt;
&lt;p&gt;要求に対してシステムが働いていることを知らせる手段。操作が伝わっているか、受け取っているのか。遅いと不安、多すぎても不安。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;概念モデル&lt;/p&gt;
&lt;p&gt;ものがどう動くかの説明。上記の要素が組み合わさってこれが作られる。人間はそれを理解して道具を使うことができる。マニュアルを読まないとこれが理解できないものは好ましくないと言える。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;発見可能性&lt;/p&gt;
&lt;p&gt;何が行えるのか？今はどんな状態なのか？が判断できること&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;行為の心理学&lt;/h2&gt;
&lt;p&gt;何かを使う時2つの隔たりに出会います。これらの隔たりへの理解を手助けするのがデザインです。これらに対して、「わからない」「自分にはできない」という判断を人間が感じてしまうのはデザインの失敗。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;どう動かせばいいのかという隔たり&lt;/li&gt;
&lt;li&gt;何が起きたのかという隔たり&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;行為の7段階&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;ゴール&lt;br&gt;
どうなりたいか&lt;br&gt;
何を達成したいか  &lt;/li&gt;
&lt;li&gt;プラン&lt;br&gt;
どうするか&lt;br&gt;
代替となる行為は何か  &lt;/li&gt;
&lt;li&gt;詳細化&lt;br&gt;
なにをするか&lt;br&gt;
今どの行為ができるか  &lt;/li&gt;
&lt;li&gt;実行&lt;br&gt;
する&lt;br&gt;
どうやってやるのか&lt;/li&gt;
&lt;li&gt;知覚&lt;br&gt;
状態が変わった&lt;br&gt;
何が起こったか&lt;/li&gt;
&lt;li&gt;解釈&lt;br&gt;
ということはこうなった&lt;br&gt;
それは何を意味するのか&lt;/li&gt;
&lt;li&gt;比較&lt;br&gt;
ゴールにたどり着いたのか&lt;br&gt;
それで良いのか、達成したのか&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3つの処理レベル&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;本能レベル&lt;br&gt;
良いか悪いか、安全か危険かの潜在意識的な反応&lt;/li&gt;
&lt;li&gt;行動レベル&lt;br&gt;
学習によってもたらされる、パターンへの対応&lt;/li&gt;
&lt;li&gt;内省レベル&lt;br&gt;
認知的でゆっくりしている、状況や行為を評価して、予測した上で処理する&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;エラーの原因&lt;/h2&gt;
&lt;p&gt;根本原因解析のために5回「なぜ」を繰り返すことが紹介されています。&lt;/p&gt;
&lt;p&gt;ほかにも、生じる前では思いつきもしなかったのに、起きたあとでは明白で予測可能だったと見えてしまうこともあります。後知恵では物事は論理的に見えるそうです。&lt;/p&gt;
&lt;h3&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;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;h2&gt;デザイン思考&lt;/h2&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;p&gt;書いてある内容は難しめで量も多いのですが、たしかにデザインを行う上で重要な概念だと思いました。
実際のプロダクトや道具に関するUI/UXの説明が多く、プロダクトデザインなんかにも通じるところがありました。&lt;/p&gt;
&lt;p&gt;デザインを行う上で、依頼された問題のみを解決するのではなく、そもそもの問題を見つけること。この事がしっかり書いてあり、デザインを何のために使うのを理解できました。&lt;/p&gt;
&lt;p&gt;そもそもの概念などは、なかなか学ぶ機会がありません。人に教えてもらうか本で学ぶかしか無いと思います。デザイナーに限らず、早いうちに理解しておきたい問題解決論でした。ぜひ一読をおすすめしたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[お手軽で快適なサーバレス開発『Firebase入門』]]></title><description><![CDATA[Googleが提供するFirebaseに関する解説書です。
バックエンドの処理をサーバを用意せずクラウドで行うことができるサービスです。データベースや関数実行、ログイン機能などが利用できます。いわゆるサーバーレスアーキテクチャってやつです。 Firebase…]]></description><link>https://honmushi.com/2019/06/14/firebase-nyumon/</link><guid isPermaLink="false">https://honmushi.com/2019/06/14/firebase-nyumon/</guid><pubDate>Fri, 14 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Googleが提供するFirebaseに関する解説書です。
バックエンドの処理をサーバを用意せずクラウドで行うことができるサービスです。データベースや関数実行、ログイン機能などが利用できます。いわゆるサーバーレスアーキテクチャってやつです。&lt;/p&gt;
&lt;p&gt;Firebaseには無料で使える枠もあるので、試しに利用することが出来ます。サーバ管理の必要はなく設定も簡単です。サーバ用意するよりも断然お手軽ですが、その分自由度と性能の面で相談することになります。Webサービスはもちろん、スマホアプリのバックエンド処理に用いられることも多く、とても便利なサービスです。&lt;/p&gt;
&lt;p&gt;入門書を見つけたので、一通り読んで試してみました。公式のドキュメントでもそれなりに使えますが、この本ではWeb・iOS・Androidのプラットフォームでの使い方が紹介されています。実際にFirebaseの管理画面を触りながら進めると理解が深まるのでおすすめです。&lt;/p&gt;
&lt;p&gt;アプリやWebサービスを作ってみた、次はバックエンドでデータベースやログインの実装をしたい、と考えている人に読んでほしいです。&lt;/p&gt;
&lt;p&gt;サーバ立てて実装するか、Firebaseで済ませるか検討してみるのもおもしろいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798057754/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798057754&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6848e305e7c72c86360edd13c3aab86a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4798057754&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4798057754&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&gt;サーバーレスを選択する必要性&lt;/h2&gt;
&lt;p&gt;簡単に実装できること、サーバ管理の負担がなくなることなどが挙げられます。&lt;/p&gt;
&lt;h3&gt;サーバ管理者の負担&lt;/h3&gt;
&lt;p&gt;サーバの管理は思ったより大変です。アクセス集中したサーバが落ちたり、障害が発生することもあり心配事は多いです。
ハード・ソフト・デプロイ・メンテナンス・ネットワーク・データベース・電源・HDD・サイバー攻撃・アップデートとか、それはもうさまざまです。&lt;/p&gt;
&lt;p&gt;オンプレミス以外のクラウドサービス・VPSなどの選択肢も増え、責任をサービスに任せられる形になりましたが、それでもサーバ管理・立ち上げ・運用は大変です。&lt;/p&gt;
&lt;p&gt;専門知識も問われるので、管理する専門の人を用意しないといけないこともあります。サーバ管理者は新しい知識が得られるおもしろい領域ですが、プログラミングをガンガン書くわけではないため、縁の下の力持ちな役目になります。システム運用においてとても重要なのですが、皆さんは興味はあるでしょうか。&lt;/p&gt;
&lt;h3&gt;サーバーレスという代替案&lt;/h3&gt;
&lt;p&gt;その辺の懸念を軽くできるのがサーバーレスという手法です。代表的なプラットフォームとしてGoogleの提供するFirebaseが挙げられています。&lt;/p&gt;
&lt;p&gt;ユーザー認証・データベース・ストレージ・ホスティング・クラウドファンクション・機械学習・アナリティクス・メッセージング・プレディクションなどの機能が利用できます。一部ベータ版の機能もありますので確認してから利用しましょう。&lt;/p&gt;
&lt;p&gt;Firebaseでは無料プランがありますので、とりあえずこれを使ってみましょう。枠を超えると利用できなくなるので有料プランに拡張する必要があります。定額のものと従量課金のプランが用意されています。&lt;/p&gt;
&lt;h3&gt;サーバーと並行して利用する手法&lt;/h3&gt;
&lt;p&gt;中のコラムでサーバレスの利用実例がありました。
巨大なWebAppをAWSのサーバで動かしており、データベースもAWSで動いているサービスです。&lt;/p&gt;
&lt;p&gt;そこにスマホ版のアプリを作成します。アプリでのみ必要なデータに関しては、Firebaseを利用してデータを扱うようにします。
アプリでのみ表示できる特集記事のデータとかでしょうかね。&lt;/p&gt;
&lt;p&gt;このようにすでに動作しているサーバと並行して、追加のデータサービスを追加する場合などに、サーバレスを使うことがあるようです。
利用用途がWebとスマホで切り分けられるのであれば確かに良い使い方だと思います。&lt;/p&gt;
&lt;h2&gt;各プラットフォームでの利用法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Webの場合、クライアント側でscriptで利用する場合と、node.jsで動かす場合が選べる。&lt;/li&gt;
&lt;li&gt;AndroidはJavaでAndroidStudioを利用する場合。&lt;/li&gt;
&lt;li&gt;iOSはSwiftでXcodeとCocoaPodsを利用する場合。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;全編これらの実装パターンを紹介していますので、当てはまるプラットフォームの内容を読んでいけば良いです。実質3分の1位を読めば良いです。
私はWebでの利用が多いので、Webの部分を重点的に読みました。&lt;/p&gt;
&lt;h2&gt;WebでFirebaseを利用する上で参考&lt;/h2&gt;
&lt;h3&gt;モジュールの利用&lt;/h3&gt;
&lt;p&gt;firebasee.jsはすべての機能を含むためで容量が大きい。
firebase-app.js+各機能のパッケージを使うことで容量を削減できる。&lt;/p&gt;
&lt;h2&gt;データベースの利用&lt;/h2&gt;
&lt;p&gt;この本ではRealtime DatabaseとCloud firestore両方の情報が書いてあります。
これからはCloud firestoreがメインになっていくのかと思いますが、両方の基礎的な知識と使い方が書いてあります。&lt;/p&gt;
&lt;h3&gt;whereについて&lt;/h3&gt;
&lt;p&gt;CRUDは普通に出来ます、データ取得するときに並び替え、絞り込みも可能です。絞り込みについてはちょっと特殊でした。
前方一致検索の場合&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;doc.where(&amp;quot;name&amp;quot;,&amp;#39;&amp;gt;=&amp;#39;, &amp;quot;検索文字&amp;quot;).where(&amp;quot;name&amp;quot;,&amp;#39;&amp;lt;=&amp;#39;,&amp;quot;検索文字&amp;quot;+ &amp;#39;\uf8ff&amp;#39;).get().then()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ざっくりこんな感じです。
ポイントはWhereをチェーンでつなげることと、「\uf8tt」の文字を連結したものを指定します。
この文字はFirebaseのドキュメントを見たところ以下の記載がありました。覚えておこうと思います。正規表現でも利用できたら便利なんですけどね。&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;\uf8ff 文字は Unicode 範囲内の非常に高いコードポイントです。  
この文字は Unicode のほとんどの通常文字より後に来るため、クエリは 検索文字 で始まるすべての値に一致します。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Storageの利用にはCORSの設定が必要&lt;/h2&gt;
&lt;p&gt;FirebaseのStorageの機能を利用することでファイルをクラウドに配置しておくことが出来ます。&lt;/p&gt;
&lt;p&gt;しかしHostingで与えられるドメインとStorageで与えられるドメインが異なるためCORSの制約に引っかかります。そのままでは利用できません。
以下の内容のエラーが発生します。&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;No &amp;#39;Access-Control-Allow-Origin&amp;#39; header is present on the requested resource. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ちなみに「CORS」とは「オリジン間リソース共有、 Cross-Origin Resource Sharing」の略です。異なるドメインへのフロントエンドのリクエストに関しては制御されており、許可されていないとデータは送信されません。Firebasee Storageでもこの制御があるため、設定する必要があります。&lt;/p&gt;
&lt;h3&gt;CORSの設定変更方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Google Cloud SDKのインストール&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloud.google.com/sdk/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://cloud.google.com/sdk/&lt;/a&gt; からインストールします。&lt;/p&gt;
&lt;p&gt;Firebaseの機能は実はGCPを利用しています。ですのでStorageの機能の設定については、GCP経由で設定を行う必要があるようです。&lt;/p&gt;
&lt;p&gt;インストールが完了したら以下のコマンドを実行します。新しい構成を作成するコマンドでGoogleアカウントでのログインが求められます。Firebaseのアカウントと同じものでログインしましょう。&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;gcloud init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;cors.jsonの作成&lt;/p&gt;
&lt;p&gt;以下のファイルを作成します。ファイル名は「cors.json」 にします。originの部分にはHostingのドメインを設定します。&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;[
    {
        &amp;quot;origin&amp;quot;: [&amp;quot;https://tenka-ichi.web.app&amp;quot;],
        &amp;quot;method&amp;quot;:[&amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot;,&amp;quot;POST&amp;quot;,&amp;quot;DELETE&amp;quot;],
        &amp;quot;maxAgeSecond&amp;quot;:3600
    }
]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;jsonの設置&lt;/p&gt;
&lt;p&gt;Storageに割り当てられているURLを確認します。Firebase管理画面のStorageのファイルの画面で上部に表示されています。
以下のような形式のURLです。〇〇のところはプロジェクトの名称が入っています。&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;gs://〇〇.appspot.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記で確認したURLを使って以下コマンドを実行することで、cors.jsonをアップロードします。&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;gsutil cors set cors.json gs://〇〇.appspot.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これで設定完了です。設定したHostingURLからStorageにリクエストを行うと、正常にデータを返してくれるようになりました。&lt;/p&gt;
&lt;p&gt;ただ、ローカル環境からのリクエストについては引き続きエラーです。ローカルからもリクエストが通るようにしたいです、調べてみようと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Firebaseとても便利です。簡単に準備できますし、一通りのバックエンド処理も可能です。
既存のフレームワーク等を利用することは出来ませんが、それくらいで実現できる簡単な要件に向いているのだと思います。
サーバの管理も必要ありませんし、使えるとことでは積極的に利用を検討していきたいと考えています。&lt;/p&gt;
&lt;p&gt;公式のドキュメントはちょっとわかりにくく親切ではありません。この本を読めば、一通りの機能のセットアップ・準備の手順と、各プラットフォームからの使い方がわかるので良かったです。&lt;/p&gt;
&lt;p&gt;時間見つけて、Firebaseの一通りの利用方法をまとめていこうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[create-react-appを使ったReactアプリの作り方とNext.jsへの期待]]></title><description><![CDATA[Reactでアプリケーションを作る場合「create-react-app」を利用することで、簡単に環境を用意することができるのでオススメです。 今回は「create-react-app」に関する説明と使い方、さらにこれから使ってみようと考えている「Next.js…]]></description><link>https://honmushi.com/2019/06/13/create-react-app/</link><guid isPermaLink="false">https://honmushi.com/2019/06/13/create-react-app/</guid><pubDate>Thu, 13 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Reactでアプリケーションを作る場合「create-react-app」を利用することで、簡単に環境を用意することができるのでオススメです。&lt;/p&gt;
&lt;p&gt;今回は「create-react-app」に関する説明と使い方、さらにこれから使ってみようと考えている「Next.js」についての情報を書きます。&lt;/p&gt;
&lt;p&gt;Reactを使ってSPAを作ってみたいという人にぜひ読んでほしいです。create-react-appを使って得た経験から、簡単にできること、逆に出来ないことを紹介します。&lt;/p&gt;
&lt;p&gt;その上でこれから時間を見つけてNext.jsを使ってみようと考えています。そのことへの期待も書いておきます。実際に使ってみた感想はまた今度書く予定です。&lt;/p&gt;
&lt;h2&gt;create-react-app&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/facebook/create-react-app&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/facebook/create-react-app&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Reactを開発しているFacebookが公式に用意している、コマンドツールです。
ReactやJSXを利用するためにはいくつかの依存するツールが必要なのですが、それらを1コマンドで用意してくれるものです。&lt;/p&gt;
&lt;p&gt;とても簡単なので勉強とかに利用するのであればオススメです。&lt;/p&gt;
&lt;h3&gt;使ってみる&lt;/h3&gt;
&lt;p&gt;npmなら以下のコマンドでインストールした後&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 create-react-app&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下のコマンドを実行することで、「my-app」という名前でディレクトリ構成が作成されます。&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 init react-app my-app&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Reactを動かすのに必要なものが一式揃っており、babelとかWebpackとかを自前で用意しなくても良いです。
package.jsonの用意や運用管理はややこしくなりがちですので、任せることができるとスムーズに出来て良いです。&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 start&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;npm run build&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;/build&lt;/code&gt;ディレクトリに出力されたファイルをサーバにデプロイすれば公開です。簡単ですね。Netlifyとかならホスティングサービス側でビルドすることもできるので、とても便利です。&lt;/p&gt;
&lt;h3&gt;SPAを構築するなら十分&lt;/h3&gt;
&lt;p&gt;とりあえずSPAを作る上で最低限のものは入っています。簡単なSPAやReactの勉強に使うのであれば十分な内容になってます。依存関係なんかも用意してくれるので、とても便利。&lt;/p&gt;
&lt;h3&gt;避けたほうがいい場合&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;バックエンドのフレームワークと合わせて利用したい場合はもっと柔軟なものを利用したほうがいいそうです。RailsやDjangoとかでサーバサイドを実装する場合ですね。SPAで作る必要がない場合も、特に利用する必要はなさそうです。&lt;/li&gt;
&lt;li&gt;SSRを実装したい場合はNext.jsなどの利用が推薦されています。create-react-appはあくまでも静的なJS・HTML・CSSを用意するだけになっており、そのことでバックエンドの心配をなくしました。&lt;/li&gt;
&lt;li&gt;ブログなどのコンテンツであれば、Gatsbyの利用を進められています。このブログもGatsbyで生成しています。動的に要素が変わるとかユーザーが投稿するとかであれば無理ですが、管理人が更新するだけのブログなのでGatsbyで大丈夫ということです。&lt;/li&gt;
&lt;li&gt;もっとカスタマイズしたい場合は「Neutrino」を参考に上げています。これについてはよくわかってません。時間があったら使ってみます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;SEOのことを考えるとSSRしたい&lt;/h3&gt;
&lt;p&gt;SPAの弱点だと思うので仕方無いとも思いますが、できるならSSRを実装したいです。
OGPやSEO関連の懸念が払拭できればとても便利なのですが。&lt;/p&gt;
&lt;p&gt;create-react-appではSSRについてのフォローはありません。公式Githubに書いてあるとおりNext.jsなどのフレームワークを利用するのがオススメらしいので、ちょっと調べてみました。&lt;/p&gt;
&lt;h2&gt;Next.js&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://nextjs.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://nextjs.org/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Next.jsとは&lt;/h3&gt;
&lt;p&gt;Reactを使ったフレームワークです。
純粋なReactだけでは実装が難しかったことについて、いくつか簡単に実装できるようになります。
上記にも書きましたがSSRを実装したいという場合に、Next.jsの使用を推奨されています。ですのでSSRに対してどのくらい便利なのかという期待をもっています。&lt;/p&gt;
&lt;p&gt;ちなみにVue.jsのフレームワークはNuxt.jsです。名前が似ているのはNext.jsを参考に作られたからだそうです。ややこしいのでやめてほしいですが仕方ないですね。&lt;/p&gt;
&lt;h3&gt;できること&lt;/h3&gt;
&lt;p&gt;Next.jsを使うことで以下のことが簡単にできるそうです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ファイルのディレクトリ構造によるルーティング&lt;/p&gt;
&lt;p&gt;ルーティングのルールをディレクトリ構造で指定できるということです。ややこしいですが、pagesディレクトリ以下に設置したファイル構造がそのままURLの定義として反映されるみたいなことです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;import の最適化&lt;/p&gt;
&lt;p&gt;宣言したimport文が解釈され、必要なページに配信されるようになるようです。不要なimportとかが解決されるので便利だとは思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Server Side Rendering&lt;/p&gt;
&lt;p&gt;SSRも簡単に実装できるようです。サーバ側でnode.jsを動かす必要があがます。となるとNetlifyやFirebaseでは実現できなさそうです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Static Exporting&lt;/p&gt;
&lt;p&gt;静的なコンテンツとしてエクスポート出来ます。これを使ってエクスポートしたページを設置すれば、SSRを実現できるという考え方がある？様子です。それはSSRなのか？とは思いましたが、SEOとかOGPとかは確かに意図したものにできそうなので、良しとしましょう。よく考えれば&lt;a href=&quot;https://www.gatsbyjs.org&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Gatsby&lt;/a&gt;はこれに該当するものですね。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;SSRについて&lt;/h3&gt;
&lt;p&gt;というわけで、Next.jsでSSRを実装する場合、サーバ側にNode.jsを立ち上げて動かす・または静的なHTMLとしてサイトをエクスポートして設置するの2パターンあるようです。&lt;/p&gt;
&lt;p&gt;FirebaseやNetlifyではサーバ上でnode.jsを動かしてリクエストに答えるのは難しいので、後者の手段になります。
まあサーバーレスをイメージしたサービスかと思いますので、SSRを実現しようとすることはそもそも矛盾しているのかもしれません。静的コンテンツをCDNで配信するくらいで実現できる要件に抑えることのが大切に思います。&lt;/p&gt;
&lt;p&gt;Node.js動かすサーバがあるなら、最初からrailsとかLaravelとかでサイトを実装しそうですがどうなんでしょうか。やっぱりSPAとかサーバレスな環境では、SEOなどの問題は大きく残っている印象です。&lt;/p&gt;
&lt;p&gt;サーバレスでさくっと作る！ → SEO観点からSSRをしたい → サーバが必要！&lt;br&gt;
というような流れになる気がします。それなら最初からサーバサイドをPHPやRubyで作るところから始めるよな。と思いました。&lt;/p&gt;
&lt;p&gt;思い切ってSSRを諦めるという決断が必要なのかもしれません。もしかすると。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;create-react-appはとても簡単で便利です。ただし、SPAなこともありOGPやSEO関連の要素については実装が難しいです。それが許容できる簡単なWebサービスを作る、サーバレスなアプケーションを作るということであれば十分です。&lt;/p&gt;
&lt;p&gt;SSRを実装しようとした場合はNext.jsなどを利用する必要があります。結局rubyやphpをサーバに入れてバックエンドを作った方がいいような気もします。どうなんでしょうか。どういう場合に選択されるのかイマイチわからないままです。&lt;/p&gt;
&lt;p&gt;静的要素としてExportするなどSSRの実装方法はいくつか方法がありました。静的なコンテンツとしてSSRを実現することができるので、その点で差異はあるとも思います。&lt;/p&gt;
&lt;p&gt;何より全部jsで作るというのが嬉しいことなのかもしれません。
動的なサイトか静的なサイトかの要件が変わってしまった場合でも柔軟に対応できる、と公式にも書いてありました。そんなことあるのか？と思いますけど。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Reactの基本構成を学ぶ『Reactビギナーズガイド』]]></title><description><![CDATA[オライリーのReact入門書です。 Gtasbyで作成しているこのサイトももちろんですが、私はいくつかReact…]]></description><link>https://honmushi.com/2019/06/11/React-bigin/</link><guid isPermaLink="false">https://honmushi.com/2019/06/11/React-bigin/</guid><pubDate>Tue, 11 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;オライリーのReact入門書です。&lt;/p&gt;
&lt;p&gt;Gtasbyで作成しているこのサイトももちろんですが、私はいくつかReactを使った構築をしています。
いつもディレクトリ構造やクラスの内部設計について、スタンダードな作り方がわからなくて困っていましたので手にとって見た本です。&lt;/p&gt;
&lt;p&gt;ビギナーズガイドとあるように、Reactを動かすためのインストール方法に始まり、基礎的な構文の情報、オブジェクトの中身などの紹介がされています。JSXを使わない実装方法から始めて、JSXを利用した方法についても学んでいくので、そもそもの仕組みの理解も進みます。&lt;/p&gt;
&lt;p&gt;応用的な面として、テストなどの知識も含まれていますので、Reactに興味を持ってこれから使ってみようという人にはとてもいい本だと思います。オライリーにしては薄く内容も簡単です、さくっと読める内容になっています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873117887/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873117887&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=d65483f37fac4e7abb85db56745c0bba&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873117887&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873117887&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&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;index.html
/css
    app.css  --アプリケーション全体で使う
    /components  --特定のコンポーネントでのみ使う
        oo.css --コンポーネント名.css 
/js
    /build -JSX含まない、ブラウザで実行可能
    /source -JSX含む
        app.js   --アプリケーション全体で使う
        /components  --特定のコンポーネントでのみ使う
            oo.js  --コンポーネント名.js
/images
/scripts&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;1つのReactコンポーネントに、jsとcssファイルが一つずつ用意される。&lt;/li&gt;
&lt;li&gt;コンポーネントに指定するスタイルはclassName「コンポーネント名」で定義、コンポーネントのルート要素にこのクラス名を設定する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;応用的な知識&lt;/h2&gt;
&lt;p&gt;テストやビルド、デプロイに関する手順や考え方の説明です。静的な方チェックやJestを使ったテストの実装方法もあります。実際に雛形のアプリを作成してコマンドを試しながら進めていきます。あまりCUIに慣れていない人にもわかるよう親切になっており、実務でも役立ちそうな知識が詰まっていました。&lt;/p&gt;
&lt;p&gt;ところどころに応用として一歩踏み込んだ質問がされています。特に無視しても問題はありませんが、より深く知識を得るために立ち止まって調べてみることをおすすめします。ちょうど良い難易度のものばかりで、知っているとデバッグや障害などの際に役立つ知識が多かったです。&lt;/p&gt;
&lt;h2&gt;こんな人におすすめ&lt;/h2&gt;
&lt;p&gt;ビギナーズガイドという名前の通り、Reactを使用したことが無い人向けの内容でした。書き方も親切で丁寧になっていますし、サンプルのアプリも簡単です。始めてReact触ってみるとか、これからつかってみようかなという人に読んでほしい本です。&lt;/p&gt;
&lt;p&gt;すでに業務でつかったことがあるとか、アプリ作ったことのある人にとっては物足りない内容かもしれません。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;新しいフレームワークやソフトウェアを調べてつかってみるときに、「どんな内部設計がスタンダードなのだろうか」ということがいつも気になってしまいます。設計・実装の経験があるので作って見たらそれなりに出来ますが、フレームワーク側で推奨している方針とかがあると思うので、できる限り従いたいものです。&lt;/p&gt;
&lt;p&gt;今回はビギナー向けの本を読みましたが、各フレームワークや言語の代表的なプロダクトのソースコードについて、目を通しておくまたはブックマークしておくのがいいなと思いました。&lt;/p&gt;
&lt;p&gt;ただ、必要になったときに調べても情報が雑多になっていてよくわからないことが多いです。公式のドキュメントさえ、最小限の情報しか無いことが多いです。できるのであれば、詳しい人に聞くのが一番オススメだと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[レイアウトの基本が学べる本『知りたいレイアウトデザイン』]]></title><description><![CDATA[レイアウトデザインの基礎を学ぶことが出来る本です。 基礎的な知識の部分を厚く説明しており、…]]></description><link>https://honmushi.com/2019/06/10/shiritai-layout/</link><guid isPermaLink="false">https://honmushi.com/2019/06/10/shiritai-layout/</guid><pubDate>Mon, 10 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;レイアウトデザインの基礎を学ぶことが出来る本です。&lt;/p&gt;
&lt;p&gt;基礎的な知識の部分を厚く説明しており、1から学ぶような人におすすめしたい内容でした。
すでにある程度できる人にとっては、得られるものは少ないかもしれません。&lt;/p&gt;
&lt;p&gt;デザイン全体というよりはレイアウトに集中した内容です。フォントのことや色などの知識は少なめです。全く書いていないわけではありませんので、コンテンツを作る際には十分な量の情報は乗っています。
レイアウトメインの本はちょっと珍しい気もします。しかし、内容は基礎的な知識や考え方、デザインの進め方から始まっているので、他の領域についても役に立つ内容だと感じました。デザイン全体に効果のある内容だと言えます。&lt;/p&gt;
&lt;p&gt;レイアウトする上での基礎知識に加えて、実例として作成されたものの紹介があります。アイデアとして33個のコンテンツが紹介されています。縦組み・横組み・Webといくつかのフォーマットが紹介されていますので、それらに対して応用できる知識になっています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4774194182/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774194182&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=8ed9ec816d8c4fb4aed2f6c07a009c3a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4774194182&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774194182&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&gt;Who What Howの法則&lt;/h2&gt;
&lt;p&gt;伝わるレイアウトのための基礎だそうです。レイアウトにかかわらず何にでも応用できそうです。
わかりやすくまとまっておりとても参考になりました。実際に手を動かしてデザインを行う前に、しっかりと頭を使って考えることが大切です。プログラミングなんかもそうですから、何にでも当てはまる原則なのかもしれません。&lt;/p&gt;
&lt;p&gt;時間がないときほど、すぐに取り掛かろうとしてしまいます。一息おいて、頭で考えるところから初められるような余裕を持ち続けたいものです。&lt;/p&gt;
&lt;h3&gt;Who ターゲットを理解する&lt;/h3&gt;
&lt;p&gt;具体的な対象のイメージを考える。絵にできるくらいの人物像が書けるくらいか、実在する人物を思い描けるようになっていると良いです。&lt;/p&gt;
&lt;h3&gt;What 伝えたいことを明確にする&lt;/h3&gt;
&lt;p&gt;優先順位を決めて、伝えたいことを絞ります。全部のせたくなりますが我慢しましょう。&lt;/p&gt;
&lt;h3&gt;How 見せ方を考える&lt;/h3&gt;
&lt;p&gt;ラフなどを作成して方向性を考えます、優先順位を意識して進めることがコツです。&lt;/p&gt;
&lt;h2&gt;レイアウトのルール&lt;/h2&gt;
&lt;p&gt;判読性・視認性・可読性という3つのルールを使って、レイアウトのテクニックを学びます。
基礎的な使い方に加えて応用的なテクニックも紹介されています。&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;/p&gt;
&lt;p&gt;デザインと一言で言っても、含まれている領域は幅広く、憶えるべき知識やテクニックも膨大です。こういったパートに分けた本を読みながら一つずつ身に着けていく方法がおすすめです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;DTPの基礎的な言葉の説明やAdobeのソフトの使い方なんかも載っています。細かいところにも手が届くような本でした。&lt;/p&gt;
&lt;p&gt;レイアウトに関する基礎的な知識と、広く浅いテクニックを同時に学ぶことができるので、レイアウトについて学び初めの人にちょうどいいと思います。レイアウト部分に集中した内容になっていますので要点をしっかり見つけられます。&lt;/p&gt;
&lt;p&gt;この本は知りたいデザインシリーズの一つだそうです。他にも「配色」「タイポグラフィ」の本画が版されていますので、合わせて読んでみようと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[覚えておきたい口癖『ITリーダーが確実にファシリテーションを身につける本』]]></title><description><![CDATA[ファシリテーションに関する本です。 IT…]]></description><link>https://honmushi.com/2019/06/07/it-fas/</link><guid isPermaLink="false">https://honmushi.com/2019/06/07/it-fas/</guid><pubDate>Fri, 07 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ファシリテーションに関する本です。&lt;/p&gt;
&lt;p&gt;ITを牽引するリーダーやマネージャーが会議などの場でファシリテーションを行う上でのコツやテクニックを紹介しています。他にもファシリテーションの基本や、それを利用したチームでの取り組み方なども紹介されています。リーダーとして周りのメンバーを巻き込む力や、一緒に考えながら進む方向を決めていくことなどができるようになると思います。&lt;/p&gt;
&lt;p&gt;マネージャーでなくても、会議などで簡単に実践できるテクニックが載っていたので参考にしたいと思いました。日頃から口癖として身につけておくといいものや、いざというときに使える一言など、いくつも紹介されておりとても役に立つ本でした。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/B00Z9FQUSC/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B00Z9FQUSC&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=f0dc410bf3b90e10104c3bc8194e2419&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B00Z9FQUSC&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=B00Z9FQUSC&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&gt;身につけるべき口癖&lt;/h2&gt;
&lt;p&gt;相槌を打つことや、メンバーに考えてもらうための一言が紹介されています。それぞれどんな効果があるのか、どんな場面で使うかが丁寧に書かれているのでわかりやすいです。逆に使ってはいけない場面なども記載されています。紹介されているのは11個なので、身につけるのも簡単そうです。&lt;/p&gt;
&lt;p&gt;メンバーに頭を使ってもらうための質問や、実際に行動に取り掛かるための一言など、たしかに効果がありそうだと思うものばかりでした。他にもYesかNOで答えるような質問ではない、オープンな質問から始めるといったテクニックなども紹介されています。&lt;/p&gt;
&lt;p&gt;会議の場でこのような発言が出来たらとても良いと思います。リーダーが発言する内容になっていますが、実際には会議の中で誰が発言しても意味はあると思います。むしろ、リーダーになりたいと思っている人こそ、この内容を学んで実践してほしいです。周りからの印象も大きくかわり、役目を任せてみようかなと思われるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;リーダーっぽい発言をしているうちに、実際にリーダーになっているのではないかということです。たった11個の発言で十分にそれらしく見えるので、とても効果的だと感じました。&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;なるほど
どうしてそう思ったの
・・・(無言)
ポイントを一言で
皆さんどうですか？からの、〇〇さんどうですか？
あとでもう一度聞くので考えておいて
別の言葉で表現すると
あえて
話し合いの結果として
もっと良くするためには
ありがとう&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;こんな人におすすめ&lt;/h2&gt;
&lt;p&gt;IT業務に携わる人でファシリテーションが必要な人。すなわちリーダーとかマネージャークラスになった人におすすめです。チームが旨く回らないとか一体感が無い、とかチームならではの問題に対して、大きな効果を発揮する知識だと思います。&lt;/p&gt;
&lt;p&gt;それ以外の人でも、この本の内容を実践することで周りに一目置かれ、リーダー的な振る舞いを期待されて昇進できることもあると思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;会議中に、「この時間無駄だな〜」と思ったことは誰でもあるのではないでしょうか。話が進まなかったり、同じ人ばかり喋っていたり、結局何も残らなかったり、その後も何も行動しなかったり。よくあることではないかと思います。
この本では大切なこととして、他人を変えるのではなく、まず自分を変えるということを述べていました。
旨くいかないなあと思ったときに、「だめだこりゃ」とか「誰かなんとかしてくれ」ではなく、どうすれば旨く行くのか、もっと良くする方法はないか、そのために自分に何ができるのかといったことを考えるようにしましょう。&lt;/p&gt;
&lt;p&gt;実際に意味のない会議問のはとても多いと思いますが、それを自分の行動で変えることができればメリットも大きいです。思い切って出席しないという選択肢もありますが、できるのであればファシリテーションに挑戦してより良い会議にできる用にしたいところです。&lt;/p&gt;
&lt;p&gt;リーダーとして会議の場でのあるべき姿がわかる良い本でした。会議の場で役割を決めてしまうと、意見が出づらくなったりすることもありますが、ファシリテーションはどうしても必要だと思います。自分がそのことに気づいて仕掛けられるように意識できると、とても良いと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[AdSenseの「要注意 - ads.txtファイルが含まれていないサイトがあります。」への対応]]></title><description><![CDATA[数日前からAdSense…]]></description><link>https://honmushi.com/2019/06/07/ads-text/</link><guid isPermaLink="false">https://honmushi.com/2019/06/07/ads-text/</guid><pubDate>Fri, 07 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;数日前からAdSenseの管理画面に以下の表示が出るようになりました。&lt;br&gt;
今回はこの表示について、原因と内容の理解、解決方法について情報を書いておきます。同じような表示が出ている人は多いと思いますので、対応の際の参考になればと思います。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a31544a0d7031648bcc587981fa4a1b6/636d3/adsnotice.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 20.27027027027027%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAsElEQVQY04WPWQ7CMAxEe/+DcA8OwT8S6QIlTZombVYPTgWV4AdLzx5ZljzTWGswqRFaz4yG9x4xRiSmFhF9UUr5geBDgFIaYgxo4uqghYBpBWZxw9J3sEMP07U7Vduhw8LasQ7PEXmSSExWEjASRT3h7g94t6Eh/hL9htU5ZHZFOSHxx0oM/tAfSko73GCWiNPZ4nLdOEveHTc1VuEokY9q3Gr/X9F75gLIhbAGOvYv7bk29J9//NQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;アドセンスの注意&quot;
        title=&quot;アドセンスの注意&quot;
        src=&quot;/static/a31544a0d7031648bcc587981fa4a1b6/fcda8/adsnotice.png&quot;
        srcset=&quot;/static/a31544a0d7031648bcc587981fa4a1b6/12f09/adsnotice.png 148w,
/static/a31544a0d7031648bcc587981fa4a1b6/e4a3f/adsnotice.png 295w,
/static/a31544a0d7031648bcc587981fa4a1b6/fcda8/adsnotice.png 590w,
/static/a31544a0d7031648bcc587981fa4a1b6/efc66/adsnotice.png 885w,
/static/a31544a0d7031648bcc587981fa4a1b6/c83ae/adsnotice.png 1180w,
/static/a31544a0d7031648bcc587981fa4a1b6/636d3/adsnotice.png 1222w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&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;要注意 - ads.txtファイルが含まれていないサイトがあります。収益に重大な影響が出ないよう、この問題を今すぐ修正してください。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;要注意とか今すぐ修正とか書いてあるので何事かと思いました。
悪いことをしたつもりも変更したつもりもないので、AdSense側で何らかの変更があったのだと思います。
すぐにGoogleに何かペナルティを食らうわけではないので、落ち着いて対応しましょう。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&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;ads.txtの意味&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;結論（解決方法）&lt;/h2&gt;
&lt;p&gt;結論を先に言うと、「ads.txt」というファイルに必要な情報を記載してサイトに設置する。この作業を行うことで解決できます。以下詳細な手順です。&lt;/p&gt;
&lt;h3&gt;1.テキストファイルを作成する&lt;/h3&gt;
&lt;p&gt;「ads.txt」というファイルを作成します。&lt;/p&gt;
&lt;h3&gt;2.「ads.txt」に必要な内容を記載する&lt;/h3&gt;
&lt;p&gt;以下の1行のみを記載します。このとき「pub-0000000000000000」の部分は自分の「サイト運営社ID」に置き換えて記載します。&lt;br&gt;
0000〜のままサイトに設置すると広告の配信が停止される可能性があるので注意しましょう。&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;google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;サイト運営者IDの調べ方&lt;/h4&gt;
&lt;p&gt;AdSenseの管理画面にログインして、左側のメニューの「アカウント」の項目内の「アカウント情報」を選択すると確認出来ます。
「サイト運営者ID」という項目の内容をコピーしてads.txtの該当の場所を書き換えましょう。&lt;/p&gt;
&lt;h3&gt;3.「ads.txt」をサイトのルートレベルに設置&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;https://ドメイン/ads.txt&lt;/code&gt;に設置します。このサイトなら「&lt;a href=&quot;/ads.txt&quot;&gt;https://honmushi.com/ads.txt&lt;/a&gt;」です。&lt;/p&gt;
&lt;p&gt;これで対応は完了です。&lt;br&gt;
ファイルを設置してもすぐにAdSenseの表示が消えるわけではありません。設置してから数日が経過しないとAdSense側へ反映されませんので、気長に待ちましょう。&lt;/p&gt;
&lt;p&gt;このサイトでは2019/06/07に対応を実施しました。反映されたらまたお知らせします。&lt;/p&gt;
&lt;h2&gt;原因&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;要注意 - ads.txtファイルが含まれていないサイトがあります。収益に重大な影響が出ないよう、この問題を今すぐ修正してください。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記のAdSenseの注意の最後にヘルプへのリンクがあります。&lt;br&gt;
&lt;a href=&quot;https://support.google.com/adsense/answer/7532444?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;AdSenseヘルプ ads.txt で認定販売者を宣言する&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ざっくりとは広告詐欺を解決するための取り組み・仕組みです。
サイトに設置している広告枠が、サイト運営者が認定した販売者の広告であることを確認するために利用されます。&lt;/p&gt;
&lt;p&gt;たとえば、何らかの方法で悪い人がサイトにニセの広告を掲載したりした場合、この広告がサイト運営者が意図的に設置した広告なのかが判別できるようになります。運営者はもちろん、サイトに訪れたユーザーも怪しい広告なのかどうかの判断ができると思います。&lt;/p&gt;
&lt;h2&gt;ads.txtの意味&lt;/h2&gt;
&lt;p&gt;ads.txtファイルには以下のような情報を記載しました。この意味がヘルプに書いてあったのでメモしておきます。ads.txtとは何か？ということです。&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;google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;全部で4つのフィールドから記述されており、カンマ区切りのデータになっています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;フィールド1&lt;br&gt;
広告配信システムのドメイン名&lt;br&gt;
AdSenseの広告を配信しているのはgoogleなのでドメイン「google.com」を記載しています。&lt;/li&gt;
&lt;li&gt;フィールド2&lt;br&gt;
サイト運営者のアカウントID&lt;br&gt;
フィールド1で指定したシステム内で販売者のアカウントに紐付いている識別子を記載します。
配信サービスによって形式が異なると思いますが、AdSenseでは「pub-」と「16桁の数値」です。&lt;/li&gt;
&lt;li&gt;フィールド3&lt;br&gt;
アカウントまたは関係のタイプ&lt;br&gt;
通常は「DIRECCT」を指定します。AdSenseのアカウントが広告枠の再販のような形式で委任されているものの場合は「RESELLER」を指定します。マネージャーアカウントなどを利用してパートナー管理をしている場合などのみ「RESELLER」を指定するそうです。&lt;/li&gt;
&lt;li&gt;フィールド4&lt;br&gt;
認証機関のID&lt;br&gt;
認証機関で広告システムを一意に識別するID、フィールド1の内容と1対1で決まっています。Googleの場合は「f08c47fec0942fa0」です。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&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;要注意 - ads.txtファイルが含まれていないサイトがあります。収益に重大な影響が出ないよう、この問題を今すぐ修正してください。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この表示が出たからと言ってすぐに何かが起きるわけではなさそうです。
ネガティブに考えると、アカウントの停止とか広告の配信停止なんかが考えられるわけですが、すぐにそうなるわけではありません。&lt;/p&gt;
&lt;p&gt;まだ情報もそれほど揃っていませんので、Googleもすぐにアクションを起こすことはなさそうです。
とりあえず、上記の対応を行い表示が消えるまでゆっくり待ちましょう。&lt;/p&gt;
&lt;p&gt;もしも、広告が配信されない状態になったらads.txtの内容に間違いがあることが考えられます。
サイト運営者IDが間違っていないか、変な文字やタグが混ざっていないか、ads.txtの置き場所を間違えていないか、アクセス可能か、robots.txtにクローラーのアクセスを拒否する記載をしていないかなど確認しましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[新しい時代のUI/UX『融けるデザイン』]]></title><description><![CDATA[インターフェイスのデザインや効果について考察している本です。 ハード・ソフト・インターネットの重ね合わせで変化していく現代において、UIデザインの領域や意味は大きくなっています。
この時代に沿った新しい設計論や情報を紹介している本でした。
UI/UX…]]></description><link>https://honmushi.com/2019/06/06/tokeru-design/</link><guid isPermaLink="false">https://honmushi.com/2019/06/06/tokeru-design/</guid><pubDate>Thu, 06 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;インターフェイスのデザインや効果について考察している本です。&lt;/p&gt;
&lt;p&gt;ハード・ソフト・インターネットの重ね合わせで変化していく現代において、UIデザインの領域や意味は大きくなっています。
この時代に沿った新しい設計論や情報を紹介している本でした。
UI/UXに興味がある人にはとても興味が持てる本だと思います。クリエイティブなデザインとは少し違っており、技術的なことやテクノロジーの話が多いです。&lt;/p&gt;
&lt;p&gt;UI関連の情報や技術は外国の後追いになっている印象が大きいのは確かです。
著者はそんな日本のエンジニアとデザイナーをターゲットに、インターフェイスの本質を考えてほしいそうです。与えられた技術やメディアの中でのデザインではなく、新しい手法からデザインすること。新しいインターフェイスを作っていくことを目指したいという思いがありました。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4861009383/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4861009383&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=56a7f877ad01bdd268d49230da109038&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4861009383&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4861009383&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&gt;フラットデザインとスキュアモーフィズム&lt;/h2&gt;
&lt;p&gt;フラットデザインはメタファを持たないデザインが特徴、単色に近いUIコンポーネントを利用している特長。メタメディアであることを活かそうとする意志がある。
一方スキュアモーフィズムは現実席兄ある模様や質感を再現したものであり、そのままメタファとして取り入れることで操作感や空気を利用者に知らせていた。&lt;/p&gt;
&lt;p&gt;見た目上のデザインの違いとして体格に取り上げることもできるが、大きな差異はメタファの有無となります。電子世界・デバイスでの体験を、現実世界の体験に似せることで表現するのではなく、電子世界ならではの表現や体験を与えることを考える必要があるようです。宇宙に新しい物理法則を見つけるようなイメージなのだと思います。&lt;/p&gt;
&lt;h2&gt;透明性&lt;/h2&gt;
&lt;p&gt;道具として意識しない状態のことを透明性と呼ぶそうです。&lt;/p&gt;
&lt;p&gt;ハンマーは見れば何に使うのかがわかりますし、実際に使う際には使い方を意識しなくても使えるようになっています。それは手に持って使うときには体の一部となっているような状態です。体の一部であれば質量も0。これを透明な状態と呼ぶそうです。ハイデガーの「存在と時間」とかに書いたあった表現だと思います。
このような身体の拡張となるような道具、そんな考え方をコンピュータやデバイス・ソフトウェアも考えていく必要があるようです。&lt;/p&gt;
&lt;h2&gt;マウスカーソル&lt;/h2&gt;
&lt;p&gt;当たり前のように利用しているマウスカーソルについてもさまざまな考察がされています。そもそも、舌の要素によってカーソルの形が変わることや、操作性・できることなど、ほぼ説明なしでも私達は理解して使いこなしています。そういう意味では透明性は高く、身体の拡張としての意味が強いです。&lt;/p&gt;
&lt;p&gt;スマホになるとカーソルは無く、タップで操作することになりました。これに至るまでもさまざまな実験や試作があったのだと思います。デバイスの変化によって道具も変わりますし、それらの意味するものも変わっていきます。実験や思考を繰り返して、人間が道具として使いこなせるような体験を探していくことはとても重要なことだそうです。&lt;/p&gt;
&lt;p&gt;自己帰属という概念とその状態について理解し、意識しながらさまざまなUIを見る読むしていくことが、UIの設計に必要な能力なのかなと思います。そしてそれを言語化して説明できるようになっておくのが良さそうです。ヌルヌル動くとかサクサク動くとか言いますが、そのような表現も感じたことそのものなので大切にするべきです。&lt;/p&gt;
&lt;h2&gt;こんな人におすすめ&lt;/h2&gt;
&lt;p&gt;UIデザインを考える人にはとりあえずおすすめです。UI表現の意味であったり評価の方法などが解ると思います。UI/UXはに興味を持っている人はぜひ読んでおくといい本の一つでした。&lt;/p&gt;
&lt;p&gt;関連書籍が多く紹介されていますので、それらについても目を通すといいです。UI/の勉強を行う上での入り口として優れている本だと感じました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;どんなデバイスも人間から見れば、目に入っているのはUI表現の部分であり、UIでの体験がそのままそのデバイスでの体験となります。&lt;/p&gt;
&lt;p&gt;UI部分のみで感じ方が変わってしまうため、全体の印象も大きく変えてしまうことになります。逆に言えばUIの表現を旨くコントロールすることができれば、全体の完成度を向上させることができると言えるかもしれません。&lt;/p&gt;
&lt;p&gt;操作すること、表示するところ、デバイスと人間の情報のやり取りを司る所であるUIについて、もっと詳しくなりたいと思いましたし、色々作って実験してみたいと思いました。&lt;/p&gt;
&lt;p&gt;モノとして感じるときの身体との関係性、モノを持ったときの自分との距離のようなものについて、普段から意識できたらと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Webアプリの構築準備]]></title><description><![CDATA[Webアプリの構築を進めていきます。 FirebaseでWeb…]]></description><link>https://honmushi.com/2019/06/04/firebase-build-01/</link><guid isPermaLink="false">https://honmushi.com/2019/06/04/firebase-build-01/</guid><pubDate>Tue, 04 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Webアプリの構築を進めていきます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-1/&quot;&gt;FirebaseでWebアプリを作る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-require/&quot;&gt;要件を考える&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;仕様を考える&lt;br&gt;
仕様書については別で管理したいので記事には書きませんでした。  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-proto/&quot;&gt;プロトを作る&lt;/a&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;
&lt;p&gt;まずはプロト作成を兼ねてフロント側を実装します。
その後サーバ側の処理を定義して利用できるようにします。&lt;/p&gt;
&lt;p&gt;フロントエンドについてはせっかくなのでSPAで作成します。そのために今回はReactを利用します。
このブログはGatsbyを使っており、Reactの扱いに関してはすでに知識があります。簡単に実装できることから選択しました。&lt;/p&gt;
&lt;p&gt;今回は、Reactを使ってSPAのアプリケーションを作るための環境の構築をやっていきます。
&lt;a href=&quot;https://qiita.com/gipcompany/items/63641286921cbe223c94&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;必要なもの&lt;/h2&gt;
&lt;p&gt;基本的にはWebpack、Babel、Reactなどをインストールする必要があります。
&lt;code&gt;create-react-app&lt;/code&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 -g create-react-app
create-react-app hello-world&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;/hello-world/ディレクトリに必要なものが一通り用意されます。ディレクトリに入って&lt;code&gt;npm start&lt;/code&gt;を実行すればローカルでの確認も始めることが出来ます。&lt;/p&gt;
&lt;h3&gt;ローカルでの動作確認&lt;/h3&gt;
&lt;p&gt;以下を実行すればローカルで動作します。URLとポート番号がコマンドラインに表示されるのでアクセスすれば動作確認が可能です。&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 start&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;プログラムをビルドする&lt;/h3&gt;
&lt;p&gt;以下コマンドを実行すれば、ビルドが行われデプロイ用のファイルが生成されます。&lt;code&gt;/build/&lt;/code&gt;以下に生成されますので、その中身をFirebaseにdeployすればいいことになります。
buildコマンドを実行した後に&lt;code&gt;firebase.json&lt;/code&gt;を編集して、Hosting対象ディレクトリの設定を修正しておきましょう。&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 run build&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Firebaseeへデプロイする&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;firebase.json&lt;/code&gt;のHostingの項目のPublicに指定しているディレクトリがデプロイの対象となりますので、設定を確認・変更しておきます。&lt;/p&gt;
&lt;p&gt;Hostingの設定を変更した後はdeployコマンドを実行することでFirebaseにファイルを反映できます。&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;firebase deploy&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;gitにソースをコミットしておく&lt;/h2&gt;
&lt;p&gt;いよいよプログラミングっぽくなってきました。個人開発なので共有とかの必要はありませんがバージョン管理はどんなときでも利用したほうがいいです。&lt;/p&gt;
&lt;p&gt;変更を元に戻したり出来ますし、バックアップの代わりにもなります。githubも簡単に利用ができるのでドンドン使いましょう。
将来的にプロジェクトでチーム開発をやるときに備えて、gitの一通りの操作は学ぶべきです。
SVNを使っている環境もあると思いますが、gitを理解出来ていればすぐに理解できます。&lt;/p&gt;
&lt;h3&gt;gitignore&lt;/h3&gt;
&lt;p&gt;基本的に/node_module/以下のファイルはgitにコミットしないのが通例です。
下記初に必要なパッケージはプロジェクトのリポジトリから&lt;code&gt;package.json&lt;/code&gt;を取得して、各環境にてそれを参照して必要なモジュールをインストールします。
環境ごとにバージョンが異なったりすると、ローカルの環境が壊れてしまうこともあるので注意しましょう。
nodeを使った開発を行う場合覚えておきましょう。&lt;/p&gt;
&lt;p&gt;サンプルとなるgitignoreが&lt;code&gt;create-react-app&lt;/code&gt;で取得・配置されているので確認しておくと良いです。
以下のURLにも配置されています。
&lt;a href=&quot;https://github.com/github/gitignore/blob/master/Node.gitignore&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;gitignoreのサンプル&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;ページを作成&lt;/h2&gt;
&lt;p&gt;あとはWebアプリを作成していきましょう。どこから作るか予定を立てて計画的に進めていきます。&lt;/p&gt;
&lt;p&gt;現在もろもろ作成中です。&lt;/p&gt;
&lt;h2&gt;動作を確認&lt;/h2&gt;
&lt;p&gt;構築ができたら動作確認していきましょう。最後に確認するのではなく、出来た機能から少しづつ確認しながら進みましょう。不具合等早めに見つけて直せると良いです。細かいテストを実施するためにも、構築前に仕様や正しい挙動を明確に定義しておくことが大切です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[各2ページで言語を紹介する『プログラミング言語図鑑』]]></title><description><![CDATA[6…]]></description><link>https://honmushi.com/2019/06/04/programming-zukan/</link><guid isPermaLink="false">https://honmushi.com/2019/06/04/programming-zukan/</guid><pubDate>Tue, 04 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;67種類のプログラミング言語を紹介しています。&lt;/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 target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4802611080/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4802611080&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ae4463a233396aaf68bcecf41b0e4464&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4802611080&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4802611080&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&gt;見たことない言語もいっぱい&lt;/h2&gt;
&lt;p&gt;プログラマでも知らない言語がいっぱい載っています。初めて見るものも合ったりしますが、サンプルプログラムが掲載されているので試すことも出来ますし、特長や利用されている例なども載っており、おもしろい内容になっています。&lt;/p&gt;
&lt;p&gt;AWKとかbc、sedなんかも解説されています。SQLもありました。ただし個人的に思い入れのあるColdFusionはありませんでした。&lt;/p&gt;
&lt;p&gt;普段は意識しなかった言語の裏の顔や成り立ちなども知ることが出来ます。しかし、これを読んでもプログラミングそのものに影響はありません。新しい文法を知るわけでもなければ堅牢なプログラムを実装できるわけでもありません。&lt;br&gt;
どの言語から学ぼうか、次はどれを勉強しようか、と思っている人は選択肢をたくさん知ることが出来ます。ただ、どれがオススメということとかは書かれていません。他の情報を元に選ぶのがいいです。始めてプログラミングを学ぶのであれば身近に詳しい人のいる言語。2つ目以降であれば今までとは性質の異なる言語を選ぶのがいいと思います。もちろん、仕事が多いとか学習が簡単とか、他にも選ぶ条件はあります。いろんな選択肢を渡されて悩むくらいなら「なんかかっこいいから、これだ！」と印象だけで決めてしまって、本を買ってプログラミングの勉強を初めてしまう方がいいですよ。&lt;/p&gt;
&lt;p&gt;せっかくなので1つオススメするのであれば、ここでは実行環境の用意が簡単なJavaScriptをおすすめしておきます。Webであれば利用する機会も多いですし、入門にもいいと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;「毎年1つ新しい言語の学習をする」というのがプログラマーの学習としてオススメの目標となっています。「達人プログラマー」か何かで読みました。&lt;/p&gt;
&lt;p&gt;これに従えば、この本だけで67年は学ぶものに困らないです。ただそれぞれの言語の勉強はどうやってうやったらいいんでしょうかね？メジャーなものは大丈夫ですが、かなりマイナーなものもありました。まあ67個全部勉強したところでそれほど意味はありません。しっかりプログラミングの基礎や概念、考え方と学び方を身につけることが大切なことです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[firebaseでWebアプリを作る]]></title><description><![CDATA[以前の記事でFirebaseを使ってみました。一通り動かしてみることは出来たのでこれからFirebaseの機能を使ったWebアプリを作成していこうと思います。 自分のWeb…]]></description><link>https://honmushi.com/2019/05/31/firebase-app-1/</link><guid isPermaLink="false">https://honmushi.com/2019/05/31/firebase-app-1/</guid><pubDate>Fri, 31 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前の記事でFirebaseを使ってみました。一通り動かしてみることは出来たのでこれからFirebaseの機能を使ったWebアプリを作成していこうと思います。&lt;/p&gt;
&lt;p&gt;自分のWebアプリを作っておくと、ポートフォリオや実績としても役に立ちます。
プログラミング言語やシステムの勉強をある程度こなした！という人は、実際に手を動かして作ってみると良いです。&lt;/p&gt;
&lt;p&gt;この記事を目次として作成の手順やフローを残していきます。
システム作るときはこんな感じという一つの例と思ってください。ただし、システム構築の仕事はお客さまがいる場合のほうが多いです。受託開発とかSESとは大きく異なります。あくまでも個人開発の例として参考にしてみてください。&lt;/p&gt;
&lt;h2&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&gt;何をするか&lt;/h2&gt;
&lt;p&gt;ざっくり以下の流れで順番にやっていきます。すぐにプログラミングや実装に取り掛からず、しっかり仕様や全体像などを考えることから初めます。
一人でやるので進め方も自由なのですが、しっかり考えながらやったほうが勉強にもなるし効率もいいです。&lt;/p&gt;
&lt;p&gt;途中戻って修正したりやり直すこともありますが、大きな流れとしては以下です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-1/&quot;&gt;FirebaseでWebアプリを作る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-require/&quot;&gt;要件を考える&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;仕様を考える&lt;br&gt;
仕様書については別で管理したいので記事には書きませんでした。  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-proto/&quot;&gt;プロトを作る&lt;/a&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;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ここでは「やるぞ！」という宣言と、開発フローの全体像を書きました。
それぞれの内容が出来たらリンク貼っていきます。&lt;/p&gt;
&lt;p&gt;どれぐらい時間がかかるかはわかりませんが、あまり時間をかけずにさくっと作るつもりです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Webアプリのプロトを作る]]></title><description><![CDATA[Webアプリのプロトタイプを作っていきます。ここでサイトのデザインについても考えます。 FirebaseでWeb…]]></description><link>https://honmushi.com/2019/05/31/firebase-app-proto/</link><guid isPermaLink="false">https://honmushi.com/2019/05/31/firebase-app-proto/</guid><pubDate>Fri, 31 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Webアプリのプロトタイプを作っていきます。ここでサイトのデザインについても考えます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-1/&quot;&gt;FirebaseでWebアプリを作る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-require/&quot;&gt;要件を考える&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;仕様を考える&lt;br&gt;
仕様書については別で管理したいので記事には書きませんでした。  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-proto/&quot;&gt;プロトを作る&lt;/a&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;
&lt;p&gt;大体の場合は、どんなデザインにするかの「デザインカンプ」をデザイナーさんに作ってもらいます。
そしてUIデザイナーやフロントエンドエンジニアが、操作や挙動についてクライアントとのすり合わせと構築時の詳細な部分の指示・認識合わせのために「プロトタイプ」を作ると思います。&lt;/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;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;昔はPhotoshopとかで作るのが一般的だったようですが、現在はAdobe XDとかFigmaなどの便利なツールが登場しています。別にエクセルとかパワーポイントでも作ろうと思えば作れます。&lt;/p&gt;
&lt;p&gt;コンポーネント化しての再利用とか、他アカウントへの共有、修正依頼なども便利に行えるようになっているので使いこなせるといいです。&lt;/p&gt;
&lt;p&gt;デザイナーやUIデザイナーが使うことの多いサービスですが、エンジニアもこれらに慣れておいたほうがいいです。プロトの共有をすることもありますし、簡単なものであれば自分で作成・修正できるようになります。自分のできる領域を広げるつもりでこれらのサービスにも積極的に興味を持っていきましょう。&lt;/p&gt;
&lt;p&gt;今回はFigmaでデザインを作成します。無料でそこそこ使えるうえに十分便利です。無料で会員登録できます。&lt;br&gt;
&lt;a href=&quot;https://www.figma.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Figma&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Figmaで作っていく&lt;/h2&gt;
&lt;p&gt;あまりこだわって作り込みすぎないようにしましょう。ここで力尽きてしまっては意味がないので。
参考になるサイトを探して真似するのも良いです。やりたいことと似ているサービスを探して分析してみましょう。&lt;/p&gt;
&lt;p&gt;とりあえず、必要な全ページのデザインを作成します。いくつかパターンがある場合も全部作っておきます。データが0件の場合とか、数ページ分のデータがある場合とか。必要なものをもれなく把握しておくことが大切です。こういう取り組みは見積もりなどに活きてきます。&lt;/p&gt;
&lt;p&gt;PCとスマホ両方でアクセスできるようにしいたいので、そのことも考慮して両方のパターンが必要です。
今回はレスポンシブなデザインにします。なるべく共通化して使えるように作る方針です。&lt;/p&gt;
&lt;p&gt;できれば同じ意味のボタンや要素はコンポーネント化して使いまわせるようにしましょう。サイト全体での世界観を統一させたほうがユーザーも使いやすく、作る時もラクです。この辺のWebデザインに関する知識は書籍とかで勉強するといいです。世の中にあるサイトを研究することでも身につきますが、ノウハウ本は溢れるほどあるので一度読んでおくのがおすすめです。&lt;/p&gt;
&lt;p&gt;デザインの検討や作成はエンジニアの本来の役目ではないかもしれませんが、こういった工程にも興味を持っておきましょう。いつか役に立ちますし、自分で考えるのは結構楽しかったりします。&lt;/p&gt;
&lt;h3&gt;ワイヤーフレームがこんな感じ&lt;/h3&gt;
&lt;p&gt;そんなにこだわらずに作ります。個人開発ですので時間を使いすぎずに進みましょう。最初に「2時間でつくる」とか時間を決めてしまうのもおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/cd079ce871f8b269577f5ee195583128/a8417/flame.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.67567567567568%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABTklEQVQoz21S266CQAz0/3+LBBNfMQaJBBVQkYtcXK5KjzMeyGps0rTbbabT2V0EQSBRFEmSJJJlGWMcx3I6nejX65VnePq6Q28YhoxTHY4zsBa3201gSimCtW3LM8C7rmOO2uPxkKZ/vvrquWcYBtZhfd9/AjZNQzZogqGOAck/Kww4+KGUZcle9N3vSuq6Zo4hM6Dv+2Lbtmy3W3Ech6sWRfEhQ84B8QvkTkAwamslbVO/cx1wv9/LZrMRz/NkvV5TIwBCG53h5RKR4XvlUbKqk0L1zCHPDAiw1Wolu91OlsuluK5LQDgYVVVFjRFxnjTM1SBV89aw6zQNLcsS0zS5smEYXDvP81lw3aDZBKjbx6NgpePxyPWwPiLqaIKN40j/Bnxq9XllMPll0OwXQzzI9J1+Mjyfz/wuYKlHvPT0ymma0pFPH/27jl4A/gELRvpEmLoJbwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;ワイヤーフレームの例&quot;
        title=&quot;ワイヤーフレームの例&quot;
        src=&quot;/static/cd079ce871f8b269577f5ee195583128/fcda8/flame.png&quot;
        srcset=&quot;/static/cd079ce871f8b269577f5ee195583128/12f09/flame.png 148w,
/static/cd079ce871f8b269577f5ee195583128/e4a3f/flame.png 295w,
/static/cd079ce871f8b269577f5ee195583128/fcda8/flame.png 590w,
/static/cd079ce871f8b269577f5ee195583128/efc66/flame.png 885w,
/static/cd079ce871f8b269577f5ee195583128/a8417/flame.png 941w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&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;/p&gt;
&lt;p&gt;ただし、ここで完成のイメージをしっかり作っておくことは忘れないようにしましょう。そうでないと、あとで実装するときに迷うことが多くなり、いらぬ時間を食う場合が多くなります。
なるべくプログラミング以外の部分に対して精度を高くすることが、いいシステム構築のコツだったりします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Webアプリの要件を考える]]></title><description><![CDATA[Webアプリを作る記事の続きです。 Webアプリを作る ここでは要件の定義と、仕様の検討を行います。 FirebaseでWeb…]]></description><link>https://honmushi.com/2019/05/31/firebase-app-require/</link><guid isPermaLink="false">https://honmushi.com/2019/05/31/firebase-app-require/</guid><pubDate>Fri, 31 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Webアプリを作る記事の続きです。&lt;br&gt;
&lt;a href=&quot;/2019/05/31/firebase-app-1/&quot;&gt;Webアプリを作る&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ここでは要件の定義と、仕様の検討を行います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-1/&quot;&gt;FirebaseでWebアプリを作る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-require/&quot;&gt;要件を考える&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;仕様を考える&lt;br&gt;
仕様書については別で管理したいので記事には書きませんでした。  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/2019/05/31/firebase-app-proto/&quot;&gt;プロトを作る&lt;/a&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;
&lt;h2&gt;要件を決める&lt;/h2&gt;
&lt;p&gt;ある程度の要件については前回の記事で考えていますが、改めてまとめておきましょう。&lt;/p&gt;
&lt;h3&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;p&gt;もちろん、個人開発や小さなプロジェクトでは自分で考える・定義することができます。早いうちから挑戦して失敗しながら学べると大きく前進できます。IT系の試験なんかでも基礎知識を問われるのでそこでも役に立ちます。&lt;/p&gt;
&lt;h3&gt;要件&lt;/h3&gt;
&lt;p&gt;一番好きなものを投稿するサイトを作ります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;お題を管理者が決めるので、それに対してそれぞれユーザーが好きなものを一つ選んで投稿します。&lt;/li&gt;
&lt;/ul&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;お題：一番好きなラーメン

A：天下一品 
メモ：こってりがたまらなく美味しい

B：8番らーめん
メモ：親しみやすく、ファミリーでも利用しやすい&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;投稿するには会員登録が必要、見るだけなら不要。
メールアドレスとパスワード・またはtwitterのアカウントでのログインを利用する。最低限の情報で会員登録・ログインできれば良い。&lt;/li&gt;
&lt;li&gt;会員なら気が合う人を見つけることもできる。同じものを好きな人とは関連性が高い。そうでなければ低い。&lt;/li&gt;
&lt;li&gt;管理者アカウントを作成しておく。管理人にはお題を作成する機能がある。
作成されたお題によって結果一覧と回答画面が動的に生成されてほしい。&lt;/li&gt;
&lt;li&gt;広告を設置できるようにしてアクセスによって報酬が得られるようにしておく。
課金とかの機能は不要、ビジネスモデルは盛り込まず、ユーザーの金銭交換などは発生しない。&lt;/li&gt;
&lt;li&gt;PC・スマホ両方でアクセスできる。&lt;/li&gt;
&lt;li&gt;Firebaseを利用するのでスピードや安定性がどれくらいになるか懸念だが、無料の範囲でできるだけにする。使っててイライラしない程度のスピードは守る。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;とても簡易で荒っぽいですが、これくらいにしておきましょう。あとでやっぱり違ったとか、これもほしいということを見つけたら足していくことにしましょう。&lt;/p&gt;
&lt;h2&gt;仕様を考える&lt;/h2&gt;
&lt;p&gt;仕様書の形には色々あると思います。&lt;/p&gt;
&lt;p&gt;エクセルやワードで作成したり、「実際のコードが仕様だ！」という現場もあるかもしれません。プロトが仕様という場合もあれば、Wikiを作る場合もあるので現場によって大きく異なります。&lt;/p&gt;
&lt;p&gt;今回はなるべくテキストで仕様を作ります。Gitとかで管理するつもりです。ややこしくなるので、記事には書かないで別で管理します。&lt;/p&gt;
&lt;p&gt;なにか便利なツールとか仕様定義のフォーマットがあれば探しておきます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;要件定義はシステム構築でとても重要です。ここでしっかり詰め切っておけるかどうかなど、後々のプロジェクトの成否に大きく関わります。
構築の見積もりなどにも大きな影響があるので、なるべ精度を高くできるように努力すべきです。
最初はめちゃくちゃ難しいですし、ベテランの方とか経験豊富な人が担当すると思います。&lt;/p&gt;
&lt;p&gt;個人開発なので、それほど力を込めなくてもあとで修正することも出来ますが、実際の現場ではそういうわけにいかないです。アジャイルなど柔軟に進める手法もありますが、精度が高いに越したことはありません。&lt;/p&gt;
&lt;p&gt;個人開発など、自分で取り組み可能な場所でしっかり練習しておくことがおすすめです。最初は絶対うまくいきません。どれくらい外してしまったか、どうすればよかったかなどをしっかり反省できるように、記録をつけて思い返せるようにしていきましょう。
あとは手描きでノートや大きな紙なんかにまとめてみるのもおすすめです。思いつかなかったような関係性や欠点が見つかります。意外とアナログな道具を使うほうが捗ることも多いです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[よいUIを生み出すフローとは『UI デザイン』]]></title><description><![CDATA[UI/UXデザインを行う上でのチームでの取り組みの進め方を説明した本です。 UIのサンプルやパーツ実装の紹介ではなく、UIデザインを行う上での勘所やフローなどについての本です。 特長としてはチームでの取り組みが基本となっており、プロジェクト内でUI…]]></description><link>https://honmushi.com/2019/05/30/UI-design/</link><guid isPermaLink="false">https://honmushi.com/2019/05/30/UI-design/</guid><pubDate>Thu, 30 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;UI/UXデザインを行う上でのチームでの取り組みの進め方を説明した本です。&lt;/p&gt;
&lt;p&gt;UIのサンプルやパーツ実装の紹介ではなく、UIデザインを行う上での勘所やフローなどについての本です。&lt;/p&gt;
&lt;p&gt;特長としてはチームでの取り組みが基本となっており、プロジェクト内でUIデザインを行うことの意味、より良いUIを作るための取り組み方が主な内容です。&lt;/p&gt;
&lt;p&gt;エンジニア・デザイナーとUIデザイナーの立ち位置や関わり方なども書かれており、チームビルディングやプロジェクトの設計フェーズの進め方などの参考になると思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4844368591/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4844368591&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=131d6a65feb197e7635ca636c27076a6&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4844368591&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4844368591&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&gt;チームにおけるUIデザイナー&lt;/h2&gt;
&lt;p&gt;UIデザインをカイゼンするに当たって、いくつか需要なことを感じました。以下その所感を記載しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ユーザーへの実体験の調査
この本でも1章を使用してユーザーインタビュー・ユーザーテストに関する情報が書かれています。
どんな前提で取り組むのかといったところから、どんな質問を誰にするのかといったところまで詳細に描かれています。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;クライアントへのヒアリングやすり合わせはもちろんですが、実際に使用するユーザーの感じている課題や問題についても、しっかり聞き出す能力が必要です。デザイン能力だけでなく、実際に聞き出すコミュニケーション能力や分析・理解する能力なんかも重要だと発見がありました。&lt;/p&gt;
&lt;p&gt;始めるには小さなところから始めるのが良いそうです。最初は友達や社内の他メンバーなどから始めるのでも十分意味があるようです。実際のインタビューフローや質問の例なども書かれているので、これから取り組む方にとってはとてもいい内容です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;他職種との連携
エンジニアやデザイナーとの担当範囲の切り分けであったり、お互いに助け合うべき場面なども説明があります。みんなで考えることがUIの改善には重要だそうで、それぞれのエキスパートが協力しあって始めて良い方向にたどり着けます。UIデザイナーの領域は結構広く、さまざまな場面で出番が回ってくると思います。設計時のプロトタイプ制作はもちろん、要件定義または開発でも役目があるでしょうか。作業でいっぱいいっぱいにならないように、ほか職種の方との協力や進め方の相談なんかは重要だと感じます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;UI設計&lt;/h2&gt;
&lt;p&gt;設計段階で必要になるプロトタイプ制作のコツなんかも大いに書かれています。デザインシステムの定義・作成方法や利用方法、他にもそれらを活かしたチーム単位での進め方などもあります。&lt;/p&gt;
&lt;p&gt;大きなところで言えばツールの紹介もありますし、プロジェクトでのルールの決め方なども参考になるものが多いです。基本的に概念の説明ですので、具体的にどうするのかと言った答えは書いてありません。各環境で話し合って最適なものを探しましょう。チームでより良くするための取り組みを開始して、継続することがUIデザインの肝でした。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;全編通して、UIデザインの小手先のテクニックではなく、プロダクトやサービスの目指すべき場所の定義から、そこにたどり着くまでの各メンバーとチームの取り組み方法についての説明でした。&lt;/p&gt;
&lt;p&gt;これらの内容を実現するには長い時間と、根気強い取り組みが必要です。チームでの認識合わせや意識の共有が重要になることは間違いなく難しさもありそうだと感じました。UIデザイナーはもちろんですが、その周りで一緒に働くマネージャーやエンジニアなんかにも内容を共有して、一緒に取り組みを進めていけると良さそうです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Firebaseのログイン機能を試す]]></title><description><![CDATA[Firebaseで遊ぶ続きです。前回の記事。 Firebaseの「Authentication」の機能を使えば、会員ログイン機能を簡単に実装できます。
メールアドレスとパスワードを使ったものから、TwitterやFacebookなどのSNS…]]></description><link>https://honmushi.com/2019/05/29/firebase-auth/</link><guid isPermaLink="false">https://honmushi.com/2019/05/29/firebase-auth/</guid><pubDate>Wed, 29 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Firebaseで遊ぶ続きです。&lt;a href=&quot;/2019/05/28/firebase-sandbox/&quot;&gt;前回の記事&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;Firebaseの「Authentication」の機能を使えば、会員ログイン機能を簡単に実装できます。
メールアドレスとパスワードを使ったものから、TwitterやFacebookなどのSNSアカウントと連携したものまで簡単に実装できます。会員サイトを構築するのであればとても役に立ちますね。&lt;/p&gt;
&lt;p&gt;試しに使ってみました。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Authenticationを有効にする&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;h2&gt;Authenticationを有効にする&lt;/h2&gt;
&lt;p&gt;Firebaseの管理画面でAuthenticationの項目へ移動して、有効にします。ログイン方法としていろんな方法が用意されています。
メールアドレス以外にもtwitterなどのSNSを利用することも出来ます。とりあえず「メール/パスワード」を有効にして実験してみます。&lt;/p&gt;
&lt;h3&gt;アプリとFirebaseの紐付け&lt;/h3&gt;
&lt;p&gt;先にWebアプリとして登録を行いFirebaseに接続する必要があります。&lt;/p&gt;
&lt;p&gt;管理画面の「Project Overview」からWebアプリを作成します。&lt;/p&gt;
&lt;p&gt;連携するHostingサイトを設定した後、firebaseの利用に必要なスクリプトが生成されます。
その後、HostingページのHTMLに生成されたスクリプトを貼り付けましょう。デフォルトでHosting内に設置されていたindex.htmlにはすでに存在しています。&lt;/p&gt;
&lt;p&gt;これらを設定することでFirebaseのプロジェクトとの紐付けが出来ます。他のスマホアプリなども、同じプロジェクトに紐付ければ、アカウントを共有したり相互にやり取りができる様子です。&lt;/p&gt;
&lt;h2&gt;ユーザーアカウントを作成&lt;/h2&gt;
&lt;p&gt;アカウントを作成してみます。
基本的にはドキュメントに書いてあるのをやってみます。&lt;/p&gt;
&lt;p&gt;これをフロント側で実行すればアカウントが出来ます。emailとpasswordに文字列入れれば出来ます。出来たアカウントを管理画面で確認しましょう。&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;firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
    console.log(&amp;quot;login&amp;quot;);
  } else {
    // No user is signed in.
    console.log(&amp;quot;logout&amp;quot;);
  }
});&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;firebase.auth().signOut().then(function() {
  // Sign-out successful.
}).catch(function(error) {
  // An error happened.
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;再度ログインする場合はこちら、emailとpasswardに必要な文字列をわたせば良いです。&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;firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで一通りのログイン機能でしょうか。後はログインUIを作ったり、肝心のログイン時に利用できる機能を作成していきましょう。&lt;/p&gt;
&lt;h2&gt;デフォルトのログインウィジェットを利用してみる&lt;/h2&gt;
&lt;p&gt;ドキュメントに記載されている、デフォルトのログインウィジェットを利用してみます。
以下を追加すればできます。簡単です。&lt;/p&gt;
&lt;p&gt;必要なライブラリをロードします。firebaseuiという形で利用できるようです。&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;&amp;lt;script src=&amp;quot;https://cdn.firebase.com/libs/firebaseui/3.5.2/firebaseui.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link type=&amp;quot;text/css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdn.firebase.com/libs/firebaseui/3.5.2/firebaseui.css&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;フォーム要素に必要な設定を作成して、ログインフォームを定義します。ログイン後のリダイレクト先とか、プライバシーポリシーページへのリンクURLなど設定項目がいくつかあります。&lt;/p&gt;
&lt;p&gt;signInOptionの部分で、ログインするために必要な情報を選択出来ます。不要なものは取り除きましょう。&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;var uiConfig = {
  callbacks: {
    signInSuccessWithAuthResult: function(authResult, redirectUrl) {
      // User successfully signed in.
      // Return type determines whether we continue the redirect automatically
      // or whether we leave that to developer to handle.
      return true;
    },
    uiShown: function() {
      document.getElementById(&amp;#39;loader&amp;#39;).style.display = &amp;#39;none&amp;#39;;
    }
  },
  signInFlow: &amp;#39;popup&amp;#39;,
  signInSuccessUrl: &amp;#39;&amp;lt;url-to-redirect-to-on-success&amp;gt;&amp;#39;,
  signInOptions: [
    // Leave the lines as is for the providers you want to offer your users.
    firebase.auth.GoogleAuthProvider.PROVIDER_ID,
    firebase.auth.FacebookAuthProvider.PROVIDER_ID,
    firebase.auth.TwitterAuthProvider.PROVIDER_ID,
    firebase.auth.GithubAuthProvider.PROVIDER_ID,
    firebase.auth.EmailAuthProvider.PROVIDER_ID,
    firebase.auth.PhoneAuthProvider.PROVIDER_ID
  ],
  // Terms of service url.
  tosUrl: &amp;#39;&amp;lt;your-tos-url&amp;gt;&amp;#39;,
  // Privacy policy url.
  privacyPolicyUrl: &amp;#39;&amp;lt;your-privacy-policy-url&amp;gt;&amp;#39;
};&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ログインフォームを表示させる要素をHTMLに設置しておく必要があります。
id=“firebaseui-auth-container”の要素にフォームをレンダリングするつもりです。
&lt;code&gt;&amp;#x3C;body&gt;&lt;/code&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;&amp;lt;h1&amp;gt;Welcome to My Awesome App&amp;lt;/h1&amp;gt;
&amp;lt;div id=&amp;quot;firebaseui-auth-container&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;loader&amp;quot;&amp;gt;Loading...&amp;lt;/div&amp;gt;
&amp;lt;p id=&amp;quot;load&amp;quot;&amp;gt;Firebase SDK Loading&amp;amp;hellip;&amp;lt;/p&amp;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;// The start method will wait until the DOM is loaded.
ui.start(&amp;#39;#firebaseui-auth-container&amp;#39;, uiConfig);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;ユーザー情報の更新&lt;/h2&gt;
&lt;p&gt;メールアドレスとパスワード、管理用の一意なIDのみがある状態です。他の情報も登録できるようなのでやってみます。
表示用の名前と、電話番号とかでしょうか。&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;var user = firebase.auth().currentUser;
var name, email, photoUrl, uid, emailVerified;

if (user != null) {
  name = user.displayName;
  email = user.email;
  photoUrl = user.photoURL;
  emailVerified = user.emailVerified;
  uid = user.uid;  // The user&amp;#39;s ID, unique to the Firebase project. Do NOT use
  // this value to authenticate with your backend server, if
  // you have one. Use User.getToken() instead.
}
console.log(user);&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;var user = firebase.auth().currentUser;

user.updateProfile({
  displayName: &amp;quot;kos&amp;quot;,
  photoURL: &amp;quot;https://example.com/jane-q-user/profile.jpg&amp;quot;
}).then(function() {
  // Update successful.
}).catch(function(error) {
  // An error happened.
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;もう一度アカウント情報を取得すれば変更後の内容になっています。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;とりあえずAuthenticationを使ってみることが出来ました。
基本的な部分はFirebaseに丸投げできるのでとても簡単です。ログインに関する詳細な仕様や制御、ログイン状態で利用できる機能などを検討しながら、以降も遊んでいきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Firebaseで遊ぶ]]></title><description><![CDATA[Firebaseを利用して簡単なWebアプリを作ります。Firebaseの一通りの使い方を紹介するつもりです。 プログラミングの勉強で何か作ったらいいと言われたけど、どこで何したらいいかわからないという方の参考になればいいなと思います。Firebase…]]></description><link>https://honmushi.com/2019/05/28/firebase-sandbox/</link><guid isPermaLink="false">https://honmushi.com/2019/05/28/firebase-sandbox/</guid><pubDate>Tue, 28 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Firebaseを利用して簡単なWebアプリを作ります。Firebaseの一通りの使い方を紹介するつもりです。&lt;/p&gt;
&lt;p&gt;プログラミングの勉強で何か作ったらいいと言われたけど、どこで何したらいいかわからないという方の参考になればいいなと思います。Firebase使ってこんなことができるよ、という例にもなると思います。&lt;/p&gt;
&lt;h2&gt;背景&lt;/h2&gt;
&lt;p&gt;以前はこのサイトをFirebaseでホスティングしていたのですが、無料アカウントでのホスティング容量の上限に到達しました。それからはこのサイトはNetlifyでホスティングしています。&lt;/p&gt;
&lt;p&gt;FirebaseeにはRealtimeDatabaseとかFinctionなどさまざまな機能があります。それらを使ってみようと思ったので遊びました。無料で使える範囲で遊んでいます。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;以下概要です。ざっくりとですが「プログラミングで何か作ろう」というときの例になると思います&lt;/p&gt;
&lt;p&gt;「勉強はしている！次何したらいいかわからない」「実際に作るのが大切！らしいけど何から初めたらいいんだ！」という方の参考になったらいいです。&lt;/p&gt;
&lt;p&gt;勉強は大切ですが何かを作ってみることも大切です。手を動かすことで、わかったつもりで本当はわかっていないことを発見できます。Firebaseは無料枠でいろいろな機能が使えるのでおすすめです。&lt;/p&gt;
&lt;p&gt;何より自分で考えて、自分で作ったものが動く、世界に向けて発信されることは嬉しいことだと思います。
プログラミングについての知識や技術を身に着けた後は、ぜひ実際に作るのがおすすめです。&lt;/p&gt;
&lt;p&gt;以下の内容で少しずつ進めていきます。この記事では2までやります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Firebaseの準備&lt;/li&gt;
&lt;li&gt;Hostingにページをデプロイ&lt;/li&gt;
&lt;li&gt;Functionを使ってみる&lt;/li&gt;
&lt;li&gt;Databaseへの書き込み、読み出し&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Firebaseの準備&lt;/h2&gt;
&lt;p&gt;アカウントを作ってプロジェクトを作ります。実際に
&lt;a href=&quot;https://firebase.google.com/?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Firebase&lt;/a&gt;
のサイトに従って進めるといいです。&lt;/p&gt;
&lt;p&gt;次はプロジェクト作成です。&lt;br&gt;
任意の名前を入力します。URLに使われるので、なるべくわかりやすいものにしておくとおすすめです。国はJAPANにしておきましょう。私の場合はプロジェクトの名前を「tenka-ichi」にしたので、デフォルトで「tenka-ichi.web.app」というURLが対応付けられています。自分で取得したドメインを後から設定することもできるので、厳密に気にしなくてもいいです。&lt;/p&gt;
&lt;p&gt;プロジェクト作った後はnpmで「firebase-tools」のインストール。Firebaseの管理画面で説明があるのでそれに従って進めれば問題ないです。プロンプトやCLIに慣れていない人も、こういった所から慣れていけばいいです。そんなに難しいものではありません。&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 -g firebase-tools&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;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;firebase login

firebase init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Hostingにページをデプロイ&lt;/h2&gt;
&lt;p&gt;最初はHostingにファイルをアップします。管理画面のHostingメニューからWebアプリのドメインにアクセスできます。この状態では何もアップされていないのでアクセスしても「Site Not Found」と表示されるエラー画面です。&lt;/p&gt;
&lt;p&gt;以下のコマンドを実行すれば、プロジェクトの&lt;code&gt;public/&lt;/code&gt;以下のディレクトリがFirebase Hostingにデプロイされます。デプロイコマンドにオプションでhostingのみ反映する用に指定しています。他の機能はセットアップが必要なので、エラーになってデプロイ出来ない場合があります。&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;firebasee deploy --only hosting&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;作成されたローカルのプロジェクトにはデフォルトでindex.htmlが用意されています。ですので上記コマンドを実行することで、そのファイルが反映されます。URLにアクセスすると、「Welcome Firebase Hosting Setup Complete」と表示されるようになります。&lt;/p&gt;
&lt;p&gt;あとは自分で&lt;code&gt;public/index.html&lt;/code&gt;を変更したり、他のページを作ったりしてみましょう。これだけでとりあえずWebサイトが出来ます。&lt;/p&gt;
&lt;p&gt;Hostingでは静的なコンテンツの発信のみ有効です。PHPやRubyなど、サーバで動作するプログラムを実行させることは出来ません。HTML・CSS・JavaScriptなら発信できるということです。&lt;/p&gt;
&lt;h2&gt;Functionを使ってみる&lt;/h2&gt;
&lt;p&gt;次はCloud Functionを試します。
これはHostingとは異なりプログラムを実行して結果を返すことが出来ます。JavaScriptまたはTypeScriptで作成したプログラムを設置することが出来ます。&lt;/p&gt;
&lt;p&gt;簡単なものをデプロイ・実行してみます。&lt;code&gt;functions&lt;/code&gt;以下にindex.jsがあり、その中にコメントアウトされている&lt;code&gt;helloWorld&lt;/code&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;firebasee deploy --only functions&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コマンドを実行すると変更が反映されます。管理画面に関数が表示されるようになります。トリガーとなるURLが表示されているのでアクセスすると処理が実行されテキストが返されます。HostingのURLとはドメインが異なっているので注意しましょう。&lt;/p&gt;
&lt;p&gt;もう少しやってみます。&lt;a href=&quot;https://firebase.google.com/docs/functions/get-started?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;公式のドキュメント&lt;/a&gt;を参考に色々触ってみるのがおすすめです。&lt;/p&gt;
&lt;p&gt;無料の枠ではHTTPリクエストで動作するメソッドのみ利用できます。課金するとサーバでスケジュールしたバッチ処理などを動かせます。やろうと思えば外部のサービスを利用して、定期的にHTTPメソッドを動かすことが出来るようです。&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;functions.https.onRequest()  
→ HTTPリクエストで動作する処理、無料枠で利用可  

functions.pubsub.schedule().onRun()  
→ スケジュールに従い動作する処理、有料のBlazeプランでないと利用できない&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;ローカルで確認できる&lt;/h3&gt;
&lt;p&gt;ちなみにfirebase deployを実行しなくてもローカルで動作を確認することが出来ます。
&lt;code&gt;firebase serve&lt;/code&gt;を実行すると、ローカルでサーバが立ち上がります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;http://localhost:5000/?&lt;/code&gt;でHosting、functionも帰ってくるメッセージに記載のURL(&lt;code&gt;localhost:5001&lt;/code&gt;で始まるやつ)で実行・確認できます。&lt;/p&gt;
&lt;p&gt;他にもdeploy時には文法などのチェックをしてくれているようです。エラーの箇所はチェックがかかりdeployが途中で止まりました。親切ですね。&lt;/p&gt;
&lt;h2&gt;Databaseへの書き込み、読み出し&lt;/h2&gt;
&lt;p&gt;次はFirestoreを利用します。管理画面でデータベースを作成します。&lt;/p&gt;
&lt;p&gt;ひとまずFunctionにデータベースの処理を作成して、そこからデータを書き込み・読み出ししてみます。
以下のような感じでメソッドを作成して、デプロイ。URLでメソッドを実行するとデータが作成されます。超単純にGETでパラメータ渡しました。&lt;/p&gt;
&lt;p&gt;「コレクション」や「ドキュメント」という単語を目にすることになります。このあたりはFirebaseのドキュメントを見て理解するといいです。時間あれば情報をまとめようと思います。NoSQLベースなのでRDBとは大きく異なります。注意しましょう。&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;exports.ichibanWrite= functions.https.onRequest((request, response) =&amp;gt; {
  const title = &amp;quot;テスト&amp;quot;;
  const name = &amp;quot;名前&amp;quot;;
  const memo = &amp;quot;メモ&amp;quot;;
  var docRef = db.collection(&amp;#39;ichiban&amp;#39;).doc(&amp;#39;test&amp;#39;);
  var setRecord = docRef.set({
    name: name,
    title: title,
    memo: memo
  });
  response.send(&amp;quot;dataWriten,Thank you &amp;quot; + name);
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;管理画面のdatabaseのタグから登録した実データが確認出来ます。管理画面上で追加したり、編集したりもできます。&lt;/p&gt;
&lt;p&gt;データの読み出しはドキュメントを参考に以下のようにやったら出来ます。
こちらではデータをログに出力するようにしています。Firebaseの管理画面でfunction実行時のログを確認できるので、そこで正常に動作していること・出力の内容を確認しました。&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;exports.dataRead= functions.https.onRequest((request, response) =&amp;gt; {
  db.collection(&amp;#39;users&amp;#39;).get()
    .then((snapshot) =&amp;gt; {
      snapshot.forEach((doc) =&amp;gt; {
        console.log(doc.id, &amp;#39;=&amp;gt;&amp;#39;, doc.data());
      });
    })
    .catch((err) =&amp;gt; {
      console.log(&amp;#39;Error getting documents&amp;#39;, err);
    });
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;簡単にはこんな感じですね。
まずはFirebaseの機能を一通り触ってみるところからです。とりあえず、Hostingとfunctionとdatabaseが動かせるので必要なものは揃いつつあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2019/05/29/firebase-auth/&quot;&gt;次はFirebaseのログイン機能を触ってみます。&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[だめな部分を教えてくれる『やってはいけないデザイン』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/05/27/yattehaikenai-design/</link><guid isPermaLink="false">https://honmushi.com/2019/05/27/yattehaikenai-design/</guid><pubDate>Mon, 27 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;デザインをダサくしてしまうポイントが書かれてます。ここに書いてあることを注意して作成するだけで、かっこいいデザインに近づけることが出来ます。&lt;/p&gt;
&lt;p&gt;ズバリ、デザイナー以外の人向けに書かれた本で、専門用語やデザインの理論的な話はなるべく少なくなっています。営業や広報の方などデザインはわからない、でもチラシやポスターなどを何かしら作らなくてはいけなくなった人におすすめの本です。&lt;/p&gt;
&lt;p&gt;こうしたら！良くなるではなく、「これをやってはいけない」と言うNGポイントを指摘しているのが特長です。&lt;/p&gt;
&lt;p&gt;実際に何かのデザインを作ってみて、なんかダサいなと感じたらこのNGポイントを使ってチェックしてみるといいです。簡潔にまとめられており修正案も用意されているので、すぐに修正してレベルの上がったデザインにできます。&lt;/p&gt;
&lt;p&gt;特定の用途に限ったものではなく、ポスターや名詞、プレゼンの資料などさまざまな場面でのデザインに対応しています。レイアウトや色、フォントなどの要素に対して、「やってはいけない」を示してくれているのでわかりやすいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798145939/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798145939&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=2d8653e991aa2a2cf4b261dfa4bdd19b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4798145939&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4798145939&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&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&gt;役立つ情報もたくさん&lt;/h2&gt;
&lt;p&gt;デザインのアクセントになるような写真やアイコンのフリー素材の配布サイトなども紹介されており、メモしておくと良いです。私も&lt;a href=&quot;http://icooon-mono.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ICOOON MONO&lt;/a&gt;なんかは良く利用します。&lt;/p&gt;
&lt;p&gt;素材とかを使いこなすことも上達の道のりだと思います。普段から「こんな素材があるのか」ということを記憶してストックしておくと、デザインの際の役に立ちます。上手い人は引き出しも多いです。
身の回りのデザインが上手い人の作ったものを参考にして、素材等を真似するのがわかりやすいと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;最初にも書いていますが、デザイナーではない人向けの書籍です。デザインの理論や難しい事は書いていませんので、物足りなく思う人もいると思います。その分、デザインに詳しくない人にとってはスラスラ読めて親切になっています。場面や立場にもよると思いますが、スライド作成やイベントのポスターなどが多いでしょうか。急に自分がやることになってどうしようか、と悩んでいる人にぜひ手にとってほしい本でした。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[料理の好奇心を刺激する本『Cooking for Geeks』]]></title><description><![CDATA[IT…]]></description><link>https://honmushi.com/2019/05/24/cooking-for-geeks/</link><guid isPermaLink="false">https://honmushi.com/2019/05/24/cooking-for-geeks/</guid><pubDate>Fri, 24 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;IT技術書で有名なオライリーが出版している料理レシピ本です。
ただのレシピ本ではなく料理をサイエンスと捉えて、まるで実験のように解説しています。&lt;/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 target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873117879/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873117879&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=5aa119d900efdd210a1a7daf128dd589&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873117879&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873117879&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&gt;化学の復習によい&lt;/h2&gt;
&lt;p&gt;熱によるタンパク質の変質など、科学的な現象を料理の中で学ぶことが出来ます。身近な生活の中に潜む化学を見つけることができおもしろいです。中学生の時にこの本に出会えればみんな化学にもっと興味を持てたはずです。夏休みの自由研究とかにすごく向いているのではないかと思います。最近の自由研究のトレンドは何なんでしょうか？プログラミングとか担っているのかもしれませんね。&lt;/p&gt;
&lt;p&gt;料理する上での道具の話やキッチンの話など、さまざまな領域に話が広がっています。道具の整理とかする際にこの本を参考に揃えると、一通り必要なものや便利なものが揃うので良いです。道具に対してもしっかりと思考を巡らせており、料理全般に対するオタク的な考え方がとてもおもしろいです。&lt;/p&gt;
&lt;h2&gt;料理法もさまざま&lt;/h2&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;p&gt;料理への好奇心が刺激される良い本です。情報量も多いし科学的な説明や問題も含まれていて、知識を得られた感があります。できればレシピもドンドン作っていきたいですが、何よりも本が大きく分厚いです。450ページ位ありました。&lt;/p&gt;
&lt;p&gt;食品添加物やアレルギーに関する文も載っています。なんとなく危ないらしいけど詳しくは知らないという人も、ここを読んでおくといいです。この本の知識だけでは足りないのですが、ある程度詳しくなるので出典不明の情報に騙されにくくなります。&lt;/p&gt;
&lt;p&gt;料理や食事・味覚に関する幅広い知識を身につけることができるので、可能であれば早いうちに読んでおくと毎日の料理が楽しくなります。
毎日の料理をただの作業として捉えるのではなく、楽しい実験や遊びのように感じることができると、前向きに取り組めますし上達も速いと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[忙しい毎日に余白を作る『労働者のための漫画の描き方教室』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/05/24/roudousya-manga/</link><guid isPermaLink="false">https://honmushi.com/2019/05/24/roudousya-manga/</guid><pubDate>Fri, 24 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前紹介した、&lt;a href=&quot;/2019/05/23/kakuyuuki/&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;/p&gt;
&lt;p&gt;本がすごく厚く470ページくらいありました。手に取るのに勇気が入りますが内容は漫画の箇所が多いので、見た目よりボリュームは少ないです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4393333632/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4393333632&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=b9b54e7edf3c9842cd9f26a966bb8f24&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4393333632&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4393333632&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&gt;表現とは思考のための道具である&lt;/h2&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;p&gt;敗北から学び、変化していくことについて書かれています。他人や環境と比較して敗北するのではなく、しっかり自分が原因で敗北したことを理解することで、自分が変化しなければいけないこと、どのように変化する必要があるのかを学びます。&lt;/p&gt;
&lt;p&gt;これぞという敗北とはなかなか出会うことは難しいそうですが。そんな敗北も楽しんで向き合うことが重要なようでした。著者も敗北というものに前向きに向き合うことができるようで、とてもいい価値観だなあと感心します。目を背けたり逃げ出したくなること、他人や環境に責任を押し付けたくなることは大いにあると思います。それでもしっかり自分ごとにして向き合うことは、かなり体力も使う上に勇気がいることです。&lt;/p&gt;
&lt;h2&gt;鼻とか眉毛とか背景とか表情とか&lt;/h2&gt;
&lt;p&gt;これらに対して、不要論がでてきます。漫画ではこれらは無くてもいいのではないかと。
形式のためにそれらを書くぐらいなら、読者が想像するための余白として残しておくくらいがいいのではということです。昔の西洋の絵画などがどうやら参考になるそうです。&lt;/p&gt;
&lt;p&gt;何を書いたら読者は楽しんでくれるかよりも、何を書かなかったら読者は楽しいかを考えるようです。難しいですね。
そうして普段のやらなくてはいけない仕事とは関係無いこと、つまりやりたいことを考えることで前向きに取り組むことが出来るようになります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;独特な漫画の描き方ですが、不思議と面白く読めるものです。毎日忙しくてしんどいなあという方にこそ、この本を読んで何らかのアウトプットに取り組んでほしいです。ネットでの意見は発言への付き合い方なども書かれているので、参考になると思います。&lt;/p&gt;
&lt;p&gt;全般通して、毎日頑張って働いている人に向けて肯定してくれるようなメッセージが散りばめられています。嫌なこともたくさんあると思いますが、なにかそこから活かせることや学べることもあるかもしれません。自分にとって必要なものをしっかり選択して、未来のために活かしていけるような余裕や余白が必要なのかと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[躓くような文章の方が面白い『書くための勇気』]]></title><description><![CDATA[批評を書くための心構えや技術についての本です。
著者は作家であり、編集にも携わっている方で漫画なんかも書くようです。 途中に漫画も挟まっており、良いテンポで読めます。漫画はゆるーい感じなのですが、しっかりいいことが書いてあるので飛ばさずに読んでほしいです。 著者は他にもWEB…]]></description><link>https://honmushi.com/2019/05/23/kakuyuuki/</link><guid isPermaLink="false">https://honmushi.com/2019/05/23/kakuyuuki/</guid><pubDate>Thu, 23 May 2019 00:00:00 GMT</pubDate><content:encoded>&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;p&gt;おもしろいと思った部分を参考にメモしています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4794970870/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4794970870&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=086d3c632e8e55f9041f2960275c4a85&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4794970870&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4794970870&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&gt;書いてみること&lt;/h2&gt;
&lt;p&gt;まず、誰に書くかを考えないといけないことに気づきました。どんな人に読んでほしいか、どんな人に知って欲しいかです。
それでも、届く読者は一人ではなく大多数。万巻の書物を制覇してきた知の権化だと捉えるのがいいそうです。&lt;/p&gt;
&lt;p&gt;一万人に伝わるけど半年で忘れるものより、10人にしか伝わらないけど10年覚えてくれる方がいい。これは良い言葉ですね。メモしておきます。&lt;/p&gt;
&lt;h2&gt;わかりやすいの弊害&lt;/h2&gt;
&lt;p&gt;わかりやすくするとわかりやすい結論に引き込まれてしまいます。
文章を短く書くとか、YesかNoか立場をはっきりするとか、そういった良い文章の書き方もありますが、この本ではそれらとは異なる考え方も提案しています。&lt;/p&gt;
&lt;p&gt;わかりやすく書くための型に当てはめてしまうと、個性がなくなり自分らしい文章ではなくなってしまいます。型に当てはめることで簡単に文章は作れますが、借り物の文章の様に感じられるかもしれません。&lt;/p&gt;
&lt;p&gt;ちょっと躓いてしまうような文章も、読み手側の考慮や思索の余地があって良い文章になるそうです。
本の中で、夏目漱石や太宰修などが例として出てきますが、それらの文豪も一見読みにくい分だったりします。しかし、読者を引きつける何かがあり、その個性的な部分を大切にするべきという考え方です。&lt;/p&gt;
&lt;p&gt;多様性という言葉の意味を考えて、YesかNoかのみの2元論ではなく、文章の間の感情を潜ませるような言葉を選べると良いです。&lt;/p&gt;
&lt;h2&gt;コトコトしない&lt;/h2&gt;
&lt;p&gt;「こと」とか「的」などの言葉を使ってしまうと、つ与えたいことが曖昧になってしまいます。わざとそうする方法もあるようですが、なるべく避けていったほうが言葉は磨かれます。&lt;/p&gt;
&lt;p&gt;おもしろいという感情を「おもしろい」以外の言葉で、つまらないという感情を「つまらない」以外の言葉で伝える練習をすると、言葉の使い方がうまくなるそうです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;書く行為自体が書き手にとって思考を熟成させるプロセスとなるので、書くことをやめず続けることを心がけたいと思います。&lt;/p&gt;
&lt;p&gt;SNSがなどで誰しもが発信できるような社会になっています。より自分らしく、そして誰かを動かせるような言葉を作れるように努力していきたいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[目で見て楽しい『なるほどデザイン』]]></title><description><![CDATA[デザインのコツをグラフィカルにわかりやすく表現しています。 副題にあるように「目で見て楽しむ」という通りで、見ているだけでも楽しさを感じられます。
コツを七つ道具に例えたりなど読みやすくまとめられていますので、ザックリのテクニックを理解するのに役立ちます。…]]></description><link>https://honmushi.com/2019/05/22/naruhodo-design/</link><guid isPermaLink="false">https://honmushi.com/2019/05/22/naruhodo-design/</guid><pubDate>Wed, 22 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;デザインのコツをグラフィカルにわかりやすく表現しています。&lt;/p&gt;
&lt;p&gt;副題にあるように「目で見て楽しむ」という通りで、見ているだけでも楽しさを感じられます。
コツを七つ道具に例えたりなど読みやすくまとめられていますので、ザックリのテクニックを理解するのに役立ちます。&lt;/p&gt;
&lt;p&gt;1つのテーマで複数のパターンが紹介されており、「惜しい」パターンなんかも紹介されています。
いくつもパターンを作成して、その中からいいものを選ぶというプロセスはとても大切ですので、その過程を再現しているのだと思います。&lt;/p&gt;
&lt;p&gt;レイアウトに加えて、文字組みや色、写真の使い方なども説明されています。基本的なデザイン要素は一通り学ぶことが出来ます。この本一冊あれば、一通り最初に学ぶべきことがわかるので良いです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4844365177/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4844365177&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=75e0cf30c247901c77f142982746b1f3&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4844365177&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4844365177&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&gt;デザインプロセス&lt;/h2&gt;
&lt;p&gt;デザインをつくるためのプロセスには必ず正解があるわけではありませんが、一つの例として紹介されていました。&lt;/p&gt;
&lt;ol start=&quot;0&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;/ol&gt;
&lt;p&gt;大きいものから入って段々と小さく細かいものを決めていくという進め方で、とても良いと思いました。実際のページデザインの出来上がりが順番にかかれているので、各項目の意味や範囲も理解しやすいです。フローなどの知識がないと細かいところから作りたくなったりしてしまいますが、大きなところから初めるようにしましょう。デザインに限らず何でもそうかもしれません。&lt;/p&gt;
&lt;h2&gt;デザイナー7つ道具&lt;/h2&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;li&gt;翻訳機&lt;/li&gt;
&lt;li&gt;虫眼鏡&lt;/li&gt;
&lt;li&gt;愛&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;上記の他にも写真のことやグラフなどの作り方やコツもあります。デザイナーにはとても参考になる本だと思います。さまざまな技術を網羅的に取り扱っている印象でしたので、できるだけキャリアの浅いうちに読むといいです。早いうちにこれらを意識してデザインできる、またはデザインを読める用になると強いと思います。&lt;/p&gt;
&lt;p&gt;基礎的なところをしっかり書いていますし、デザイナーならではの目線なども書かれていますので、デザイナー以外の人にも面白く読める内容だと思います。難しい話はあまりせずに楽しく読めるようになっていますので、気構えずに開いてみてほしいです。&lt;/p&gt;
&lt;p&gt;文章も少なくさくさく読める本です。暇な時間とかちょっと悩んだときとかに開いてほしい本でした。
実践的な内容も日頃からの心構えも、ちょっとしたコツも網羅的に書かれているので、手元に一冊おいておくと捗る本です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[余白を活かす『けっきょく、よはく』]]></title><description><![CDATA[デザインの本で、余白を活かしたデザインレイアウトをメインに解説した本です。
NGの例とそれを改良したOK…]]></description><link>https://honmushi.com/2019/05/21/yohaku/</link><guid isPermaLink="false">https://honmushi.com/2019/05/21/yohaku/</guid><pubDate>Tue, 21 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;デザインの本で、余白を活かしたデザインレイアウトをメインに解説した本です。
NGの例とそれを改良したOKの例が並べて掲載されていますので、比較しながらメソッドを理解することが出来ます。&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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4802611692/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4802611692&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=3d3301e83d0cfbccebb00a87d43d6aa0&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4802611692&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4802611692&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&gt;わかりやすい例&lt;/h2&gt;
&lt;p&gt;基本的に各テーマごとにNG例とOK例を比較しています。NGな理由4つと、修正したテクニックを4つ紹介しています。もっと大きな点での修正点も含まれていますが、情報が整理されているのでわかりやすいです。&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;無意識の違和感をなくす&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;例とその修正がひたすらあり、情報も多くとても学べるところが多かったです。文章による説明はそれほどボリュームがなく、テクニック集のような印象を受けました。&lt;/p&gt;
&lt;p&gt;実際のデザイン検討・作成の場面で役に立つ書籍だと思います。パターンも紹介されているので参考にすればさまざまな場面へ応用できそうです。&lt;/p&gt;
&lt;p&gt;本の全体として余白を上手に使うテクニックを紹介しており、その効果によって洗練されて見やすいデザインになることがわかります。ぜひこのテクニックを利用して見やすいデザインを作れるようになりたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ビジネス観が大切『SEを極める50の鉄則』]]></title><description><![CDATA[SEとして活躍するための鉄則が50個紹介されています。 鉄則のうち半分はSE…]]></description><link>https://honmushi.com/2019/05/21/ze-50-tessoku/</link><guid isPermaLink="false">https://honmushi.com/2019/05/21/ze-50-tessoku/</guid><pubDate>Tue, 21 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SEとして活躍するための鉄則が50個紹介されています。&lt;/p&gt;
&lt;p&gt;鉄則のうち半分はSEとして信頼を得るためのもの、残り半分はマネージャとして活躍するためのものです。
ですので、自分の状況によっては半分のみチェックしておけば問題ないということでもあります。
できれば将来的にマネージャになることも考えて、今のうちから意識して動けるようになっておくといいとは思いますが、できるところから初めましょう。&lt;/p&gt;
&lt;p&gt;SE以外のビジネスマンからみたSEの印象と、実際にSEが目指すべき姿は大きく違います。正しいSE観を持って働き、信頼を勝ち取れるように努力しましょうというのが大きな目標となっています。&lt;/p&gt;
&lt;p&gt;マネジメントに関する鉄則も半分載っていますので、これから後輩ができるとか、マネージャとして参加する立場の人にとっては大きな学びを得られるものになっています。&lt;/p&gt;
&lt;p&gt;技術的な話と言うよりもビジネス的な話がメインです。ビジネススキルを身につけることや、プロジェクトの中での立ち居振る舞いについての内容が多いです。この本に描いてあることは基本SE観以外でも大いに役に立つことだと思います。むしろこれらがしっかり身についていれば、さまざまな業界で活躍できるのではないかと思いますね。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4296102486/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4296102486&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=8491f485d683d8bf5caffc58ade05191&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4296102486&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4296102486&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&gt;ビジネスに強くなる&lt;/h2&gt;
&lt;p&gt;ビジネスに強くなることで、社内や協力会社への発信力も高まるため、いざというときに力を発揮できます。SEは割とビジネス観とか、販売能力みたいなものを重要視しないため弱点にもなりがちです。&lt;/p&gt;
&lt;p&gt;ビジネス目標を達成出来て始めて勝利なので、ビジネスの行き先や未来についてもイメージしながら動けることが望ましいです。説明力や交渉力も身につくと思います。&lt;/p&gt;
&lt;p&gt;以下、ビジネスに強くなるためにやるべきことが紹介されていますので、参考にしてメモします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;売上や目標をしっかり憶える&lt;br&gt;
ビジネスマインドをしっかり持つために、基本的な数字は憶えましょう。会議とかで聞かれたときにしっかり答えられるようにします。普段から持ち歩くノートやメモ帳の最初のページに書いておいて、いつでも確認できるようにすればいいだけです。&lt;/li&gt;
&lt;li&gt;販売活動を積極的に行う&lt;br&gt;
顧客への提案活動などに積極的に参加します。営業担当に任せっきりにするのではなく、積極的に自分にできることを探しましょう。&lt;/li&gt;
&lt;li&gt;顧客と雑談する&lt;br&gt;
営業担当に言わないようなことを意外と言ってくれたりします。新プロジェクトやリピートに繋がったりします。苦手意識がある人もいると思いますが、あまり硬く考えすぎず気楽に挑めばいいです。&lt;/li&gt;
&lt;li&gt;営業とビジネスの話をする&lt;br&gt;
営業にビジネスについてわかっているアピールをすることで、ビジネスに強いイメージを持ってもらうことが出来ます。もちろん営業担当の方がビジネスには強いのですが、できる限り営業の話についていくようにしましょう。間違えることやわからないこともあると思いますが、興味があるとか意識しているということが伝われば十分です。&lt;/li&gt;
&lt;li&gt;利益の仕組みを理解する&lt;br&gt;
ビジネスの仕組みを覚えていきましょう。まずは自分の利益の仕組みから理解して、次に顧客、更には業界大手など広げていけると良いです。&lt;/li&gt;
&lt;li&gt;会議で発言する
SEは発言しないでもいいようなイメージがあるかもしれませんが、そんなことはありません。積極的な姿をアピールすることは重要です。この辺はSEに限らずどんな職種でも同じですね。意外と忘れがちですが、こういった基本的な意識が大切だったりします。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;できるマネージャーの条件&lt;/h2&gt;
&lt;p&gt;SEに限らずの目指すべき姿として、部下の育成という点も強く認識しておくべきだそうです。
目先の技術やタスクのこなし方よりも、本物のSEの価値観などをしっかりと伝えることが重要です。結構難しいと思いますが、経験をこなしていくことで自然とわかるようになります。自分が教えてもらったことなどノートや日記にメモしているとこういうときに役に立っていいですよ。&lt;/p&gt;
&lt;p&gt;締め切りを守ること、部下に締め切りを守らせることなども重要です。できるように仕組みで解決するなどコツがありますが、日頃からの指導や教育などをしっかり意識し直す必要がありそうです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;SEのとして大切なことが書いてあり、勉強になる内容でした。技術的なことよりもビジネス面の内容が多く、参考になります。SNSとかスクールとかでエンジニアになるための勉強コンテンツはたくさん溢れかえっていますが、こういったことは教えてもらえないので大切にしたほうがいいです。締め切りを守るとか基本の中の基本ですが、一番むずかしいことでもあります。すぐには解決できなくても、大事なことであると認識して対策できるように取り組むようにしましょう。&lt;/p&gt;
&lt;p&gt;ビジネス力とかSEとしての価値観みたいなものは、まだまだ情報教材では取り上げられていないように思います。SEに限らず、こういったものは重要なので、しっかり受け止めてほしいですね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[心の中でもやっとしたときに『言ってはいけないクソバイス』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/05/20/kusobaisu/</link><guid isPermaLink="false">https://honmushi.com/2019/05/20/kusobaisu/</guid><pubDate>Mon, 20 May 2019 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;SNSで人とつながる時間が多くなり、気を使うことが多い社会になりました。日頃の人付き合いとかで疲労してしまう人もいるのではないでしょうか。
相手が何気無く言ったことを真面目に聞きすぎないこと、言われたまま受け取って余計に考えこまないことが大切です。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4591146596/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4591146596&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ba3b4663da78d2955966033f72acf2c4&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4591146596&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4591146596&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&gt;身の回りのクソバイザー&lt;/h2&gt;
&lt;p&gt;自分の身の回りにも、思い当たる人はいないでしょうか？誰しも一人くらいいると思います。
アドバイスのつもりで言っているので本人には悪気は無く、適当にあしらうわけにもいかないのが厄介なところです。&lt;/p&gt;
&lt;p&gt;直接言い返すことが出来なくても、心の中で唱えるなどの対象法が紹介されているので、参考になります。他には「おもしろい！」「ウケる！」って言い続けてやり過ごす方法もあるようです。昔のギャルはいろいろな人から小言を言われる機会が多いらしく、「ウケる」でやり過ごしていたのではないかという話も出てきます。なるほどなと思いました。&lt;/p&gt;
&lt;h2&gt;さまざまな立場からのクソバイス&lt;/h2&gt;
&lt;p&gt;本に出てくる話は一般の人からの相談をまとめたものです。世の中の人がこんなことにイライラしているのかということもわかります。&lt;/p&gt;
&lt;p&gt;出てくるクソバイザーの立場もさまざまで、上司や先輩を始め、親であったり友達であったり、男性女性さまざまな人が出てきます。女性目線のものが多いのですが、男性でも共感できるものもあるので、どんな方にもおすすめできる本です。&lt;/p&gt;
&lt;h2&gt;クソバイスの返し方&lt;/h2&gt;
&lt;p&gt;相手のフォーマットを利用するとか、主語を小さく・または大きくして見るとか、いろいろあります。なんせ本では100個のクソバイスを紹介しています。&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;/p&gt;
&lt;p&gt;犬山さんによると、本当に人のためになるアドバイスというものは、いろいろな話を聞いて悩みや問題を探し、その人の気持ちになって考えているはずなので、気持ちいいものでは無いはずだそうです。
辛い思いをしている人の気持ちに寄り添って考えるはずなので、アドバイスする側も苦しい気持ちになっているそうです。&lt;/p&gt;
&lt;p&gt;自分がアドバイスをする際に、これはクソバイスになっていないかどうかという判断になります。
もしも人にアドバイスをしたつもりでも、なんか言っていて気持ちいいなと感じた場合は、多分クソバイスです。これから気をつけようと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[書店員の仕事法『スリップの技法』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/05/17/slip-tec/</link><guid isPermaLink="false">https://honmushi.com/2019/05/17/slip-tec/</guid><pubDate>Fri, 17 May 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4908087075/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4908087075&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=a1af707ec79a6fc08c7b9dacdc2fd83f&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4908087075&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4908087075&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&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;POSレジであったり上司の意見であったりを参考にすればそれなりの答えは出てくるのかもしれませんが、やはり自分で考えて、さまざまな施策に取り組んでほしいです。書店員だからこそできること、他の仕事にも応用して考えられるものだと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;書店員向けの内容というのがまず感じるところでしょうか。書店で働いている人にとっては、ためになる情報が満載です。書店で働かない人にとっては、そんなにすぐに活かせる知識はありません。ただ、書店員の働き方や商品陳列の工夫などを知ることが出来、書店の裏側を覗くことが出来ますので興味はもてるかと思います。&lt;/p&gt;
&lt;p&gt;書店でスリップの挟まっている本を見つけたら、それに何か挟まっていたら注意して読んでみようかと思います。書いてある意味はわからないですが、何らかの作戦や意図がきっとその本にあるかもしれません。&lt;/p&gt;
&lt;p&gt;この本を読んでみて、ある意味書店員向けの技術書と言った感じでしょう。そんなジャンルの棚はありませんので、この本こそ陳列する場所に困る本なのかもしれません。いつの日か書店員として働くことがあれば、また読みたい本でした。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[デジタルへ移行する本『ぼくらの時代の本』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/05/16/bokuranohon/</link><guid isPermaLink="false">https://honmushi.com/2019/05/16/bokuranohon/</guid><pubDate>Thu, 16 May 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4862391672/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4862391672&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=a313e2f1e1ddeffa62bb6a89be8a9753&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4862391672&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4862391672&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&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&gt;電子書籍をめぐる環境&lt;/h2&gt;
&lt;p&gt;販売しているプラットフォームや、読む際のデバイスなどについても考察しています。Amazonを始めとする電子書籍サービスはいくつもありますが、選択肢があるがゆえに互換性が無く困りますよね。&lt;/p&gt;
&lt;p&gt;電子書籍のデータもPDFだったりHTML形式だったりいろんなものがあるようです。何か統一した形式が生まれるといいですが、難しいのかもしれません。それぞれいいところと悪いところがありますし。&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;/p&gt;
&lt;p&gt;本読む人にはそれぞれの読み方があるので、人によって捉え方は異なると思います。本が読み手に届くまでにはたくさんの人が関わっており、その人たちの立場によっても捉え方は異なると思います。嬉しい人もいれば嬉しくない人もいると思います。難しいことだとは思いますが、これからの電子書籍が発展する時代に、本とのうまい付き合い方が見つかるといいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[『Webデザイン基礎トレーニング』]]></title><description><![CDATA[Webデザインに関する本です。よく使われるパターンやテクニックを紹介しています。デザインのパターンの解説やCSS…]]></description><link>https://honmushi.com/2019/05/15/web-design-kiso/</link><guid isPermaLink="false">https://honmushi.com/2019/05/15/web-design-kiso/</guid><pubDate>Wed, 15 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Webデザインに関する本です。よく使われるパターンやテクニックを紹介しています。デザインのパターンの解説やCSSでの指定方法などが書かれており、実践で利用する機会は多いと思います。&lt;/p&gt;
&lt;p&gt;ただし、いつどのパターンを使うべきなのかということに関しては、やはり経験が大事です。場数をこなしてクライアントやプロダクトに合ったデザインを提案できるように練習していきましょう。まだ初心者のうちの引き出しを増やすための勉強として有効に活用できる内容になっています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/484436572X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=484436572X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ace5888d60443ce737137f54d56c6a5a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=484436572X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=484436572X&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&gt;Webデザインのさまざまな要素&lt;/h2&gt;
&lt;p&gt;この本では以下のデザイン要素について解説されています。
どの項目についても実例とソースコードが書かれていますのですぐに参考にして利用することができると思います。JSのライブラリを使ったものも含まれていますので注意しましょう。&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;実際のデザインの現場では、プロダクトに沿った表現を見つけるための取り組み等も必要となります。それらについては書かれていません。あくまでも、こんな表現があり、それを実現するにはどうすればいいかということのみが書かれています。&lt;/p&gt;
&lt;p&gt;すなわち、どんな場合にどんな表現を選ぶべきかについては別の方法で身につけるようにしましょう。&lt;/p&gt;
&lt;h2&gt;実際に写経するのがおすすめ&lt;/h2&gt;
&lt;p&gt;Webでの表現はインタラクティブなものが多く、実際に実装して触ってみないと感覚がわからないと思います。
本に書かれている写真を見て満足するのではなく、実際にソースコードを入力して、触って見ることがおすすめです。&lt;/p&gt;
&lt;p&gt;いくつかのディスプレイで見てみたり、PCとスマホそれぞれで見るなどやってみましょう。いろんなブラウザを使って見ることも重要になると思います。&lt;/p&gt;
&lt;p&gt;実際にソースコードを触って見れば、意外と簡単に実装できることも解ると思います。触れば触るほど奥が深くおもしろいのでおすすめです。サンプルコードがあれば、無理せずにダウンロードしましょう。ミスタイピングなどで余計な時間を使わなくてすみます。
サンプルコードにコメントをつけながら理解していくと、効率良く学べるのでおすすめです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;図書館で借りてみてみたのですが、ちょっと昔の本でした。今となっては結構違う常識になっている内容もありましたので注意したいと思います。あっという間にトレンドが変わっていくので、しっかりキャッチアップしておきたいですね。&lt;/p&gt;
&lt;p&gt;タイトルにトレーニングとありますが、実際には実装方法の実例集と言った感じです。実例と言ってもこの本用に作られたサイトですので、実例ではないという感じでしょうか。
実際のトレーニングには、WEBサイトのデザインを自分で作ってみるのが一番だと思います。すでにあるサイトでもいいですし自分で考えてもいいです。このサイト自分ならどう作るかなという気持ちで作り直してみると楽しいですし練習にもなっておすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ライセンスに関する基礎知識『OSSライセンスの教科書』]]></title><description><![CDATA[OSSの開発やコミュニティに参加している著者によるOSSライセンスのに関する基礎知識と実例、取り組み方のコツなどを紹介した本です。 OSS…]]></description><link>https://honmushi.com/2019/05/14/oss-book/</link><guid isPermaLink="false">https://honmushi.com/2019/05/14/oss-book/</guid><pubDate>Tue, 14 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;OSSの開発やコミュニティに参加している著者によるOSSライセンスのに関する基礎知識と実例、取り組み方のコツなどを紹介した本です。&lt;/p&gt;
&lt;p&gt;OSSライセンスのは法律なども関わってくるためややこしいのですが、細かく書かれておりしっかりと理解することが出来ます。要約などもところどころに書かれているため、憶えるのにも使えると思います。基本情報などの資格試験の勉強にも良いです。まるごと暗記が必要であればそうしたらいいのですが、ライセンスに慣れておいて利用するときにライセンスの利用条件をしっかり見ることが目指すべき状態だと理解しました。&lt;/p&gt;
&lt;p&gt;監修として弁護士の方がサポートしていることもあり、実際の法令などについての考察・解説も充実しています。
この機会にOSSライセンスのルールや仕組みについてしっかり学んでおこうと思いました。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4297100355/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4297100355&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=8c5901d513cb1f25592e5eab59183a1d&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4297100355&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4297100355&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&gt;OSSライセンスの基礎&lt;/h2&gt;
&lt;p&gt;いくつかのライセンス体系についての概要が書かれていました。ここでは概要のみを引用してメモします。
難しい表現に出会ったときもこれらの内容を意識しながら調べることで、しっかり理解して利用できるようになると思います。&lt;/p&gt;
&lt;p&gt;ライセンス原文とその解説も書かれているので、これからライセンスを目にするときの練習にもなると思います。時間をとってゆっくり読んでいくことをおすすめします。&lt;/p&gt;
&lt;h3&gt;利用者に責任がある&lt;/h3&gt;
&lt;p&gt;OSSライセンスの利用に当たって、責任が開発側には一切ないことが大きな共通点です。利用する人が責任を追うことになります。それが認められない場合はOSSライセンスのを利用することは避けたほうがいいです。
開発者にとっては、より開発に集中でき発展につながるので良いと言えるでしょう。&lt;/p&gt;
&lt;h3&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;+ MIT
    + 利用する  
        基本的に寛容
    + 他の人に頒布する  
        適切にライセンス表記を行う、全文を表記する必要がある  
        適切に著作権表記を行う、必ず人の目に触れる場所にライセンスと著作権を表記する必要がある。

+ BSD
    + 利用する  
        BSDライセンスの以外の規約がないか確認する
        基本的に寛容
    + 他の人に頒布する  
        適切にライセンスを表記する、全文を記載する必要がある。
        適切に著作権を表記する
        BSDライセンライセンス以外に規約がないか確認する
    + 4項型、3項型の場合  
        著作権者の名前などをOSSライセンスののアピールや広告として無許可で使わない

+ Apache
    + 利用する  
        他の利用者に対して、自分の所有する特許の権利侵害の訴訟を起こすと、原著作者から自分に対する特許の利用許諾が取り消される場合がある。
    + 他の人に頒布する  
        適切にライセンスの表記を行う、全文を表記する必要があります
        NOTICEファイルがある場合は適切にその中身を表記する

+ TOPPERS
    + 利用する  
        基本的に寛容、念の為制約事項が変わっていないかは確認すべき
    + 他の人に頒布する  
        適切なライセンス表記・著作権表記を行う。または利用に関する報告を開発プロジェクトへ適切に行う&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&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;+ GPL (GNU General Public License)  
    + 頒布時に守るべき4つの事柄  
        1. ライセンス文言を頒布を受けた人が必ず読める形にすること
        2. ソースコードの開示を行うこと、バイナリーコードであればその生成に必要な構成ファイルなども必要になる
        3. どうすればソースコードを入手できるのか明確に表記すること
        4. ソースの開示は頒布を受けた人に少なくとも3年間は継続すること
    + 入手時の注意  
        OSSライセンスのによっては利用許諾を緩和している場合がある
    + 頒布時の注意  
        GPL以上の条件を付け加えてはいけない。
        上述の4つの事柄を守る

+ LGPL (Lesser GNU Genelar Public License)  
    基本はGPLと同じです。
    条件を満たせば、そのライブラリをリンクしたソフトウェアはLGPLと全く異なるライセンスで利用許諾できる
    ライブラリをリンクしたソフトウェアのリバースエンジニアリングを禁じてはいけない。
    ライブラリ自体の頒布の際はGPLと同様の条件が課せられる。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;OSSを利用・開発する上で必須のライセンスに関する知識を身につけることが出来ました。
他にも、OSSのコミュニティに参加する上で意識すべき点も書かれていました。重要なところとしてはフリーライダーはやめようといったところでしょうか。コミュニティの発展に力を貸すことで、OSSのコミュニティにもまた自分のために力を貸してくれます。傍観者を脱して実際にコミュニティを手助けすることを意識して動くことが望ましいです。&lt;/p&gt;
&lt;p&gt;ソースコードの発展はもちろん、自分の技術力や信用の積み重ねにもつながります。積極的な参加によって支えられているOSSのコミュニティの発展に協力していきたいと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[装幀は細部に宿る『「本をつくる」という仕事』]]></title><description><![CDATA[本を作る際にかかわるさまざまな仕事について、取材した記録をまとめた本です。 本を綴じる人や、装幀を行う人、本を書く人、書体を作る人など、…]]></description><link>https://honmushi.com/2019/05/14/honwotukuru-shigoto/</link><guid isPermaLink="false">https://honmushi.com/2019/05/14/honwotukuru-shigoto/</guid><pubDate>Tue, 14 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本を作る際にかかわるさまざまな仕事について、取材した記録をまとめた本です。&lt;/p&gt;
&lt;p&gt;本を綴じる人や、装幀を行う人、本を書く人、書体を作る人など、1冊の本ができるまでにはさまざまな人が関わっていることが理解できます。さらにそれぞれの人の仕事の歴史や、現代での環境などについても取材されており、本への味方が変わるかもしれません。東北の震災の影響の話などもあり、これまで知らなかった本にまつわる環境の変化も知ることが出来ます。&lt;/p&gt;
&lt;p&gt;本にまつわる仕事について理解することで、目の前の本に対する認識が変わるかもしれません。本を読んで本のことを知るというのもたまにはいいと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4480815341/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4480815341&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=abb4df662bc99854b01a93bfbbff9f88&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4480815341&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4480815341&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&gt;装幀は細部に宿る&lt;/h2&gt;
&lt;p&gt;装幀の話では大抵の場合は夏目漱石の話が出てきます。ご存知の通り有名な本を執筆した方なのですが、いくつかの本に関しては自分で装幀を行ったそうです。著者が自ら装幀を行うことは珍しいそうで、よほどのこだわりか好奇心が合ったようです。しかも界隈では結構評判が良いというクオリティです。漱石の本では美しさ、そして装幀を行う自由さが現れており、装丁家の目指すべきものがここから現れる印象です。&lt;/p&gt;
&lt;p&gt;時代が違うので、今のようにグラフィカルではないのですが、結構手が込んでいるらしく立派なものだそうです。一度見てみたいと思います。&lt;/p&gt;
&lt;h2&gt;子どもの読書&lt;/h2&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;p&gt;本を作るために関わる色んな人の歴史や環境についての取材でした。
想像する上で大切にしていることや、仕事をするまでのエピソード、クリエイティブの種となるような体験など細かく書かれているので面白かったです。&lt;/p&gt;
&lt;p&gt;本に興味がなくても、さまざまな仕事について知ることができる良い本でした。
本や絵本に興味がある人にとっては
さらにおもしろいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「クロール済み-インデックス未登録」がほとんど解消され、有効なページが200を超えました]]></title><description><![CDATA[ブログを初めたばかりの頃はGoogleSearchConsoleのカバレッジの項目で、ほとんどのページが「除外」の状態になっていました。 あれから数ヶ月、地道に取り組むことで「除外」状態のページも減り、「有効」としてgoogle…]]></description><link>https://honmushi.com/2019/05/13/google-index-200/</link><guid isPermaLink="false">https://honmushi.com/2019/05/13/google-index-200/</guid><pubDate>Mon, 13 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ブログを初めたばかりの頃はGoogleSearchConsoleのカバレッジの項目で、ほとんどのページが「除外」の状態になっていました。&lt;/p&gt;
&lt;p&gt;あれから数ヶ月、地道に取り組むことで「除外」状態のページも減り、「有効」としてgoogleにインデックスされるページのほうが圧倒的に多い状態になりました。今では200記事以上が有効な状態となっており、圧倒的に「除外」の状態のページが少ないです。&lt;/p&gt;
&lt;p&gt;この記事ではそのことについての情報と、取り組んだ対策について紹介します。&lt;/p&gt;
&lt;h2&gt;サーチコンソールで「除外」状態のページがほとんどだった&lt;/h2&gt;
&lt;p&gt;以前の記事で紹介していますが、このブログの初めてしばらくの頃は、サーチコンソールのカバレッジを確認すると「除外」の扱いになっているページが多く存在していました。2019年1月のことです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2019/01/07/googleindex/&quot;&gt;GoogleSearchConsoleの「クロール済み-インデックス未登録」状態の対処&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「除外」状態になっているページはGoogleから「憶える必要のないページ」と判断されているため、SEO的に意味がなく検索結果にも出てくることはありません。困った状態です。&lt;/p&gt;
&lt;p&gt;このときの「除外」となった詳細としては、「クロール済み-インデックス未登録」という判定でした。これは「googleのサーチボットが問題なくページを回遊できた、しかし、インデックスとしては登録していません。」という意味です。簡単に例えると「映画最後まで見たけど面白くなかったから忘れた、友達にも紹介しない」という判断を食らったということです。&lt;/p&gt;
&lt;h2&gt;「クロール済み-インデックス未登録」への対策&lt;/h2&gt;
&lt;p&gt;上記はSEO的に良くないので対策を行いました。具体的には以下の対応を行いました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;h2やh3などの見出しを作り直す&lt;br&gt;
見出しを意識してつけるようにしました。さらに、それぞれの記事でユニークなものになるようにしました。
「印象に残ったところ」など汎用的なものはやめて、「〇〇が□□するとは！」みたいな感じにしています。
他の記事の使いまわしと判断されて、似たページとして扱われるのを避けるためです。&lt;/li&gt;
&lt;li&gt;記事数を増やす&lt;br&gt;
地道にほぼ毎日投稿をしました。平日のみですが、ほぼ記事を描いています。たまに1日に2,3本記事を上げる時もあります。サイト全体の情報量が増えることで、サイトそのものの価値ができインデックスされやすくなると考えました。&lt;/li&gt;
&lt;li&gt;記事の文字数を増やす&lt;br&gt;
調べたところどれくらいの文字数が良いのかについてはさまざまな意見がありました。私は1記事2000文字を目安として取り組みました。多分多いほどいいとは思うのですが、あまりに多いと書くのがしんどいので2000文字になりました。&lt;/li&gt;
&lt;li&gt;インデックス登録をリクエストする&lt;br&gt;
サーチコンソール上にてインデックス登録の再リクエストを行いました。「URL検査」の項目からできるのでやっておくといいです。やらなくても自動的にクロールしてくれると思いますが、「リライトしたからなるべく早く見てほしい、待てない！」という場合はやっておくといいと思います。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記対策を行って2ヶ月後に書いた記事では、対策によってだいぶ解消されたことを紹介しています。前回の記事から2ヶ月が経過しています。この頃には「除外」状態のページよりも「有効」と扱われたページのほうが多い状態になりました。効果が出始めています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2019/03/15/googleindex2/&quot;&gt;「クロール済み-インデックス未登録」を解消する&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;有効なページが200を突破&lt;/h2&gt;
&lt;p&gt;その後、2ヶ月後の2019年5月には「有効」とした使われているページが200を超えており、ほとんどのページが「有効」として扱われるようになりました。&lt;/p&gt;
&lt;p&gt;実際にだいぶ良い状態になっているので、行った対応は効果がありました。効果がわかるまではじわじわと動いていくので、結構時間がかかりました。3,4ヶ月かかっているのでそれくらい気長に取り組みを続けながら待つ必要があります。&lt;/p&gt;
&lt;p&gt;意味のあるページをしっかり作ることが大切なのだと思います。「量と質」でしょうか。
記事を見てくれた人にとって有益な情報であること。そして、検索してサイトを訪れた人がちょうど知りたかった情報を提供することができれば良い結果になると思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;放っておいても解決するかはわからないので色々とやってみることが重要だと思います。まずはどんな問題が起きているのか、どれくらいの数のページがいつから対象なのか、そのことによりどれくらい影響うけているのかと言うことをしっかり把握することから初めましょう。&lt;/p&gt;
&lt;p&gt;そして、いくつか対応方法を調べて、実際に取り組んでみましょう。時間がかかるものもあれば、今までの記事を地道に直さなければならないものもあります。効果が現れるまでは時間がかかります。途中で心配になることもあると思いますが、長い目で見守りつつ諦めずに取り組むことが重要です。&lt;/p&gt;
&lt;p&gt;改善されなかったなかった場合も、行った対応を見直し、別のアプローチを考えたり他の問題が潜んでいないか考え直したり、多面的にアプローチしてみましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[装丁家による電子書籍についての考察『装丁、あれこれ』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/05/10/soutei-arekore/</link><guid isPermaLink="false">https://honmushi.com/2019/05/10/soutei-arekore/</guid><pubDate>Fri, 10 May 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4779124387/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4779124387&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=370f9fe640964002cdfc405ca2adeb96&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4779124387&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4779124387&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&gt;ブックデザイナー&lt;/h2&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;p&gt;電子書籍はとても便利ですが、もろもろの制約のある紙の本のほうが感覚による体験もあり、人間性の面から優れているのではないか。本が電子化されモノでなくなれば、装丁も必要なくなってしまうのではないか。電子書籍ならではの表現を探すべきなのかもしれません。モノからコトへ遷移する時代になっている予感です。&lt;/p&gt;
&lt;p&gt;電子書籍は色調などの表現も豊かですし、拡大縮小も出来ます。デメリットはデバイスの画面サイズに束縛されてしまいますし、今どのへんまで進んだのかもわかりにくいです。一方、紙の書籍は開く面白さがあるといいます。ページを進んでいく感覚は紙の本でのみ得られる感覚で心地よいものです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;著者のウェブサイトもありました。装丁に関する概要であったり、これまでの実績のいくつかを閲覧できます。
個人的に電子出版をやってみたという取り組みもあり、pdfのデータをダウンロードして読むことが出来ます。
&lt;a href=&quot;http://www.asahi-net.or.jp/~pd4j-ktrg/bookindx.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;桂川潤のサイト&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「批判だけでなく代案を」という考え方は良いことだと思いました。私も気をつけたいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[変化を創る『企画書は、手描き1枚』]]></title><description><![CDATA[企画書を作る際のノウハウやコツの本です。プランニングや企画のノウハウが詰まっており、企画書の作成と言うよりはそこに至るまでの頭の使い方などに関連する内容です。 タイトルの通り手書き1枚の企画書をおすすめしており、実際の企画書を作る際の考え方などもたくさん書かれています。「…]]></description><link>https://honmushi.com/2019/05/09/kikakusyo-tegaki/</link><guid isPermaLink="false">https://honmushi.com/2019/05/09/kikakusyo-tegaki/</guid><pubDate>Thu, 09 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;企画書を作る際のノウハウやコツの本です。プランニングや企画のノウハウが詰まっており、企画書の作成と言うよりはそこに至るまでの頭の使い方などに関連する内容です。&lt;/p&gt;
&lt;p&gt;タイトルの通り手書き1枚の企画書をおすすめしており、実際の企画書を作る際の考え方などもたくさん書かれています。「1枚でしかも手書きで書け！」という内容よりも、「こうすればいい企画が生まれる。」といったことについての内容が多い印象です。副題になっている「感動型プランニング術」という言い方がわかりやすいかもしれません。&lt;/p&gt;
&lt;p&gt;著者は企画書には個性が大切で、発案者の個性をより強く持たせるためにも「手書き1枚」を推薦しているようです。
企画書は会社やプロジェクトごとに規格が決まっていることもあると思います。上司や顧客の好みや指示もあると思いますので、無理に手書き1枚にするのがいいとは思いません。ですが、企画書作る上で頭の整理や内容の精査を行うために、手書き1枚に書き起こしてみることはとても意味があると思います。&lt;/p&gt;
&lt;p&gt;時代が求めるクリエイティブのあり方や人物像についての考察もあります。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4799323660/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4799323660&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ae342a6d35ea232fa07cbbda3112494e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4799323660&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4799323660&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&gt;時代が求めるクリエイティブ&lt;/h2&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;h3&gt;変化を創る&lt;/h3&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;社会的な争点を意識する&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;h2&gt;プランニングの原則&lt;/h2&gt;
&lt;p&gt;課題の本質を見抜くこと、何をすべきかのコンセプトを創造すること、解決策のアイデアをまとめること、この3つのことを発見することが企画書に必要な要素です。&lt;/p&gt;
&lt;p&gt;何をどう伝えるのか、WhatとHowの2軸での捉え方を鍛える必要があります。
他とは異なる個性的なアイデアを創造することで、他と差がつきます。個性そのものがアイデアなので企画書にフォーマットなどあるはずがなく、より自分らしさが出るものを選択すべきです。&lt;/p&gt;
&lt;h2&gt;企画書の作り方&lt;/h2&gt;
&lt;p&gt;企画書の中に自分の顔となるような印象があるでしょうか。そうでなければもっと自分を表現してもいいはずです。企画書では自分の個性を使って他と差をつけることが重要です。より顔が見えるようなアイデアを持っていくことで、あの人に頼みたいという印象をもたせたり、うまくいったときのことを思い出したりできるはずです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;手書きで作ることの効果や、アナログに紙に書き出すことの意味などが書かれており、どれも納得するようなものばかりです。著者の手書きの企画書も実際に掲載されていますので、大いに参考にないると思います。図解化している部分やイラストで伝える部分、タイトルなどのコピーライティングの部分など、参考になるところが多いです。&lt;/p&gt;
&lt;p&gt;何でもかんでもコンピューターで作るのをやめて、一度手書きの企画書なんかを作ってみるのも面白そうです。次にアプリやシステムを作るときは一度やってみようと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[クリエイティブは盗むこと『クリエイティブの授業』]]></title><description><![CDATA[クリエイティブでいるための心構えを書いた本です。
元は洋書で日本語に訳されたものです。本のサイズが正方形で特殊なので、ちょっと探しにくいかもしれませんが、見た目のかっこよさもあり目に入りやすいと思います。 クリエイティブな人生を送るための1…]]></description><link>https://honmushi.com/2019/05/09/steal-artist/</link><guid isPermaLink="false">https://honmushi.com/2019/05/09/steal-artist/</guid><pubDate>Thu, 09 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;クリエイティブでいるための心構えを書いた本です。
元は洋書で日本語に訳されたものです。本のサイズが正方形で特殊なので、ちょっと探しにくいかもしれませんが、見た目のかっこよさもあり目に入りやすいと思います。&lt;/p&gt;
&lt;p&gt;クリエイティブな人生を送るための10の原則を紹介しています。他人の影響を避けるのではなく受け入れることがコツという話しです。授業とタイトルにありますが、ハウトゥではないです。具体的な絵の書き方や作り方はありません。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4788908050/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4788908050&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=47e9d53875ff40cc9e2403e9dbcfe686&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4788908050&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4788908050&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&gt;アーティストのように盗め&lt;/h2&gt;
&lt;p&gt;アイデアはすでにあるものの組み合わせであり、バレていないだけですべて真似である。と言うような考えから始まります。それを理解した上で、周りをよく観察し使えそうなものを集め記録していきます。&lt;/p&gt;
&lt;p&gt;真似するところからクリエイティブは始まるので、その大切さを前向きに捉えている印象です。真似するにしても以下のような敬意を払う心構えが書かれており、参考にするといいと思います。&lt;/p&gt;
&lt;h3&gt;良い盗み方&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;li&gt;リミックス&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;悪い盗み方&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作品を汚す&lt;/li&gt;
&lt;li&gt;表面だけかすめ取る&lt;/li&gt;
&lt;li&gt;1人から盗む&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;h2&gt;クリエイティブに生きるためのアドバイス&lt;/h2&gt;
&lt;p&gt;著者はアートを仕事にしているのですが、結構現実的な目線を持っています。すでにあるものからアイデアは生まれるということもそうですが、周りの人との付き合い方や何を優先するべきかということも触れられています。生活のアドバイスなんかもあるのでクリエイティブ以外のところでも意外と参考になります。&lt;/p&gt;
&lt;p&gt;自分の読みたいと思う本を描く、聞きたいと思うものを作るということが創作の始まりで、知っていることを書いても意味が薄くなってしまいます。知っていることではなく、好きなことをアウトプットすることが重要で、それが自分の作るべきものなのだそうです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;真似する、ということを前向きに捉えている内容でした。練習のために真似することには大いに意味があり、敬意を持って盗むことで、自分の道具として使うことが出来ます。&lt;/p&gt;
&lt;p&gt;具体的に何をするとアウトなのか、といったことは触れられていませんが、心構えであったりこうすべきであるということが書かれています。誰かの作品を参考にして何かを作りたいと思ったときなんかは一度読んでみるといいと思います。&lt;/p&gt;
&lt;p&gt;クリエイティブでいるためには、常に周りから得られる情報に気を配り、気になったものや良いと思ったことをしっかり覚えておくことが重要です。そのことを著者は盗むという表現を使っているようです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[グーグルアドセンスのPINコードが届いた]]></title><description><![CDATA[先日グーグルからPINコードを送るので確認してくださいという旨の表示がありました。
何日か経過してそれが無事に届いたので、その情報です。 PINコードとは グーグルアドセンスの報酬がある程度蓄積されると送られます。
これに記載されているPIN…]]></description><link>https://honmushi.com/2019/05/09/pin-code/</link><guid isPermaLink="false">https://honmushi.com/2019/05/09/pin-code/</guid><pubDate>Thu, 09 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;先日グーグルからPINコードを送るので確認してくださいという旨の表示がありました。
何日か経過してそれが無事に届いたので、その情報です。&lt;/p&gt;
&lt;h2&gt;PINコードとは&lt;/h2&gt;
&lt;p&gt;グーグルアドセンスの報酬がある程度蓄積されると送られます。
これに記載されているPINコードをアドセンスの管理画面で入力することで、本人確認を行い報酬を受け取れるようになります。ですので、この工程をやるまでは報酬を受け取ることは出来ません。&lt;/p&gt;
&lt;p&gt;簡単なレターパックのような形で登録している住所に届きます。住所とかの情報を正しく設定しておきましょう。もしも引っ越しとかしたようでしたら気をつけましょう。
このPINコードは本人確認のための用途です。特定のアカウントに対してすでに紐付けられています。ですので、万が一他人の住所に届いたとしても、アドセンスのアカウントにログインできませんので意味はありません。悪用されることも無いと思います。&lt;/p&gt;
&lt;h2&gt;PINコードが届くまで&lt;/h2&gt;
&lt;p&gt;まず、アドセンスの管理画面に住所確認のためのPINコードを送ったという旨のお知らせが表示されました。
2週間から4週間位で届くという記載がありました。&lt;/p&gt;
&lt;p&gt;私もゴールデンウィークの直前にこの表示がでて、実際にPINコードが届いたのは連休明けでしたので、ほぼ2週間で届いたことになります。&lt;/p&gt;
&lt;h2&gt;PINコードを入力する&lt;/h2&gt;
&lt;p&gt;手紙の端を切り取って中を開くと6桁の数字が記載されています。この数値をアドセンス管理画面の入力画面に入力します。3回間違えると広告の配信が止められてしまうそうですので気をつけましょう。&lt;/p&gt;
&lt;p&gt;入力するとしれっとお知らせが消えました。特に完了画面とかは無かったので、ちょっと心配になりましたが問題ないようです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;実際に報酬を受け取るためには、お支払基準額に到達する必要があるのでまだ少し先のようです。引き続きがんばります。&lt;/p&gt;
&lt;p&gt;PINコードがなかなか届かなくてそわそわする人もいると思うのですが、気長に待ちましょう。2週間は結構長く感じましたし、場合によっては4週間とかかかっている人もいるようです。その間も報酬はちゃんと蓄積されているので、心配する必要はありません。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[装丁家の頭の中を覗く『本の顔』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/05/08/honnokao/</link><guid isPermaLink="false">https://honmushi.com/2019/05/08/honnokao/</guid><pubDate>Wed, 08 May 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4875863780/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4875863780&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=89146515780386b257b1ea4103d33774&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4875863780&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4875863780&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&gt;本ができるまで&lt;/h2&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;p&gt;本文のレイアウト・文字組みも装丁家の仕事です。
本文組によって実際に読むときの印象は大きく変わります。本の表紙より中面の方が、読者が向き合う時間は長いはずです。本の厚さや大きさでカバーの容量も変わってくるので、本文組から先に設計します。「手に取りやすい」「疲れない」「伝わりやすい」の三要素が基準となっています。読んでいて疲れる本は内容だけでなく、文字組みなんかにも原因があるのかもしれません。外国の本を日本語に訳したもので、たまにすごく疲れる本があります。それなんかまさにこれが原因なのかもしれないです。&lt;/p&gt;
&lt;h3&gt;カバーの制作&lt;/h3&gt;
&lt;p&gt;レイアウトを数パターン作成し、編集と相談します。デザインが決まれば、カバー・帯と表紙・扉を準に設計します。用紙や加工を選択して予算を計算。そのあといよいよ印刷所へ入稿して色校正を進めます。何度かやり取りをしつつ、意図したものが出来上がるように入稿データを修正します。&lt;/p&gt;
&lt;h2&gt;文字によるタイトル&lt;/h2&gt;
&lt;p&gt;書体選びでは、硬い内容は明朝、強いイメージならゴシック、愉快なものはオリジナル書体などのイメージがあります。この辺はWebデザインなんかも同じですね。とても勉強になります。読者の年齢層が高い場合は縦組み、落ち着きや風格が出ます。若い読者向けや翻訳書は横組にして、新しさを表現します。&lt;/p&gt;
&lt;p&gt;文字案は大きく分けて3種類あり、作りたいイメージや表情によって使い分けます。作例もしっかり見ていればこれらのパターンを利用していることがわかります。常に利用できるパターンを用意しておくこと、それを応用してデザイン案を提案することの意味がわかった気がします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;作り文字&lt;/p&gt;
&lt;p&gt;切ったり貼ったりして素材を加工した文字のこと、個性や意外性を持たせて強い印象を与えることが出来ます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;描き文字&lt;/p&gt;
&lt;p&gt;筆やペンで手書きしたもの。絵やタイトルだけで表現するときにも表情が出せます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;活字&lt;/p&gt;
&lt;p&gt;印刷文字で、オーソドックスな印象です。誠実さや堅実さ普遍性が表現出来ます。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;イラストによる想像&lt;/h2&gt;
&lt;p&gt;イラストは上手下手や大小よりも、読者の想像力を喚起させ、内容を想像させることが大切です。イラストが作る雰囲気をよく考えます。イラストレータに依頼するときも、その人が書くイラストの個性を見る、より明確な個性であればそれに委ねることができるのでお気に入りのようです。&lt;/p&gt;
&lt;p&gt;イラスト案には4種類のパターンがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;線画&lt;/p&gt;
&lt;p&gt;線で書いた絵。色面が弱くなりがちですが、ワンポイントに良い。画材の印象などで表情が変わりおもしろい。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ペイント&lt;/p&gt;
&lt;p&gt;絵の具で書いたもの。大きなイメージになるのでさりげない表現ができると良さそう。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;デジタル&lt;/p&gt;
&lt;p&gt;デジタルイラスト。無機質な質感や並列・反復など。透過なども表現出来ます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;立体&lt;/p&gt;
&lt;p&gt;造形したものを撮影したもの。物としての存在感がでる。光の当て方でも印象が変わる。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;色による印象&lt;/h2&gt;
&lt;p&gt;対象となる性別や年齢によって、印象を変えて合わせていく。普段の生活の中に色の選び方のヒントは隠されており、身の回りのものを参考にして作るのが一番わかり易いそうです。
色の組み合わせや隣接したときの効果などは、普段から記録しておくと良いです。見つけたものは写真に取ったりして記憶しておき、自分のお気に入りのパターンを増やしておくとデザインで役に立ちます。&lt;/p&gt;
&lt;h2&gt;写真による情報&lt;/h2&gt;
&lt;p&gt;写真は日常的に目にしている風景なのでありふれたものである印象を与えることもあります。さらに情報量も多くなってしまうこともあります。むき出しの写真ではなく、ちょっと曖昧さを残したような写真が優れていることもあるそうです。&lt;/p&gt;
&lt;p&gt;写真案では以下のパターンが用いられます。海外の文学作品か日本の作品か、でも大きく選び方が変わるそうです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;モノ&lt;/p&gt;
&lt;p&gt;内容を想像させるような写真を選べるかというところが難しそうです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;人物&lt;/p&gt;
&lt;p&gt;著者本人の顔など。部位や後ろ姿を用いることで物語を想像させることも出来ます。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&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&gt;おわりに&lt;/h2&gt;
&lt;p&gt;装丁のデザインを行ううえでの実践的なパターンを知ることが出来ました。山ほどある装丁のデザインですが、この本で得た知識で分類してみるのもいいと思いました。似たパータンの装丁で集めてみると、なにか面白い発見があるかもしれません。&lt;/p&gt;
&lt;p&gt;本の顔となる装丁について基礎的な知識を得ることができ、ますます興味を持ちました。ターゲットと伝えたいことをしっかりイメージして取り組むことが、装丁を始めとするデザインの基本なのかなと思います。言うほど簡単では無いのでしょうが、どこかで活かせたらいいなと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[忙しいときの料理『本当にうまいスパゲッティの作り方100』]]></title><description><![CDATA[ホテルニューオータニが監修したスパゲッティのレシピが10…]]></description><link>https://honmushi.com/2019/05/07/umai-pasuta/</link><guid isPermaLink="false">https://honmushi.com/2019/05/07/umai-pasuta/</guid><pubDate>Tue, 07 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ホテルニューオータニが監修したスパゲッティのレシピが100通り載っています。
いつものスパゲッティが究極的に旨くなるそうです。&lt;/p&gt;
&lt;p&gt;パスタは保存もできお手軽に作れるので、めんどくさい時ややる気のでない時のご飯にちょうどいいです。具だくさんにすればそこそこ美味しいものにはなるのですが、せっかく作るからにはこだわって美味しいものを作れるようになりたいです。&lt;/p&gt;
&lt;p&gt;タイトルにあるように「スパゲッティ」の作り方なので、麺状のパスタの料理に限られます。一人暮らしなら、大抵パスタはスパゲッティでしょう。貝殻とかリボン型のやつはあまり使わないと勝手に思っています。皆さんはいかがでしょうか。&lt;/p&gt;
&lt;p&gt;親子丼とかパスタとかチャーハンとか、簡単にできる料理を美味しく作れるとなんかかっこいいです。こだわって作るカレーとか麻婆豆腐とかが美味しいのはもちろんですが、手抜きのように思える料理が美味しいととても心強いです。&lt;/p&gt;
&lt;p&gt;この本では100通りにも及ぶパスタのレシピに加え、パスタの茹で方・盛り付け方など基本となる部分についても記載されています。今までとりあえずで作っていた方におすすめです。基礎的な知識がしっかり身につき、美味しく作れるようになるでしょう。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4802200013/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4802200013&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=1e5d265bc1e72dbc95994ea0dd5b48a6&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4802200013&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4802200013&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&gt;いろんなパスタのレシピが掲載&lt;/h2&gt;
&lt;p&gt;100通りも掲載されているのでとても作りきれません。どれも美味しそうなものばかりです。簡単なペペロンチーノもあれば、ウニなんかを使った高級で濃厚なものも載っています。全部写真付きなので見ているだけでもお腹が空いてくる本です。&lt;/p&gt;
&lt;h2&gt;スパゲッティの基本&lt;/h2&gt;
&lt;p&gt;本に書かれていたスパゲッティの作り方のコツを紹介します。
スパゲッティづくりには手際の良さが重要で、段取りをしっかり把握しておくことがコツです。&lt;/p&gt;
&lt;h3&gt;ソースを先に作り始める&lt;/h3&gt;
&lt;p&gt;麺を茹でるよりも先にソースの調理を初めておき、出来たらそのままおいておくといいです。麺と絡める直前に温め直すことも出来ますし、落ち着いて料理が出来ます。何より麺を茹ですぎることがないように注意しましょう。&lt;/p&gt;
&lt;h3&gt;食べる瞬間がアルデンテを目指す&lt;/h3&gt;
&lt;p&gt;水1リットルに対して塩は大さじ二杯入れます。結構入れているイメージですが、これくらい塩味がついている方が美味しいです。茹で加減の確認として麺だけで食べたときに、塩っ気がしっかりするくらいの味です。&lt;/p&gt;
&lt;p&gt;標準の茹で時間より1〜2分短く茹でて、麺と絡めて温め直す際に、残りの1〜2分を使うイメージです。少し硬めで湯から取り出します。ちょうど食べる時間にアルデンテの状態を迎えられるようにします。&lt;/p&gt;
&lt;h2&gt;私が考えるちょっとした料理のコツ&lt;/h2&gt;
&lt;p&gt;以下は私が思う料理のコツです。楽するための段取りとか工夫なのですが、パスタを作る上では美味しく作ることにつながると思います。&lt;/p&gt;
&lt;h3&gt;材料は予め準備する&lt;/h3&gt;
&lt;p&gt;塩や醤油などの調味料は最初に全部測って、小皿などに分けておくといいです。フライパンで炒めながらあれこれやると忙しいですし、色んな所が汚れます。予めしっかり測って用意しましょう。
野菜とかも切り分けておきます。火にかけながら色々やると、ズバリ効率が悪いです。料理は下ごしらえが大切って何処かで聞いたのですが、それです。準備をしっかりすることが、美味しい料理への近道です。&lt;/p&gt;
&lt;h3&gt;トングが必要&lt;/h3&gt;
&lt;p&gt;パスタに限ってですが、トングが入ります。菜箸では麺を持ち上げられないと考えたほうがいいです。茹で上がったら一度ザルで湯切りするのがいいそうですが、それでもトングを使ったほうがいいです。パスタ用のつかむ道具もありそうですが、他のことにも使えるので先端がゴムになっているトングがあると捗ります。&lt;/p&gt;
&lt;h3&gt;フライパンはすぐ洗う&lt;/h3&gt;
&lt;p&gt;私が鉄製のフライパンを使っているのでそうしないといけないのですが、料理が終わったらすぐいにフライパンを洗います。食べる前に必ず洗います。暖かいうちに洗ったほうが油汚れも落ちますし快適です。
鍋とかも全部そうですが、食べる前に洗っておいたほうが食後の「洗い物めんどくさい」を軽減できます。フライパン洗うぐらいでは料理は冷めません。&lt;/p&gt;
&lt;h3&gt;IHは掃除が簡単&lt;/h3&gt;
&lt;p&gt;最近引っ越してコンロがIHになりました。ガスのほうが火の加減とかが便利だとは思うのですが、特にIHでも問題ないです。大きく便利になったこととして、ガス料金かからないことと掃除がラクなことが挙げられます。掃除に関しては一面をさっと拭き取るだけでいいのでとても快適です。料理する度にこまめに掃除するのが一番良いです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;パスタは特に麺を茹でながら、ソースや具を作るので平行作業になります。段取りが大事になってくるので調理がおもしろいです。片付けとかも並行してできるようになると、それはもうかなりの料理上手と言えるでしょう。始めてやるときは台所がぐちゃぐちゃになりますが、慣れるとスッキリ料理ができるようになり、味はともかく上達した感を得られます。&lt;/p&gt;
&lt;p&gt;ちなみに、私はよくパスタを作るのですが、どうしても盛り付けだけはうまく出来ません。具だくさんすぎるのが一番の問題のようですが、ついつい具だくさんパスタを作ってしまいます。お腹いっぱいになるので。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[出版している本屋も面白そう『安西水丸さん、デザインを教えてください！』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/05/07/mizumaru-design/</link><guid isPermaLink="false">https://honmushi.com/2019/05/07/mizumaru-design/</guid><pubDate>Tue, 07 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;安西水丸さんという方が作られた装幀を紹介して、そのデザインや作成時の思想を辿っていく本です。&lt;/p&gt;
&lt;p&gt;装幀というのは独自のデザイン領域と思います。しかし、配置や文字などデザインの基礎的な要素も多く、一定の制約の中で情報を伝えるという点では、他のデザインと共通する点は多いと思います。個人的に最近興味のあるジャンルです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4990914600/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4990914600&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=705ab22fc640275a08f6b7ae29b818f1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4990914600&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4990914600&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&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;h2&gt;装幀についてのちょっとした学び&lt;/h2&gt;
&lt;p&gt;装幀の目的・効果として、人の目を引き、タイトルや著者に視線を誘導することがあるようです。他にも本の内容をイメージさせるような装幀なんかもあります。ページを思わずめくってしまうというのも良い装幀なのかもしれません。本の世界観や雰囲気なんかも表現できます。挿絵とかのイメージが近いのかもしれませんが、それともまた異なるようです。本棚にある本も意識しながら眺めてみようと思いました。&lt;/p&gt;
&lt;p&gt;装幀という言葉の漢字には4つ種類があります。装幀・装丁・装釘・装訂です。どれも意味は同じようですが、正しいのはどれなのかはちょっと難しい問題のようでした。人によって違うようです。この本では「装幀」でした。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;この本を出版された株式会社Hotchkissではちょっと変わった本屋も経営しています。
書店兼ギャラリーの「Books under Hotchkiss」というところです。金沢の21世紀美術館のそばにあり、二階はギャラリー、一階は二階に展示した作品の作者のおすすめ本が置かれています。
作者のアウトプットとインプットを両方鑑賞できるような場所のようです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://booksunderhotchkiss.com/about/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;books under hotchkiss&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;この本も、そのギャラリーに安西水丸さんの作品を展示する際の取り組みの一貫として執筆されているようでした。&lt;/p&gt;
&lt;p&gt;この本読むまでこんな面白そうな本屋があることを知りませんでした。今度行ってみようと思います。
本屋で本と出会うのとは逆に、本で本屋と出会いました。思いがけない出会いでした。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[経営者になったら読みたい本『HARD THINGS』]]></title><description><![CDATA[スタートアップのCEO…]]></description><link>https://honmushi.com/2019/05/01/hard-thing/</link><guid isPermaLink="false">https://honmushi.com/2019/05/01/hard-thing/</guid><pubDate>Wed, 01 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;スタートアップの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;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4822250857/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4822250857&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=0f66a3450b3f5049b4db19c233960975&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4822250857&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4822250857&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&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&gt;こんな人におすすめ&lt;/h2&gt;
&lt;p&gt;経営者になったぞ！でも大変過ぎてどうすればいいかわからない！という人におすすめです。会社の経営を行う人にのみ共感できるような難しい悩みが満載で、共感をしながら勇気をもらえると思います。&lt;/p&gt;
&lt;p&gt;読む限りではスタートアップ的な事業の経営者のイメージでした。もしかすると誰しもが、こうなる可能性は持っていると思いますので読んでおいて記憶においておくといいです。経営者を目指していない人でも、こんな世界もあるのかと抽斗を広げることが出来て良いです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;流石に読むのが早かったようです。経営者特有の問題について書かれているので、いざそのときになったら活用しようと思います。&lt;/p&gt;
&lt;p&gt;この知識を使っていろいろな場面に応用できたらいいのですが、あまりそういった使い方はできなさそうでした。難しいことについての考え方や対応法と思って本を開いたのですがちょっと違いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[手帳は人生を変えるツール『まずは、書いてみる』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/26/kaitemiru/</link><guid isPermaLink="false">https://honmushi.com/2019/04/26/kaitemiru/</guid><pubDate>Fri, 26 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4040687388/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4040687388&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=96347b04717c2417996b6b2fe0a37099&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4040687388&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4040687388&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&gt;手帳のイラスト&lt;/h2&gt;
&lt;p&gt;スケジュールの中にちょっとかわいいイラストが書かれていると、おしゃれに感じますよね。あれをやりたいと思ったことはあるのですが、絵心が足りず出来た試しがありません。なんかぐちゃぐちゃってなりますし、書き込むスペースも亡くなってしまいます。&lt;/p&gt;
&lt;p&gt;著者のオススメとしては簡単な顔のパターンを覚えて、それを使いまわすそうです。目と口が5種類ずつ、眉が4種類を使いこなすことで、さまざまな表情が表現できるため書き込むハードルもぐっと下がります。5×5×4で100通りの顔が使えます、そう考えると便利そうです。&lt;/p&gt;
&lt;p&gt;他にもシールを使ったりするアドバイスもありました。手帳を楽しく使えるようになるアドバイスがたくさん書かれています。&lt;/p&gt;
&lt;h2&gt;一日の振り返りを書く&lt;/h2&gt;
&lt;p&gt;日記を書いたこともあるのですが、やはり続きませんでした。みんなやったことあるのではないでしょうか。私は三日坊主の文字通り3日でやらなくなったことがあります。最初はやる気が溢れているのですが、やってみるとめんどくさくなりますよね。続けられる人はすごいと思います。&lt;/p&gt;
&lt;p&gt;そこで著者は「4行日記」をおすすめしています。書きたいだけ書くのではなく、4行に絞って書く日記です。それぞれの行には意味があり、「事実」「気づき」「教訓」「宣言」の行になっており、その日あったことをそれらに当てはめて記録するそうです。
4行ならなんだか続けられるような気がしますし、しっかり改善したいことややりたいことなど未来のことも書かれているので成長できそうです。&lt;/p&gt;
&lt;h2&gt;2時間あったらしたいことリスト&lt;/h2&gt;
&lt;p&gt;将来の目標などを書いておくことで、常にそれを意識できるようになり達成に近づくことができる、というような話もありますが、なかなか見かえることが出来なかったりします。&lt;/p&gt;
&lt;p&gt;著者ももちろん夢や目標を書くことをおすすめしていますが、それに加えて「2時間合ったらしたいことリスト」というものをおすすめしてます。
その名前の通りで、ちょっとした空き時間があればやりたいことを書いておいて、実際に空き時間が出来たときにそれを見て取り組むものです。&lt;/p&gt;
&lt;p&gt;意外と「あれいつかやろう」とおもったことは忘れてしまいがちです。気づくとスマホ見たりしていないでしょうか。小さなスキマ時間を無駄にしないために、常にやりたいことタスクリストを作って持ち歩くことで時間を有効に活用できます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;手帳を有効に活用する参考になる本でした。実際の手帳の写真もふんだんに掲載されていますので、まねして書くと自分の手帳もおしゃれで使いやすくなると思います。&lt;/p&gt;
&lt;p&gt;手帳はとても便利なので積極的に使いたいです。スマホでも十分に事足りるという人もいると思いますが、手書きの手帳ならではの良さやできることがあります。久しぶりに手帳を使って色々書き込もうかなと思いました。とりあえず手帳とペンを常に持ち歩くように心がけることから初めます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[装丁って面白そう『絵と言葉の一研究』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/25/etokotoba/</link><guid isPermaLink="false">https://honmushi.com/2019/04/25/etokotoba/</guid><pubDate>Thu, 25 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4568505070/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4568505070&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=1a89d3466f53bf7c1a895f306ed9eb6e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4568505070&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4568505070&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&gt;データとインフォメーション&lt;/h2&gt;
&lt;p&gt;インフォグラフィックを使ってデータを紹介する仕事において、情報を「データ」と「インフォメーション」に分けているそうです。データはただの事実、インフォメーションは意味を持ったデータです。
実際に目の前に存在する「空」がデータで、それを見て言った「悲しげな空だなあ」という言葉がインフォメーション。ということだそうです。&lt;/p&gt;
&lt;p&gt;初めてインフォグラフィックを用いたグラフのデザインを作成した際の、いくつかの案なども書いてあるので参考になる部分でした。&lt;/p&gt;
&lt;h2&gt;本と装丁&lt;/h2&gt;
&lt;p&gt;仕事で行っている装丁の考え方を紹介しています。過去の仕事をただ紹介するのではなく、新しい本に対して自分用に装丁を行いながら紹介しています。「千利休 無言の前衛」という本を題材に選んでいます。&lt;/p&gt;
&lt;p&gt;たくさんの装丁パターンを実際に作成しており、その数は31個。どれも実際の本として作ったものの写真が載っており、それらしくなっていておもしろいです。本屋さんにおいてあったらつい手にとってしまいそうです。&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;自分ではやらなさそう&lt;/li&gt;
&lt;li&gt;装丁が内容に影響しない&lt;/li&gt;
&lt;li&gt;初めての装丁&lt;br&gt;
など&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ブックレビュー&lt;/h2&gt;
&lt;p&gt;後半には本の紹介が載っています。7冊紹介されていますが、ジャンルもバラバラで面白そうな本ばかりです。
エンジニアには有名なオープンソースに関しての本「伽藍とバザール」なんかも紹介されており、色んな本に興味を持たれているようです。ここで紹介されていた本を私も読んでみたいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;本を通してデザインや言葉、絵に関する考え方など、寄藤文平さんの頭の中が少し垣間見えるように感じます。
「わかりやすく伝える」ことがどういうことなのか、深く考えられておりとても関心する内容でした。わかりやすいことの意味や価値について、言葉にして紹介されているのですっと理解出来たように思います。&lt;/p&gt;
&lt;p&gt;久しぶりに読みたくなったので、他の寄藤文平さんの本も読もうと思います。
自分用の装丁って面白そうでした。連休にちょっとやってみようかなと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ミルクのための本『ミルク世紀』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/25/milk-century/</link><guid isPermaLink="false">https://honmushi.com/2019/04/25/milk-century/</guid><pubDate>Thu, 25 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/456850435X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=456850435X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=d3c2c48f95bb13925deaf3fc215dc490&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=456850435X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=456850435X&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&gt;ミルクの基礎知識&lt;/h2&gt;
&lt;p&gt;普段飲んでいるミルクはどうやって作られているのか。どんな栄養があるのかと言ったことを紹介しています。牛乳が白い理由や牛乳に含まれる栄養のことなど、本当に基礎的なことが改めて理解できます。&lt;/p&gt;
&lt;p&gt;何気なく飲んでいる牛乳ですが、意外と知らないことが多いです。牛乳に限ったことではないのですが、こうして成り立ちや製造工程などを調べるとおもしろいことがたくさんありますね。&lt;/p&gt;
&lt;h2&gt;牛乳いじり&lt;/h2&gt;
&lt;p&gt;いちごミルクやカフェオレなど牛乳に何かを混ぜることで美味しくなるという事実を元に、さまざまな組み合わせを試そうという取り組みの紹介です。いくつも牛乳を使ったドリンクのレシピが紹介されますが、中にはハズレのものもあります。面白そうなので私もやってみたいですが、中には勇気のいるものもありました。ドリンクバーでやってしまう、あの感じに似ているんだと思います。&lt;/p&gt;
&lt;h2&gt;ミルクレシピ&lt;/h2&gt;
&lt;p&gt;今度は料理のレシピです。こっちは結構真面目な内容で、ちゃんと美味しいものを紹介しています。しかも、栄養面などを考慮しており、「こんな体調のときにおすすめ！」という紹介がされているのでわかりやすいです。牛乳の使いみちに困ったときとかにもおすすめです。&lt;/p&gt;
&lt;p&gt;牛乳を飲むと気持ちがホッとする。そんな効果を再確認できるようなコーナーになっています。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;牛乳は栄養満点、美味しいですし私もよく飲みます。この本ではそんな牛乳の基礎知識を紹介しているので、更に牛乳に詳しくなれました。牛乳飲もうかなと思いますし、きっと牧場にいって牛さんに会いたいなとも感じると思います。&lt;/p&gt;
&lt;p&gt;インフォグラフィックを使うことで、牛乳に関する情報や知識が面白く、わかりやすくなっているので、読書が苦手な方でも読めると思おいます。&lt;/p&gt;
&lt;p&gt;牛乳いじりのところの失敗レシピもおもしろいので読んでほしいです。積極的に挑戦して美味しいものも美味しくないものも紹介しており、おもしろい取り組みだと思います。多分本当に美味しくなかったんだと想像できるようなレシピが満載です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[光と構図についての学び『写真構図の教科書』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/24/kouzunotext/</link><guid isPermaLink="false">https://honmushi.com/2019/04/24/kouzunotext/</guid><pubDate>Wed, 24 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4844363336/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4844363336&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6469b01950c84fbbbc2819ae7f85c8a9&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4844363336&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4844363336&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&gt;光の基礎知識&lt;/h2&gt;
&lt;h3&gt;光の向き&lt;/h3&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;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;p&gt;被写体を中心にする日の丸構図。背景がシンプルな時は主役が明確になって良いそうです。&lt;/p&gt;
&lt;p&gt;画面の中心のラインを意識する二分割構図。三分割構図より、画面全体に目を向ける効果があります。
主題と副題に分けるイメージで画面を二分割します。対比効果が生まれるので、色や明暗などもうまく対比するような構図を目指せると良いようです。&lt;/p&gt;
&lt;p&gt;そして三分割構図。印象的な方を2にして、副題を1にします。ちょうど線の交点の部分に主役を設置すると印象が良くなります。バランスの良い構図になるので迷ったらこれが良さそうです。&lt;/p&gt;
&lt;p&gt;三角構図。三角形のラインを意識して写真に収めます。V字ですかね、これがカメラのレンズの性能にもよると思いますが、できるとかっこいいと思います。広角レンズなんかを使わないと、なかなか出来ないのかなと感じました。&lt;/p&gt;
&lt;p&gt;大きな斜めのラインを意識することで斜線構図となります。対角線を意識してラインを設置することで安定感や奥行きがでます。二分割構図にもつながることになりますね。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;実際に写真を撮ってみないと身につかないと思います。これからあったかい季節にもなりますので積極的にやってみようと思います。お手本としてたくさんの写真が掲載されていましたので、その写真を真似て撮るのもいいかなと思いました。&lt;/p&gt;
&lt;p&gt;どんな光や構図で、どんな印象の写真になるのかといった知識は理解出来たかなと思います。でも、いい写真が撮れるかどうかはまた別のようです。がんばります。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[『ITエンジニアの英語術 最強の教科書』を読んで英語のコツを学んだ]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/23/it-eng/</link><guid isPermaLink="false">https://honmushi.com/2019/04/23/it-eng/</guid><pubDate>Tue, 23 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;これから世界で活躍するエンジニアに必要な英語についての学習記録です。&lt;/p&gt;
&lt;p&gt;ここではプログラミングで使う英語ではなく、外国人とのコミュニケーションに用いる英語がテーマです。
プログラミングの関数や変数の命名について悩んでいる方には全く参考になりませんので、別の記事を読んでください。&lt;/p&gt;
&lt;h2&gt;書籍の紹介&lt;/h2&gt;
&lt;p&gt;『ITエンジニアエンジニアの英語術 最強の教科書』という本を参考にしました。アメリカのマイクロソフトのPMの方が書いた本です。&lt;/p&gt;
&lt;p&gt;正しさよりもスピードが命であり、チャットを始めとするスピーディーなやり取りこそITエンジニアの英語の肝であるそうです。&lt;/p&gt;
&lt;p&gt;本もチャットでのやり取りを通して伝え方や訪ね方を学びます。実際の会話では直接役には立たないかもしれませんが、外国の方とチャットで意志の疎通ができれば、エンジニアとして働く上では最初の一歩として十分なようです。無理して会話できる状態を目指さずに、まずはチャットでやり取りができるようになるところから始めるのが良さそうです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4046022515/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4046022515&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=9cb5fefd8f48af6645e2e6012a15df80&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4046022515&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4046022515&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;h2&gt;5秒チャットで会話力も上昇する&lt;/h2&gt;
&lt;p&gt;結論、英語力がつくと短い文章で的確に伝えることができるようになります。ですので、短い文章で伝えるチャットをマスターすることで会話力も同じくマスターされるということですね。
そうなのかな？とも思いますが、なんにしろエンジニア的には会話よりもまずはチャットの方が使う機会多いかもしれません。sluckとかchatworkとかでしょうか。私は経験がありませんが、外国人の同僚とかがいるようなグローバルな会社になると普通なのかもしれません。&lt;/p&gt;
&lt;h2&gt;英語は短くする&lt;/h2&gt;
&lt;p&gt;「I have a question」で始めます。may I ask you？みたいな丁寧さは不要です。最初に要件を簡潔に伝えましょう。&lt;/p&gt;
&lt;p&gt;日本語でいうならば、「先日の〇〇の□□の件について質問が〜」ではなく、「質問があります！」と最初に言い切るんですね。実際ITエンジニアのチャット会話は質問とその回答が多いそうで、この基本を覚えておくとスピーディに進められるので良さそうです。&lt;/p&gt;
&lt;h2&gt;英語は分割する&lt;/h2&gt;
&lt;p&gt;言いたいことは一度に一つにします。&lt;/p&gt;
&lt;p&gt;「Can you send me your PowerPoint file?」&lt;br&gt;
「You took notes」&lt;br&gt;
「I want to look at the feedback」&lt;br&gt;
のように一文ずつに分けます。まとめて一文にも出来ますが、難しくなってしまうので、積極的に分割したほうがいいです。これについては日本語も同じですね。一度に運びすぎないことは常に気をつけるべきかと思います。&lt;/p&gt;
&lt;p&gt;この方がよりチャットぽいですが、実際の会話もなんだかんだこんな感じだそうです。テンポも良いですし、話すように書くことが出来ます。&lt;/p&gt;
&lt;h2&gt;英語は言い換える&lt;/h2&gt;
&lt;p&gt;簡単な英語で言えるように言い換えることが大切です。英語での表現や単語がわからない場面は多く、そんなときは言える言葉に言い換えて少しでも伝えられるようにしましょう。&lt;/p&gt;
&lt;p&gt;主語と目的語を入れ変えたり、名詞を「溶かす」、それでどうなるか？を考えるなどのコツがあります。&lt;/p&gt;
&lt;p&gt;「The data won’t fit in one row」このデータは一行に収まらない&lt;br&gt;
「One row can’t keep the data」&lt;br&gt;
のように言い換えることが出来ます。ちょうどいい動詞が思いつかない場合などは、こうして入れ替えることで簡単な単語を使って表現できる可能性があります。&lt;/p&gt;
&lt;h2&gt;英語は質問する&lt;/h2&gt;
&lt;p&gt;ITエンジニアの英語の会話力は質問力が7割だそうです。最初のうちは周りの会話についていけず防戦一方ですが、質問で積極的に切り込んでいくことで自分の意見を主張するチャンスになります。&lt;/p&gt;
&lt;p&gt;ここで5W1Hが役に立ちます。基本のパターンとして、これを使いこなして細かい部分を修正すれば大概の場合は対応できそうです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;言っていることがわからない「What」&lt;/li&gt;
&lt;li&gt;理由を聞く場合は「Why」&lt;/li&gt;
&lt;li&gt;人を聞くなら「Who」&lt;/li&gt;
&lt;li&gt;場所を尋ねるときは「Where」&lt;/li&gt;
&lt;li&gt;幅広く使われる「How」&lt;/li&gt;
&lt;li&gt;どれなのかを聞くための「Which」&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;英語は短縮する&lt;/h2&gt;
&lt;p&gt;さまざまな短縮語があるようです。ITエンジニアエンジニア業界でも特有のものが多いらしく、中には海外のオープンソースのドキュメントなんかで目にするものもあります。ほとんど知らないものばかりでした。いざというときにかっこ悪い思いをしないように、ぜひ覚えておきたいです。&lt;/p&gt;
&lt;p&gt;単語や文章を短くしたもの&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;prod 「Production」本番環境&lt;/li&gt;
&lt;li&gt;repro 「reproduce」再現する&lt;/li&gt;
&lt;li&gt;dupe 「Duplicate」重複&lt;/li&gt;
&lt;li&gt;admin 「administrator」管理者&lt;/li&gt;
&lt;li&gt;app 「application」&lt;/li&gt;
&lt;li&gt;doc 「document」&lt;/li&gt;
&lt;li&gt;FAQ 「Frequently asked question」よくある質問&lt;/li&gt;
&lt;li&gt;EOD 「End of day」今日中に&lt;/li&gt;
&lt;li&gt;EOL 「End of life」保証期間の終わりやプロセスの終わりまで&lt;/li&gt;
&lt;li&gt;ETA 「Estimated time of arrival」作業の完了見込み時間、いつまでにできる？&lt;/li&gt;
&lt;li&gt;FTE 「Full-time employees」正規社員&lt;/li&gt;
&lt;li&gt;POR 「plan of record」コミットした計画&lt;/li&gt;
&lt;li&gt;SME 「subject matter expert」その分野の専門家&lt;/li&gt;
&lt;li&gt;TBD 「To be determined」これから決めるもの、未定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;チャットでつかわれるもの&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;yt? 「Are you there？」今いる？&lt;/li&gt;
&lt;li&gt;? 「I hove a question」&lt;/li&gt;
&lt;li&gt;qq? 「I hove a quick question」&lt;/li&gt;
&lt;li&gt;k 「OK」&lt;/li&gt;
&lt;li&gt;ic 「I see」わかりました&lt;/li&gt;
&lt;li&gt;oic 「Oh,I see」&lt;/li&gt;
&lt;li&gt;yep カジュアルなyes&lt;/li&gt;
&lt;li&gt;thx 「Thanks」&lt;/li&gt;
&lt;li&gt;np 「No problem」大丈夫&lt;/li&gt;
&lt;li&gt;u2 「You,too」あなたもね&lt;/li&gt;
&lt;li&gt;jk 「just kidding」冗談です&lt;/li&gt;
&lt;li&gt;lol 「laugh out loud」それはおもしろい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;頻出フレーズの短縮&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AFAIK 「As far as I know」私が知る限りでは&lt;/li&gt;
&lt;li&gt;AFAIC 「As far as I’m concerned」私に言わせてみれば&lt;/li&gt;
&lt;li&gt;ASAIAA 「As far as I’m aware」承知している限りでは&lt;/li&gt;
&lt;li&gt;AKA 「Also known as 〜」〜としても知られる&lt;/li&gt;
&lt;li&gt;ASAP 「As soon as possible」できるだけ早く&lt;/li&gt;
&lt;li&gt;NTIKO 「Not that I know of」私は知りませんが&lt;/li&gt;
&lt;li&gt;FWIW 「For what it’s worth」参考までに&lt;/li&gt;
&lt;li&gt;IIRC 「If I remember correctly」もし正しく記憶していれば&lt;/li&gt;
&lt;li&gt;IMO 「In my opinion」私の考えでは&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;英語で話すのは最初はやっぱり難しいと感じるのが普通だそうです。
話したいことを話すのではなく、話せることを探すという発想を持つことで、最低限のコミュニケーションを取ることが出来ます。
知らない単語や表現があるから諦めるのではなく、知っている単語や表現でなんとか伝えられないかということですね。多面的な捉え方をしておりとても興味を持ちました。&lt;/p&gt;
&lt;p&gt;日本語で伝えるための文章の基礎と似ている部分もありました。英語での表現を一から学び直すことで、伝わりやすい日本語も書けるようになるように感じています。これからITエンジニアも英語が必要な機会はどんどん増えてくるのではないかと思います。海外での仕事や外国人と一緒のプロジェクトなど出てくるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;そんなときに一歩先にいけるような英語力を身に着けておければ、活躍間違いないと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[あえて乱読に挑む『乱読のセレンディピティ』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/22/randoku/</link><guid isPermaLink="false">https://honmushi.com/2019/04/22/randoku/</guid><pubDate>Mon, 22 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4594069967/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4594069967&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=86daa1a9f10e68dbfb330777cd35109f&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4594069967&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4594069967&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&gt;おもしろい読書法&lt;/h2&gt;
&lt;p&gt;人の意見に頼らず、自分の判断で本を選んで、自分の金で購入する。そんな本が一番良いそうです。
誰が書いたかわからない書評などを参考にしないで、自分で気になった本を買いましょう。本を選ぶところからすでに読書は始まっているとも言えます。&lt;/p&gt;
&lt;p&gt;読み終えられなくてもいいので、どんどん読む。嫌な本だと思ったら、読んでも得られることは少ないので放り出してしまいましょう。乱読と言うとおり、闇雲に手当たりしだい読んでみるのが著者もおもしろいそうです。&lt;/p&gt;
&lt;h2&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;新聞や雑誌なども、いろいろなジャンルのいろいろな知識が詰まっています。ですのでベーターよみの練習になります。見出しをみて面白そうなk時を探し読み進んでいくことは乱読と言えるでしょう。&lt;/p&gt;
&lt;h2&gt;知的メタボリックシンドローム&lt;/h2&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;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></item><item><title><![CDATA[【実践技術書】Amazon Web Service 業務システム設計・移行ガイド]]></title><description><![CDATA[今度は業務システムをオンプレミスからAWSへ移行する際の、設計・構築・管理についてのノウハウ本です。
かなり詳細に書かれており、AWS…]]></description><link>https://honmushi.com/2019/04/18/aws-sekkei-ikou/</link><guid isPermaLink="false">https://honmushi.com/2019/04/18/aws-sekkei-ikou/</guid><pubDate>Fri, 19 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今度は業務システムをオンプレミスからAWSへ移行する際の、設計・構築・管理についてのノウハウ本です。
かなり詳細に書かれており、AWSに移行するに当たって必要な設計のことなども身につきます。
オンプレミスから移行する予定のシステムはまだまだ世の中にあると思いますので、有用な知識が得られます。&lt;/p&gt;
&lt;p&gt;AWSの基本的な概念や使い方も書かれていて親切な本です。システムをオンプレミスからクラウドへ移行するプロジェクトの前知識として読んでおくといいです。ネットワークやシステムの知識が多数出てくるので、ある程度開発・運用の経験が無いと難しい本かと思います。&lt;/p&gt;
&lt;p&gt;業務システムの移行をテーマにしているため、なかなか個人で体験することは無いかもしれません。プロジェクトなどの実践でやりながら憶えるのが一番いいと思いますが、イメージだけでもちゃんと作れておくと良いです。
設計・開発のフローや運用での要点などもわかりますので、幅広い知識が身につきます。本自体はかなり大きく分厚いですが、その分知識も豊富に詰まっています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4797392568/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4797392568&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=7a286eafa2ea313ff388195d1e750372&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4797392568&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4797392568&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&gt;AWSサービスの概要&lt;/h2&gt;
&lt;p&gt;AWSとオンプレミスの違いといったところから、料金体系、代表的なサービスの概要などの説明です。
広い範囲をカバーしていますので、ここをちゃんと読んでおけばAWSについて必要な基礎知識は十分身につくと思います。&lt;/p&gt;
&lt;h2&gt;全体設計&lt;/h2&gt;
&lt;p&gt;AWSサービスのでの管理の方針と、移行に当たっての作業計画を行います。
システムの構築に関するものと言うより、移行に関する実作業についてであったり、AWSで運用するに当たって変更が必要な各所への対応方法などを設定します。&lt;/p&gt;
&lt;p&gt;移行計画のよくあるフォーマットも紹介されているので、実務的にもすぐに役に立つと思います。これを参考に移行計画の草案としていけば効率よく進められそうです。&lt;/p&gt;
&lt;h2&gt;アカウント管理と権限付与&lt;/h2&gt;
&lt;p&gt;AWSでのアカウント周りは結構ややこしいのでしっかり理解しておきましょう。大規模で権限・役割が多くなるほどややこしくなりますので、少しづつ範囲を広げて理解していくのがいいです。&lt;/p&gt;
&lt;p&gt;アカウント管理のベストプラクティスが紹介されています。大変参考になる情報でした。セキュリティ的な問題もあるので、この部分はしっかり検討する必要があります。各所とのすり合わせ等大変になることが予測されますが、入念に取り組みましょう。権限を管理する際のコツなども載っており、AWSについてに限らず役に立ちそうな知識でした。&lt;/p&gt;
&lt;h2&gt;ネットワーク接続の設計・構築・維持管理&lt;/h2&gt;
&lt;p&gt;ルーティングやロードバランサなどの設計についての章です。オンプレミスでやっていたハード的な設定とは似ているようで結構異なるので、最初は混乱すると思います。ある程度のネットワーク知識があればすぐ理解できるのですが、それでも最初は試行錯誤になると思います。仕方ないです。&lt;/p&gt;
&lt;p&gt;問題を調査・発見・解決するコツやパターンもある程度カバーされていますので、そういった知識を参考にして実装していくのがおすすめです。&lt;/p&gt;
&lt;h2&gt;システム設計とサービスの導入&lt;/h2&gt;
&lt;p&gt;いよいよサービスを利用したシステムの実装に入ります。DBの利用やキャッシュの利用など、AWSを使う上で切り離せない機能を利用していきます。もともとAWSについてを利用することになった目的があるはずなので、その部分について入念に確認しておきましょう。できるのであれば他の便利な機能も利用してみたいところですが、まずは優先度の高いものから着実にすすめていくようにしましょう。&lt;/p&gt;
&lt;p&gt;システム実装の構成パターンを紹介していますので、自分のプロジェクトで当てはまるか探しておきましょう。他のパターンも参考までに読んでおくと役に立つことがあると思います。&lt;/p&gt;
&lt;h2&gt;移行テクニック&lt;/h2&gt;
&lt;p&gt;データの移行に関する知識です。どれくらいの時間がかかるかなどの算出方法や、手順・方法が載っています。方法についてはいくつかのパターンが用意されていますので、予めどれでいくか検証しておけると良いです。&lt;/p&gt;
&lt;h2&gt;運用監視の設計・実施&lt;/h2&gt;
&lt;p&gt;システム監視の方法やコツの紹介です。CloudWatchを利用した方法を紹介しており、システム運用では間違いなく必要だと思います。AWSのサポートの説明や知識なども書いてあるため、いざというときのお問い合わせにも役に立つと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;システム移行の設計に関するものなので、機能の開発やプログラム等の内容は薄めです。ネットワークの設定やサーバの立ち上げ、管理方法など運用面での知識を多く身につけることができる本でした。&lt;/p&gt;
&lt;p&gt;システムのAWSへの移行はなかなか一筋縄ではいかないので、しっかり時間を取って検証やリハーサルを行うようにしましょう。さらに移行がうまく行った後も、問題が隠れて発生していないかしっかり監視できるような体制・準備をしておきましょう。思わぬところでうまくシステムが動いていなくて、後から問題が大きくなってしまうことが多いです。&lt;/p&gt;
&lt;p&gt;システムの運用では何でもそうだと思いますが、念入りな準備と移行後のサポートを心がけ、落ち着いて対応するようにすることが大切です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】Amazon Web Services パターン別構築・運用ガイド]]></title><description><![CDATA[AWSの基礎知識とAWSを利用したWEBサービスの構築例・手順をまとめた本です。 大きく分厚い本ですが、親切にわかりやすく書かれています。
基本的な概念の説明や料金体系のこと、よくある構成のサンプルなど、この本があればAWS…]]></description><link>https://honmushi.com/2019/04/18/aws-kouchiku-unyou/</link><guid isPermaLink="false">https://honmushi.com/2019/04/18/aws-kouchiku-unyou/</guid><pubDate>Thu, 18 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;AWSの基礎知識とAWSを利用したWEBサービスの構築例・手順をまとめた本です。&lt;/p&gt;
&lt;p&gt;大きく分厚い本ですが、親切にわかりやすく書かれています。
基本的な概念の説明や料金体系のこと、よくある構成のサンプルなど、この本があればAWSをの基本的な使い方は理解できると思います。もちろん各サービスごとに必要な要件は異なるので、全く同じ手順で何でもできるわけではありません。しかし、この本の内容を理解しておけば、AWSのよく使われる機能はカバーできている印象があります。&lt;/p&gt;
&lt;p&gt;作業の手順ではスクリーンショット付きで説明があるので迷わずに作業できると思います。基礎的なところから書かていますので、AWS初心者でも理解し使いこなせると思います。ただ、内容がぎっしり詰まっているので、一度に全部マスターするのは難しいです。必要なところに絞って順番に覚えていくか、概要だけ掴んで進めていくかしたほうがよいです。450ページ位あります。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4797392576/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4797392576&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=10ea4fb29d1b9f83151ba92c32f5af34&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4797392576&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4797392576&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&gt;AWSの基本&lt;/h2&gt;
&lt;p&gt;クラウドとは何か、オンプレミスとはといったところから始まり、AWSで利用できる各サービスの説明に至ります。サービスの全体像を解説した後は以下のサービスについて、細かい説明が書かれています。利用を検討している、何に使うものなのか知りたい場合はここから読んでおくと良いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;EBS&lt;/li&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;li&gt;RDS&lt;/li&gt;
&lt;li&gt;Elastic Beanstalk&lt;/li&gt;
&lt;li&gt;Elastic Cache&lt;/li&gt;
&lt;li&gt;SES&lt;/li&gt;
&lt;li&gt;SQS&lt;/li&gt;
&lt;li&gt;SNS&lt;/li&gt;
&lt;li&gt;Cloud Watch&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;AWSを利用する&lt;/h2&gt;
&lt;p&gt;アカウントの作り方から、実際の管理画面での操作方法まで丁寧に解説しています。
最初はかなりややこしいので、しっかり理解しておくと良いです。結構アカウント周りの設定で混乱することや、うまくいかないことは多い印象です。SDKやCLIの使いかたやインストール方法も書かれています。利用する必要があれば目を通しておきましょう。&lt;/p&gt;
&lt;p&gt;EC2やELBの起動の仕方や、秘密鍵の作り方なの手順もあります。AWS利用する上で間違いなく必要になると思いますので、覚えておきましょう。&lt;/p&gt;
&lt;h2&gt;パターン別構築例&lt;/h2&gt;
&lt;p&gt;WordPressを利用した動的サイトの立ち上げ・S3上に静的サイトの立ち上げなど、いくつかのパターンを実際に起動させて配信します。
DNSの設定やCDNの利用、Auto Scalingの設定方法など実際に利用できる応用的な部分についても取り上げられていますので、大いに参考になると思います。&lt;/p&gt;
&lt;p&gt;バッチサーバとしての利用、メールサーバの起動などちょっとした用途で使う場合のパターンもあり、かゆいところに手が届くような印象です。このようなオプション的な用途でもAWSはよく使われるので、できるようになっておくと心強いです。&lt;/p&gt;
&lt;h2&gt;AWSのセキュリティ&lt;/h2&gt;
&lt;p&gt;IAMの設定方法など、セキュリティ関連の知識です。暗号化であったり、脆弱性の診断方法なども紹介されています。
AWS上でよくある外部攻撃の例や知識も載っており、運用でも多いに役に立つ知識です。オンプレミスでも十分に参考になります。&lt;/p&gt;
&lt;h2&gt;管理と運用&lt;/h2&gt;
&lt;p&gt;システム監視の項目です。運用、ログ、アラートなど、実務的な運用で必要な監視の設定方法が理解できると思います。ここについては実務で学んだほうがいいと思います。システムの規模や可用性などさまざまな要件によって左右される仕様です。少なくとも概念だけは理解しておくようにしましょう。&lt;/p&gt;
&lt;p&gt;データのバックアップなどの方法もあります。システム運用の知識や基礎的な概念は流石にこの本だけでは足りないですので、他の本も参考にしましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;かなり分厚く内容も満載ですが、読み終わるといろんなことができるようになっています。WEBシステムをAWSで動かす際に必要な基本的なものはすべてこの本で取り上げられていますので、基本的には困ることはないと思います。&lt;/p&gt;
&lt;p&gt;もちろんバージョンアップなどが行われて、管理画面が変わったりすることはあると思いますが、基礎的な意味や仕組みの部分も学べているので、すぐに対応できると思います。
色違いの似た本もあるのでそちらも読んでみようと思います。
AWSは大きいシステムから小さいシステムまで利用できますが、設定とか機能が多すぎてややこしく捉えがちです。このような本でまとまった知識を得ることで、足がかりとして使い始めていくことが出来ます。
実装や運用の段階では、また未経験の問題と出会うことがあると思います。実際にAWSはを使用して体験することが一番早い勉強です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[紙の本から感じるインタラクティブ体験『指を置く』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/18/yubi-oku/</link><guid isPermaLink="false">https://honmushi.com/2019/04/18/yubi-oku/</guid><pubDate>Thu, 18 Apr 2019 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;2次元の紙のグラフィックにもかかわらず、いろいろな見え方や解釈を表現できることはとても面白いと感じました。広告とかLPとかに応用できるのかもしれません。スマホ等のタッチ操作のインタラクティブ表現の参考にも良いと思います。そういう意味ではUI/UXの良い参考にもなりそうです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4568505607/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4568505607&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=463d81408bfb0ce06a1cceb8b4874fa6&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4568505607&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4568505607&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&gt;指の存在&lt;/h2&gt;
&lt;p&gt;グラフィックに対して指を置くことによる解釈の変化を通して、「人間にとっての指の存在や関係」といったものを解明していく試みだそうです。すなわち「私達にとって指とは何か」を解明するということです。&lt;/p&gt;
&lt;p&gt;なんだか難しそうですが、あまり深く考えずにとりあえず指をおいて見てみると良いです。いくつか進めていくうちにどうしてだろうか？とかなんでこう見えるようになったのだろう？とか疑問が湧いてきます。そうなったときに「指とは何か」ということについて、ゆっくり考えてみるといいです。&lt;/p&gt;
&lt;h2&gt;空間を読み解く指&lt;/h2&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;p&gt;指を置くことは、すなわち「自分ごととして扱う」ということだそうです。指を置くことで自分がその絵に影響を与えたかのような印象をもち、他人事であったものが自分ごとになってしまうそうです。自分が影響を与えた様に見えるため原因が自分にあると思い、絵への印象が変わってくるそうです。たしかにそんな印象を受けました。インタラクティブなUIはこういった感覚を利用しているんですね。あらためて学ぶととても勉強になります。&lt;/p&gt;
&lt;p&gt;指を置くまではただの絵だと感じていますが、指をおいた途端に自分の指が影響したような、絵の世界の中に作用したような感覚になります。もしくは「これは指がこういう力を与えたからこの形に変化したんだろう」とかとんでもない理論を頭の中で想像してしまいます。そんなはずがないのですが、実際に目でその状況を見ているのでありえないことを、すんなり受け入れてしまう様になっっているそうです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;指を置くことで、感触があるような、反作用を受けているような、そこに生き物がいるような感覚を味わうことが出来ます。指を置くと想像力が働き、ありもしないことや起きるはずのないことが起こしているような感覚になりました。インタラクティブな表現の勉強や参考にとても良い本でした。&lt;/p&gt;
&lt;p&gt;グラフィック作品集なのですが、指を置くことによる解釈への影響を意識して認知できる本でした。スマホの操作などで指を使った操作は当たり前になっており、タップに対するインタラクティブな表現も多様になっています。UIに関わる重要なものですので、どんな印象を与えるのか、違和感の原因は何なのかといったことを考えれるようになると役に立ちそうです。&lt;/p&gt;
&lt;p&gt;とてもわかりやすく、想像力を働かせるようなグラフィックが多かったので、子どもに読ませてみてもおもしろいと思います。経験が少ない子どもだと、大人とはまた異なる解釈をするのではないかと思います。多分スマホの操作でも、そういった解釈の差が生まれているかもしれないですね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】百年の愚行]]></title><description><![CDATA[20世紀に人間によってもたらされた、世界中の悲惨な現象の写真集です。
この百年の間に行われた、人間に活動による愚行としか呼ぶことが出来ない現実を振り返ることが出来ます。 10…]]></description><link>https://honmushi.com/2019/04/17/hyakunen/</link><guid isPermaLink="false">https://honmushi.com/2019/04/17/hyakunen/</guid><pubDate>Wed, 17 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;20世紀に人間によってもたらされた、世界中の悲惨な現象の写真集です。
この百年の間に行われた、人間に活動による愚行としか呼ぶことが出来ない現実を振り返ることが出来ます。&lt;/p&gt;
&lt;p&gt;100枚くらいの写真が乗っていますが、気分の悪くなるようなものもあります。読むのに勇気がいるかもしれませんが、どれも世界で起きている事実であり、今も解決されていないものもあります。
絶句してしまうような写真がたくさん載っており、こんなことが起きているのかこんなひどい状態になるのかということが身にしみます。&lt;/p&gt;
&lt;p&gt;昔のことだったり遠い外国のことではありますが、人間という種が引き起こした変化であることは間違いありません。もちろん日本の写真も含まれており、学校で習った知識もいくつか出てきます。
ちょうど時代の転換期である今、一度振り返って見るのもいいのではないかと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4901818007/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4901818007&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=425dc3bef58bef0b9cb531ac58c10363&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4901818007&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4901818007&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&gt;10個のジャンルに分けて紹介&lt;/h2&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;p&gt;世界中の問題をニュースなんかで取り上げますが、流れていってしまうため気づくと忘れています。こうして本として残っていることによって、いつまでも忘れずに振り返ることができるのかなと思いました。
21世紀が終わったときにもぜひ作って欲しいです。どんな写真が並ぶのでしょうか。&lt;/p&gt;
&lt;p&gt;人口がどれだけ増えたとか、数がどれだけ減ったとか、数値ではぱっと理解できない問題もあると思います。
人間良くわからないことは考えないように出来ているようなので、他人事にしてしまいがちです。特に心配しなくても生活に支障は無いことは確かです。ですが、何かできることは無いだろうかと一人ひとりが考えてみることも、そんな愚行を防ぐために必要なことなのではないかと思います。&lt;/p&gt;
&lt;p&gt;写真によって状況を知ることができ、より当事者意識を持って考せさせられる良い本だと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】サイエンスの発想法]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/17/uesugi-kougi/</link><guid isPermaLink="false">https://honmushi.com/2019/04/17/uesugi-kougi/</guid><pubDate>Wed, 17 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4396614918/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4396614918&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=64fab5ce34e9035d88418a86027625fe&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4396614918&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4396614918&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&gt;科学の合間に&lt;/h2&gt;
&lt;p&gt;遺伝子の構造やタンパク質についてなど科学の授業を進めていくのですが、その合間には研究に役立つサイエンスの発想法が出てきます。これが結構面白く、シャキで活躍するために役に立つものばかりです。&lt;/p&gt;
&lt;h3&gt;発想の定石、SCAMPER法&lt;/h3&gt;
&lt;p&gt;アイデアを出すための７つのチェックリスト、物事をこのチェックリストに当てはめながら観察することで、新たなアイデアをひらめくのではないかということです。逆にこの方法を当てはめれば、世の中のさまざまなアイデアを分解することも可能だということです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Substitute&lt;br&gt;
取り替える&lt;/li&gt;
&lt;li&gt;Combine&lt;br&gt;
組み合わせる&lt;/li&gt;
&lt;li&gt;Adapt&lt;br&gt;
適用する&lt;/li&gt;
&lt;li&gt;Modify、Magnify、Minify&lt;br&gt;
変化・拡大・縮小する&lt;/li&gt;
&lt;li&gt;Put to other uses&lt;br&gt;
他に利用する&lt;/li&gt;
&lt;li&gt;Eliminate&lt;br&gt;
除く&lt;/li&gt;
&lt;li&gt;Reverse、Rearrange&lt;br&gt;
逆にする、順番を変える&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ユニークさを生む体験&lt;/h3&gt;
&lt;p&gt;ユニークなアイデアをつくることは研究者にとって大切なことです。大抵のアイデアはすでに誰かが考えついているものであり、それらを交わしてアイデアを生み出すのはとてもむずかしいものです。&lt;/p&gt;
&lt;p&gt;ユニークさを生むのは「体験」が重要らしく、それが個人的なものであればより役に立つそうです。講義では積極的に体験をしようということや、体験を研究やアイデアに活かそうということ、そして五感でしっかりと観察しようといったことを教えてくれます。&lt;/p&gt;
&lt;h3&gt;アイデアを実行する難しさ&lt;/h3&gt;
&lt;p&gt;アイデアは思いついても実際に行わなければ意味がありません。ちょっとした発見などに対して、自分もわかっていたとか、やれば出来たとかいう人がいますが、実際にそれを試すことに意味があります。
「そんなのありか！」と感じるものこそ、解決への近道だったりします。自分の中で勝手にルールを決めて狭い思考をしてしまわないように、気をつけるように教えています。&lt;/p&gt;
&lt;p&gt;アイデアを思いついてそのままにしておくのではなく、実際にやってみよう、やってみたらどうなるのかと言うところまで進めることがサイエンスです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;京都のローカルネタもちょっと入っています。知っているとおもしろいです。科学の講義なので難しい話ももちろんありますが、ところどころ面白い話が混じっているので最後まで読み進められるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;とても面白そうな講義だなと思います。学生のときにこのような講義が合ったら、科学に興味が持てそうですよね。できるなら高校や中学くらいで受けてみたいでもありますが、さすがに難しいでしょうか。&lt;/p&gt;
&lt;p&gt;アイデアを出すときの参考にもなりますので、とてもいい勉強になりました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[書籍PRの仕事感を読む『進む、書籍PR!  たくさんの人に読んでほしい本があります』]]></title><description><![CDATA[書籍PRという肩書で仕事をしている奥村知花さんの仕事観についての本です。
どんな仕事なのかといったことから、書籍PR…]]></description><link>https://honmushi.com/2019/04/17/syoseki-pr/</link><guid isPermaLink="false">https://honmushi.com/2019/04/17/syoseki-pr/</guid><pubDate>Wed, 17 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;書籍PRという肩書で仕事をしている奥村知花さんの仕事観についての本です。
どんな仕事なのかといったことから、書籍PRの仕事をするまでの経緯、仕事のコツなどが書かれています。
書籍を紹介する仕事で活躍するのもすごいですし、そこから本を出版することになるというのもすごいですね。&lt;/p&gt;
&lt;p&gt;おすすめ本の紹介ではなく、書籍PRという仕事の紹介です。面白そうな仕事なので興味がわきます。
本好きで、本の宣伝てどんな感じなんだろうと思っている人は特におもしろいと思います。
実際の仕事での本の選び方なんかもあるので、読書の際の参考になるかもしれません。&lt;/p&gt;
&lt;p&gt;どんな仕事にも当てはまるような発見や知識が書かれていますので、「売り込む」ということに関心があるようでしたら参考になると思います。それほど長い文章でもないので、サクっと読めると思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4569837972/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4569837972&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=372859674a7f66822b03462d52ef643f&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4569837972&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4569837972&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&gt;本を売り込む仕事&lt;/h2&gt;
&lt;p&gt;本の存在をメディアに企画として売り込む仕事で、パブリシティと言うそうです。宣伝や広告など、夜に知らしめる活動をまとめてPRとしています。
本をどのように説明すれば面白そうに感じてもらえるのか、どんな本に興味を持ってくれそうなのか、誰に伝えればより届くのかといったことを考えて、試行錯誤するようです。&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;p&gt;他にも仕事でやらかしてしまったミスや、うまくいかないときの考え方など、日頃の仕事の役に立ちそうなポジティブな考え方を知ることも出来ます。失敗談もいくつもあり勉強になります。&lt;/p&gt;
&lt;p&gt;作者のFacebookページや、さまざまなメディアでのお仕事もインターネットで調べれば出てきます。興味を持った人は実際の企画についても、参考にしてみるといいと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;売り込む仕事をやるに当たって、チームや著者、メディアの方などを「巻き込む力」が大切なように感じました。積極的に関わってくれるような取り組みであったり、相手の文化を理解することなどが書かれています。
雑談の仕方や話の進め方など、商談や営業などにも役に立ちそうなスキルが詰まっており、学べることが多い本です。&lt;/p&gt;
&lt;p&gt;最初はうまくいかなかったというところから始まる本ですので、なんとなく身近に感じられる人も多いのではないでしょうか。失敗にめげずに取り組み、失敗から教訓を得て、どんどん成功に近づいていく過程が書かれています。&lt;/p&gt;
&lt;p&gt;これから何かを始めようとか、初めたばかりでうまくいかないことばかり、という人に勇気を与えてくれるような本だと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ネコパロディ集『名画の中のネコ: ネコ好きに贈るファンタジー』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/15/meiga-cat/</link><guid isPermaLink="false">https://honmushi.com/2019/04/15/meiga-cat/</guid><pubDate>Mon, 15 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4309255922/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4309255922&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=90404b7f48e277926be21c1b24ff2b33&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4309255922&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4309255922&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&gt;スーザン・ハーバートについて&lt;/h2&gt;
&lt;p&gt;作者のスーザン・ハーバートはイギリスの水彩画家で、さまざまな絵画や映画・オペラなどを題材にしたネコの作品を描いています。この本はその作品の中でも特に人気のものを集めた書籍のようです。他にも本が出版されているようなので読んでみたいと思います。&lt;/p&gt;
&lt;p&gt;絵画だけでなく、映画やオペラなども参考になっており、いろいろな芸術作品を見ていたのだと思います。映画については、だいぶ昔の作品が多く、最近の作品で猫の絵を描いたらどうなっていたんだろうかと思います。&lt;/p&gt;
&lt;h2&gt;絵画を真似して描くこと&lt;/h2&gt;
&lt;p&gt;スーザン・ハーバートは絵画を真似して描いていますが、とても上手です。人間の部分をうまくネコに置き換えて、背景となじませながら絵を描いています。
ネコも可愛いですし、人間の動きや立ち居振る舞い・表情などををネコの体や顔でうまく表現しています。元の絵の再現もかなりうまいのではないでしょうか。&lt;/p&gt;
&lt;p&gt;今にも喋りだしそうかつ動き出しそうなネコの絵は、もちろんパロディなのですが、なんだかオリジナルの作品のような特徴的な絵になっています。&lt;/p&gt;
&lt;h2&gt;びじゅチューンという番組&lt;/h2&gt;
&lt;p&gt;話がそれますが、NHKでやっている「びじゅチューン」という番組に個人的にハマっています。年末だったか年始だったかにまとめて放送されていたので、それを録画したものをゆっくり楽しんでいます。&lt;/p&gt;
&lt;p&gt;有名な美術作品などからインスピレーションを受けて、オリジナルの歌とアニメーションを作成するという作品です。歌に加えてアニメーションもついており見ていて楽しいです。作詞・作曲・アニメ・歌のすべてを井上涼という方が作品を作っており、独自の世界観があります。&lt;br&gt;
&lt;a href=&quot;https://twitter.com/kitsutsukijanai&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;twitterはこちら 井上涼&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;youtubeにNHKのチャンネルがあるので、そこで見ることが出来ます。&lt;br&gt;
&lt;a href=&quot;https://www.youtube.com/playlist?list=PLcynJ47QaWNuynFw5-uESyLHgHXxhKApj&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;youtube NHK びじゅチューンの動画&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「なんでこんなふうに見えたんだ」と思うようなの作品が多くついつい笑ってしまいます。着眼点というか捉え方というか目の付け所がクリエィティブでおもしろいです。歌やメロディについても、なんだか心地よい感じがします。これもついつい口ずさんでしまうようなものや、感情を揺さぶられるようなものもあります。&lt;/p&gt;
&lt;p&gt;TV版だと作者による解説があり、ためになる情報も多いです。元となった作品の背景や説明と、パロディして作った歌の説明になっています。更にコーラスをつけた編曲版？みたいなものもついており、より音楽としても楽しめるような演出になっています。自由な発想力が刺激されそうなので、学校の美術の時間にびじゅチューンを見るというのもおもしろいと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/B00R7QHNGY/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B00R7QHNGY&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6f6c12b522882bce09e3eb54d9eed652&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B00R7QHNGY&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=B00R7QHNGY&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;絵画を見るのもおもしろいのですが、正直私には絵画の良し悪しみたいなものはわかりません。&lt;/p&gt;
&lt;p&gt;このようなクリエイターによる、自分の印象で作ったアートを見ると、とてもユニークでおもしろいなと思います。子供の頃に持っていた想像力なんかが刺激されているのかもしれません。「絵画よくわからん」という人にも興味をもたせることができるというのはすごい作品だと思います。&lt;/p&gt;
&lt;p&gt;美術館に行って、これ好きだなーとかこれは嫌いだなーとかの感想を持つと思いますが、そういったものが大切なのでしょう。自分なりの解釈とか、好みとか。ネコだったらどうなるのだろうかとか、絵画全体がラーメンに見えるとか。
そこから何かアウトプットしたいと思うものがあれば、そういったものにこそ意味があるのかもしれません。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】失敗から学ぶ RDBの正しい歩き方]]></title><description><![CDATA[「失敗から学ぶ」というタイトルの通りで、RDB…]]></description><link>https://honmushi.com/2019/04/15/rdb-arukikata/</link><guid isPermaLink="false">https://honmushi.com/2019/04/15/rdb-arukikata/</guid><pubDate>Mon, 15 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「失敗から学ぶ」というタイトルの通りで、RDBの設計・構築の際のアンチパターンの紹介と解説になっています。&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;RDBの問題はある日を境に顕在化することが多く、しかもサービスを停止させるような大きな障害を引き起こします。設計や実装・日々の運用の中で、障害が発生しない・影響の少ない・すぐに検知できるといった、いざといったときの備えをできるようになっておきたいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4297104083/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4297104083&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=a220e10a46e95ba7e76ffe8bba09020c&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4297104083&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4297104083&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&gt;とりあえず削除フラグ&lt;/h2&gt;
&lt;p&gt;これはシステムで良く見ると思います。会員の削除とか、データの削除とかで作りがちなカラムです。&lt;/p&gt;
&lt;p&gt;できるのであれば削除フラグは作らない方が良いです。事実のみを保存することを意識して、物理削除した上で削除済みテーブルに移動する設計が望ましいです。すでにカラムがある場合は必要なデータをViewで定義しておくような対応を検討しましょう。&lt;/p&gt;
&lt;p&gt;削除フラグを設計することの問題として以下のことが考えられます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;削除済みデータが増えることでパフォーマンスが低下&lt;br&gt;
削除済みと未削除の2つの状態しか無いのであれば、カーディナリティが低いためインデックスの効果も薄いです。&lt;/li&gt;
&lt;li&gt;いろんなテーブルの削除フラグのチェックが必要&lt;br&gt;
ユーザーのみでなく、チームや記事やカテゴリーなど、すべての関連テーブルをJoinして削除フラグをチェックすることになるかもしれません。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;意味を含んだID&lt;/h2&gt;
&lt;p&gt;IDに「先頭の文字が1ならユーザー・9なら管理者」などの意味をもたせることは避けましょう。&lt;/p&gt;
&lt;p&gt;テーブルを分けて設計しましょう。データの属性によって入る値が変わるカラムやNULLが入るカラムが発生しないか確認しましょう。複数の目的でテーブルを使いまわさないように気をつけます。&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;1桁のみで表現出来なくなるかもしれない
その場合は大掛かりな修正が必要になるでしょう。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;バックアップ&lt;/h2&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;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;Joinコストが高まりパフォーマンスに影響がある&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;RDBで設計する上でありがちなアンチパターンが共有されており、とても役に立つ知識でした。確かに実務の上で良くあることばかりかなと思います。&lt;/p&gt;
&lt;p&gt;この本では、ありそうな依頼内容や開発者の気持ちなどが書かれており、「あるある」となるようなエピソードばかりです。技術的負債となって未来の自分が苦しい思いをしなくて済むように、しっかり意識して設計・運用に取り組めるようになりましょう。&lt;/p&gt;
&lt;p&gt;一人で開発していると、なかなかアンチパターンに気づかないこともあります。複数人でレビューするなど仕組みの面でも防げるような取り組みができるといいですね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】やりとげる力]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/11/yaritogeru/</link><guid isPermaLink="false">https://honmushi.com/2019/04/11/yaritogeru/</guid><pubDate>Thu, 11 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4480863826/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4480863826&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=70a0af6d5d9328261d014ef4c5daebb9&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4480863826&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4480863826&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&gt;レジスタンスという存在&lt;/h2&gt;
&lt;p&gt;やりとげることを邪魔しているのは自分の中の「レジスタンス」という存在です。
レジスタンスとは、創造的な活動をする際に障害となるすべての要素を指し、誰もが内面に抱えているものです。
レジスタンスはとても強く、いかなる時でも、とても強い力で負の方向に引っ張ってきます。眠ることもなければ、手加減もありません。恐れによってより強い力を持つようになり、自分の魂の成長に必要なものであればあるほど、強い意志で邪魔をしてきます。&lt;/p&gt;
&lt;p&gt;レジスタンスの持つ好きなもの・嫌うものなどについて紹介されています。これだ！という実態ではなく、性質を定義することで、レジスタンスを発見・観測できるようにしています。敵を知るために己を知ることも大切で、出来なかった理由やその時感じた気持ちなどを思い出すことになると思います。&lt;/p&gt;
&lt;h2&gt;プロ意識でやりとげる&lt;/h2&gt;
&lt;p&gt;自分なりの「プロ意識」を持つことで、レジスタンスに打ち勝つ心構えを手に入れることが出来ます。
レジスタンスが何よりも狡猾であることを知り、忍耐強く仕事をやり遂げます。どんな想定外のことが起きても、その場を支配することを心がけます。周りの影響に惑わされないようにしましょう。
レジスタンスは他者の意見に従うことを望んでおり、周りからの評価や発言に引きずられてしまいます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;なんとなくやりたいことを見つけて始めるけど、あまり続かずやめてしまう。忘れた頃にまた挑戦する、という経験がある人は多いと思います。&lt;/p&gt;
&lt;p&gt;この本を読み終える頃には、なぜやめたくなったのかということが言語化されており、何と戦わなければいけないのかがはっきりします。レジスタンスという、自分自身の中にあるものに打ち勝つことができれば、創作のコントロールを取り返すことが出来ます。&lt;/p&gt;
&lt;p&gt;仕事や創作活動のみでなく、日常生活でもより充実した生活を送れるようになるのではないでしょうか。そんな効果が期待できる本です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[レイアウト・色・フォント『デザインの授業』]]></title><description><![CDATA[デザインの構成術について学べる本です。「デザインを見る」ということに重きをおいています。
テクニックや基礎知識を…]]></description><link>https://honmushi.com/2019/04/10/design-jyugyo/</link><guid isPermaLink="false">https://honmushi.com/2019/04/10/design-jyugyo/</guid><pubDate>Wed, 10 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;デザインの構成術について学べる本です。「デザインを見る」ということに重きをおいています。
テクニックや基礎知識を1つずつ学んでいくのですが、全てに作例がついています。&lt;/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 target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/B01J773BZ2/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B01J773BZ2&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6c10e380ae2811638cab93c8a181f774&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B01J773BZ2&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=B01J773BZ2&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&gt;デザインの読み方&lt;/h2&gt;
&lt;p&gt;デザインする人の視点で世の中を見る。このことを意識してみます。
普段の生活で常にこのことを意識するのは難しいですが、デザインを好きになることがコツの1つとして紹介されていました。好奇心や興味といったものから始めるのは、悪くない選択のようですね。&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;p&gt;それぞれの章では、以下の3つテーマに分けて学んでいきます。
多数の実例を参照しながら、テクニックの説明を読んでいきます。図には線を引いたりポイントに印がしてあるので、「こういうところに注目すればいいのか」ということも理解できます。&lt;/p&gt;
&lt;h3&gt;レイアウトの構成術&lt;/h3&gt;
&lt;p&gt;西洋の歴史的なデザインを始め、日本の鳥獣戯画なども例にして紹介しています。対比であったり視線の流れの動かし方など、たtだ眺めているだけでは気づかないようなことを学びます。デザインの知識としては基礎の基礎ですが、これらのことに気づけるようになることがこの本の目的です。&lt;/p&gt;
&lt;p&gt;意図を持って要素を配置しましょう。サイコロを振って決めるようなデザインをすると、美しいものになりません。意図が細部まで行き届いた明快な構造を目指すことが重要です。&lt;/p&gt;
&lt;p&gt;写真の選び方にもいくつか考え方が乗っています。前後の瞬間を感じさせる写真を選ぶことで、静止画であるにもかかわらず躍動感のあるデザインに近づきます。&lt;/p&gt;
&lt;h3&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;白黒+1色でデザインするという取り組みも紹介されています。色の面積による見せ方の工夫であったり、色に持たせる役割をしっかり設計できるので、良い練習になるそうです。&lt;/p&gt;
&lt;h3&gt;タイポグラフィの構成術&lt;/h3&gt;
&lt;p&gt;多数あるフォントの関係を自分でマップ化してみます。そうすることで、それぞれのフォントの持つ特長が明確になり、デザインの際に理由や意図を持ってフォントを選べるようになります。&lt;/p&gt;
&lt;p&gt;まず、書体には筆跡をモデルに作られたものと、幾何学的な発想で作られたものがあります。一緒に配置する写真やイラストの要素との組み合わせを考慮すると良いです。&lt;/p&gt;
&lt;p&gt;他にもフォントを見るときには、文字の端の切り口・文字の幅・小文字の「x」の高さを見ると良いです。まとまりやクールさを重視するのか、勢いや元気良さを重視するのかといったことを決める要素になります。&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;/p&gt;
&lt;p&gt;「どういう意図があってこうしたのだろうか」ということがわかるようになれば、デザインの授業の成果だと思います。
良いデザインとは、細かいところまで全部に作り手の意図が感じらるものなのかなと感じました。&lt;/p&gt;
&lt;p&gt;「デザインを見る」ということに重点をおいた説明・内容になっています。読み終わった後はぜひそのことを思い返してさまざまなデザインに触れることができるようになると良いですね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】ハイコンセプト]]></title><description><![CDATA[「新しいことを考え出す人の時代」という副題の通りで、まさにそのような人になるために必要な…]]></description><link>https://honmushi.com/2019/04/09/high-concept/</link><guid isPermaLink="false">https://honmushi.com/2019/04/09/high-concept/</guid><pubDate>Tue, 09 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「新しいことを考え出す人の時代」という副題の通りで、まさにそのような人になるために必要な6つの感性をまなぶことができます。&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 target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4837956661/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4837956661&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=030c5072db05f64a49b00dba7fcd581d&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4837956661&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4837956661&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&gt;機能だけでなくデザイン&lt;/h2&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;オリジナルのものをつくります。DIYでも良いですしオーダーメイドでもよいです。自分は何が使いやすいのか・好きなのかといったことを見つめ直します。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;議論より物語&lt;/h2&gt;
&lt;p&gt;効果的な議論よりも、相手を納得させる物語を語りましょう。
情報の価値は変わっており、大抵のことは検索して知ることが出来ます。その時代で求められていることは、各個人の感情や物語に注目が移っています。&lt;/p&gt;
&lt;p&gt;小さな短編小説や、自分の歴史、すなわち自分史なんかをつくって見ると物語のトレーニングが出来ます。簡単にできるところでは自己紹介でもいいのではないでしょうか。スライドとかで作成してみるとよいです。&lt;/p&gt;
&lt;h2&gt;個別よりも全体のシンフォニー&lt;/h2&gt;
&lt;p&gt;バラバラなものをつなぎ合わせて、全体感をつくる人が求められます。
そんな中で、境界線を理解して超えることができる人や、新しい発明を起こせる人が活躍できるそうです。&lt;/p&gt;
&lt;h2&gt;論理ではなく共感&lt;/h2&gt;
&lt;p&gt;人々を動かせうものは論理ではなく感情です。そのことを理解して、必要な人間関係を気づくことを目指しましょう。
相手の感情を読み取り、共感することができるようになると、必ず自分にとってメリットになります。相手の感情に共感することは難しいことかもしれませんが、訓練すれば必ずできるようになります。メンタリストとかもそうですが、結構それらの情報は溢れているので一度見てみるといいです。&lt;/p&gt;
&lt;h2&gt;まじめだけでなく遊び心&lt;/h2&gt;
&lt;p&gt;コンセプトの時代ではオンとオフ両方のバランスが必要で、そのためにユーモアを磨くことに意味があります。笑いによって右脳が活性化し、ストレスも軽減されます。パフォーマンスが上がり、周りに人にも良い影響を与えることが出来ます。&lt;/p&gt;
&lt;h2&gt;モノよりも生きがい&lt;/h2&gt;
&lt;p&gt;物質的には十分に豊かな時代になりました。より幸せを感じられる生きがいにシフトした社会に適応できるようになりましょう。&lt;/p&gt;
&lt;p&gt;迷路を解いたりすることもいいですし、未来の自分を思い描くことなども効果があります。どんなことで生きがいを感じるでしょうか。一度見つめ直してみましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ここまで出てきた6つの感性は難しいなと感じるものばかりでした。これからの時代で活躍できるようにしっかりと磨いていきたいです。
やるべき取り組みの中には、普段の生活にユーモアを取り入れたり、気に入ったものを記録したりと、小さなところから初められるものが多いです。感情が動いたこと・動かしたことなどをメモして、後から見直せるように心がけるだけでも、だいぶ未来は変わってくるのでは無いでしょうか。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[話は盛られた方がおもしろい『「マコトよりウソ」の法則』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/09/makotoyoriuso/</link><guid isPermaLink="false">https://honmushi.com/2019/04/09/makotoyoriuso/</guid><pubDate>Tue, 09 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4865811184/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4865811184&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=476cdbc1b625cb3901cf3e8e0ee13379&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4865811184&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4865811184&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&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&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;h2&gt;作者の若い頃の話&lt;/h2&gt;
&lt;p&gt;就活生に向けた所感なども書いてあります。様々な考え方はあると思いますが、作者自身の経験等も書いてあるので参考になるかもしれません。流石に時代が違いすぎるので戦争のこととかは考慮しなくていいですが、自分のことのように感じられるとおもしろいと思います。&lt;/p&gt;
&lt;p&gt;論文を読むことよりもおしゃべりすることの良さであったり、二人よりも三人、同じ専攻よりも異なる分野の専攻で話すことなど、おもしろい会話ができるコツを教えてくれます。もしもそのような機会が身近にあるのであれば、積極的に顔を出してみるといいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;演じる人と見る人についての観点の違い、更には第3者やそれを見つめる第4者の存在についての考察でした。&lt;/p&gt;
&lt;p&gt;アウトサイダー的に見つめる人がいて始めて面白くなり、その見方が重要であるということが言いたかったのでしょうかね。&lt;/p&gt;
&lt;p&gt;さまざまな例や偉人の話などを用いてわかりやすく説明しているので、理解しやすい本でした。&lt;/p&gt;
&lt;p&gt;「マコト」はインサイダーで「ウソ」はアウトサイダーです。
両方の立場の人がいること、アウトサイダーによって語られる話しや歴史が面白くなり、後世に語り継がれていきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】お金2.0]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/08/okane-2/</link><guid isPermaLink="false">https://honmushi.com/2019/04/08/okane-2/</guid><pubDate>Mon, 08 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4344032152/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4344032152&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=e4cbb6eab0e28b666a7be82d8335c0f5&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4344032152&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4344032152&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&gt;お金の正体&lt;/h2&gt;
&lt;p&gt;ビットコインやSNSなどについての分析をしながら、お金・経済についての成り立ちや仕組みを解説しています。
共通の幻想を持つことや、寿命の設計など、普段の生活では意識できないような経済の基礎が詰まっており大変勉強になります。
仮想通貨などちょっと前から出てきた小難しい知識についても説明があるので、それらの勉強にもなります。よくわからずに利用している人は知識として身につけておくと心強いです。&lt;/p&gt;
&lt;p&gt;経済の仕組みは人間の脳の仕組みとも深く関わっています。報酬の設計などもそこから来ているようです。経済の仕組みは他の箇所でも用いられているようで、組織の運営など様々な要素に影響しています。
そもそもの経済の概念は自然の仕組みに近いものがあり、それらの知識を得ることでも経済学を学ぶ足がかりとなるそうです。&lt;/p&gt;
&lt;h2&gt;価値主義について&lt;/h2&gt;
&lt;p&gt;現代では資本主義の考える価値あるものと、私達が考える価値あるものがかけ離れきています。
資本主義では価値をお金で表すことが出来ますが、必ずしもお金だけが価値では無いということです。なんとなく考えたことはあるのではないでしょうか。お金が全て！でいいのだろうかという感じですね。もっと大切なものがこの世にはあるのでは！とか。&lt;/p&gt;
&lt;p&gt;別に世の中的には価値は無いけど集めたくなるものとか、やりたくなることとか。それぞれの人が異なる観点でものに価値を感じています。&lt;/p&gt;
&lt;p&gt;これからの世の中は可視化された「資本」ではなく、資本化される前の「価値」が中心になっていくそうです。例えばSNSに登録されている個人情報などがそうでしょうか。いいね数やフォロワー数などもそれに当たります。応援したいとか、この人のものだったら私も使いたいとか。いろいろあるようです。&lt;/p&gt;
&lt;p&gt;価値について一度考えてみると3つの要素に分解できます。有用性としての価値・内面的な価値・社会的な価値です。それぞれざっくりとは以下のようになります。今まで自分の行ってきた活動について、これらの観点で数値化してみると良いかもしれません。他にも世の中にあるもので、自分がよく使っているものについても同じく数値化してみると良いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有用性としての価値&lt;br&gt;
役に立つかという件店から考える価値、一般的なもので資本主義であってもこれが重要です。&lt;/li&gt;
&lt;li&gt;内面的な価値&lt;br&gt;
個人の感情に紐づく価値。ポジティブな感情を引き起こせるかどうかということが主な観点でしょう。&lt;/li&gt;
&lt;li&gt;社会的な価値&lt;br&gt;
社会に貢献し、全体の持続性を高めるようなことに価値があると言えます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらをしっかり抑えた上で、価値主義に移行していく社会で生き残る方法を考えていきます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;本の中では、「お金から開放される生き方」というテーマの章があります。いくつかのメッセージのようなものが書かれており、若者に対して考えさせる内容になっています。内面的な価値を見つめ直すこと、儲かることから情熱を傾けられることを探すことなど、いくつかアドバイスがあります。一番大切なのは、誰かに伝えられるくらいの熱量を持って取り組めることを探すべきだということです。&lt;/p&gt;
&lt;p&gt;そこに自分自身の価値があり、それを高めていくような仕事・勉強をしていくことが、これからの時代では重要になっていくでしょう。&lt;/p&gt;
&lt;p&gt;この本ではこれからの社会や宗教・価値についての考察などもあり、この本の通りになっていくのか楽しみでもあります。若者に向けての熱中できることの探し方なども載っているので、参考にしてみると良いです。
この本を読んでそのまま従わなくても、自分に取ってできるところだけとか、何年かかけて実現するとかでもいいと思います。これからの価値のあり方や自分の目指すところを考え直す、きっかけとして一読してみることをおすすめします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】メイキング・オブ・勉強の哲学]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/07/study-testu-making/</link><guid isPermaLink="false">https://honmushi.com/2019/04/07/study-testu-making/</guid><pubDate>Sun, 07 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前紹介した「勉強の哲学」という本の作成秘話みたいなものです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2019/03/14/study-tetsu/&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;/p&gt;
&lt;p&gt;以下私がオススメの部分について書いています。気になった方は「勉強の哲学」も合わせて読んでみることをおすすめします。とてもおもしろい本です。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4163907874/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4163907874&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=5554b15149777607967dc1a4fbc6f7d1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4163907874&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4163907874&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&gt;勉強のテクニック&lt;/h2&gt;
&lt;h3&gt;勉強のメタゲーム&lt;/h3&gt;
&lt;p&gt;複数のジャンルの勉強を並行して行うことで、多角的に物事を見れるようになります。そうしたある意味メタな視点が、より深い理解や発展につながるそうです。&lt;/p&gt;
&lt;p&gt;しかも、自分の享楽的な好奇心を元にして、メタなジャyンルを選択することにより、独自のメタゲームをつくることが出来ます。そこでは、他人との競争などは存在せず、自分自身の気の赴くままに勉強することになります。他人との競争に疲れることもなければ、上限やゴールもないのかもしれません。とてもおもしろい取り組みだと感じました。&lt;/p&gt;
&lt;h3&gt;複数の言語を学ぶ&lt;/h3&gt;
&lt;p&gt;慣れ親しんだ言語以外を学ぶことで、全く異なる環境に飛び込むこととなり、新しい経験ができるようになります。もっと言えば、古い言語、すなわち「失われた言語」などを学んでみるといいそうです。結構難しいそうですが、たしかにおもしろいかもしれません。&lt;/p&gt;
&lt;h2&gt;文学の勉強&lt;/h2&gt;
&lt;p&gt;文学の勉強には、感受性を豊かにするということの他にも、ある言語体型から別の言語体型に移動する際の移行可能性を鍛えるエクササイズになるのではないか。&lt;/p&gt;
&lt;p&gt;社会学には社会学の言語体型があり、他の学問を学ぶときにはそれを一度すてて、新しい学問の言語体型に飛び込むことになります。その時の受難な言語の切り替えや学習に、文学の勉強は役に立つのではないかと言うそうです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;全編通して哲学の用語や名前が出てくるので、難しい印象があります。しかし、メジャーなものも多く、調べていくとより理解が深まります。哲学に興味を持つための入門書としてもいいのではないでしょうか。引用の出典なども書いてありますし、この本から哲学を始めとする他の学問への興味をふくらませることができると、とてもいい勉強になるように思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】文書力の基本]]></title><description><![CDATA[わかりやすく伝えるための文章のコツを7…]]></description><link>https://honmushi.com/2019/04/06/bunsyou-kihon/</link><guid isPermaLink="false">https://honmushi.com/2019/04/06/bunsyou-kihon/</guid><pubDate>Sat, 06 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;わかりやすく伝えるための文章のコツを77のテクニックとして紹介している本です。&lt;/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 target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4534045883/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4534045883&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=c9ff94cafce62512ab3b005153d08960&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4534045883&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4534045883&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&gt;短く書く&lt;/h2&gt;
&lt;p&gt;文を短く区切ることを意識します。一つの文章で沢山の荷物を運ばないようなイメージです。
これはとても大切なテクニックで、この本でも最初に出てきます。これを意識するだけでかなり伝わりやすくなります。文書としては面白くなくなるということもあるのですが、伝える文章を書くためであればこの方がよいです。&lt;/p&gt;
&lt;p&gt;とりあえずこれだけ覚えておくのでもだいぶ違います。意識しないと文章が長くなりがちですが、わかりやすい文章は端的に短く言い切っていることがわかります。&lt;/p&gt;
&lt;h2&gt;因果関係をつかむ&lt;/h2&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;p&gt;日本語にありがちですが、最後まで読まないと結局何が言いたいのかわからないということがあります。
早めに言いたいことを登場させて、その後から補足をつけるようようにしましょう。&lt;/p&gt;
&lt;p&gt;特に主語については早めに登場させるように意識します。そのほうが読みても安心して読むことができ、わかりやすい文書になります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;一つ一つのテクニックに例文がついており、添削の例になっているので理解しやすいです。それが77個も詰まっており、身に付ければとても役に立つものばかりです。ぐんと読みやすい文章が書けるようになります。
全部を一度に身につけるのは難しいのですが、それでも学ぶ意味があります。簡単にできるものから順番に意識して身につけていきましょう。&lt;/p&gt;
&lt;p&gt;学生でも十分に役に立ちますが、どちらかと言うと社会人の方にこそ読んでほしいです。割と、基礎的な文章を書く機会は多く、このようなスキルは大事だと思います。新人研修とかでしっかりと身に着けておくのがおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ミニマリズムとはマーケティング耐性のことかもしれない『より少ない生き方』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/03/more-of-less/</link><guid isPermaLink="false">https://honmushi.com/2019/04/03/more-of-less/</guid><pubDate>Wed, 03 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4761272279/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4761272279&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6baa7d45aa5fb7b3a110655a51bcc0a4&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4761272279&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4761272279&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&gt;人生をシンプルにして本当に大切なことに集中できるようにする&lt;/h2&gt;
&lt;p&gt;物が増えると物に支配されたような状態になります。
ミニマリズムという考え方を取り入れることで、自由を手に入れることが出来ます。&lt;/p&gt;
&lt;p&gt;著者はミニマリズムのことを以下のように定義しています。
「一番大切にしているものを最優先にして、その障害になるものはすべて排除すること」&lt;/p&gt;
&lt;h3&gt;ものを手放すことで得られるメリット&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;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;
&lt;h2&gt;ミニマリズムにまつわるよくある誤解&lt;/h2&gt;
&lt;h3&gt;誤解1.ミニマリズムはすべてを捨てること&lt;/h3&gt;
&lt;p&gt;正しくは少ないもので暮らすことであると考えましょう。過剰に持ちすぎないように気をつければ良いです。&lt;/p&gt;
&lt;h3&gt;誤解2.ミニマリズムとは整理整頓である&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;li&gt;整理整頓をしても人生の大切な気付きには繋がらない&lt;/li&gt;
&lt;li&gt;整理整頓をしても人生に変化はおこらない&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;自分なりのミニマリズムのルールを持つ&lt;/h2&gt;
&lt;p&gt;自分の目的をベースに自分なりのミニマリズムを作りましょう。こうしなければならないというものはなく、自分にあったミニマリズムの形を探して、実践することが大切です。&lt;/p&gt;
&lt;h2&gt;消費社会の罠を知る&lt;/h2&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;p&gt;必要かどうかを正しく判断できるようになりましょう。まずはマーケティング戦略にどういったものがあるのかを知るところから初めます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ポイントカード&lt;br&gt;
消費者はポイント欲しさにいらないものを買ってしまう。&lt;/li&gt;
&lt;li&gt;小売店が発行するクレジットカード&lt;br&gt;
そのお店でお得になるクレジットカードを持っていると、買い物に2倍のお金を使ってしまうデータがあるそうです。さらに買い物の傾向などのデータも取得できるのでマーケティングがさらに協力になります。&lt;/li&gt;
&lt;li&gt;残りわずか&lt;br&gt;
タイムセールなどの煽り文句で間違った決断をさせようというものです。&lt;/li&gt;
&lt;li&gt;セール価格の値札&lt;br&gt;
消費者は商品の正しい価格はわかっていません。ですので、セールで安くなっている様に見せることで、お買い得だと信じ込ませることが出来ます。&lt;/li&gt;
&lt;li&gt;おとりの価格設定&lt;br&gt;
メニューの中に1つ2つくらい高い商品を混ぜておくことで、その他がお手頃の値段に見えるため買いやすくなります。&lt;/li&gt;
&lt;li&gt;サンプル配布&lt;br&gt;
買い物中に試食などをしてしまうと、人間の脳が「今は食事の時間だ」と勘違いしてしまい、本能的に食べ物を探してしまうそうです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらを知った上で、自分がついつい買ってしまう弱点を探すとよいです。消費の誘惑に打ち勝てるように己を磨きましょう。&lt;/p&gt;
&lt;h2&gt;自分にとっての十分を知る&lt;/h2&gt;
&lt;p&gt;十分の基準は人によって異なりさまざまな要素によって変動します。それを知るのは大変なことですが、探そうとしなければ見つかることはありません。
ものが少ないという状態を体験することで、自分にとってこれくらいあればいいのかという「十分」のしきい値を見つけることが出来ます。当たり前と思っていることを疑い、一度考え直して見ることによって、自分にとって本当に快適な量がわかります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ものを減らすことで豊かな生活を送れるというのがミニマリズムの概念です。&lt;/p&gt;
&lt;p&gt;ものへの執着を捨てることは難しいことですが、それによって大きな自由を手に入れることができるはずです。誰しも最初はやってみることが大切だと思います。ミニマリズムなんて自分には無理だと思っている人にこそ、一度挑戦してみてほしいです。そしてやっぱり無理だったと感じるとともに、「最低でもこれくらいは必要」という十分を見つけてほしいです。きっと今まで余分に持っていたものの量に驚くのではないかと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[生産性を向上するアドバイス『プロダクティブ・プログラマ』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/04/02/productive/</link><guid isPermaLink="false">https://honmushi.com/2019/04/02/productive/</guid><pubDate>Tue, 02 Apr 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873114020/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873114020&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=2487ef1783b483982669398dd5d1b1a7&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873114020&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873114020&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&gt;生産性を高めるために&lt;/h2&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;h3&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;それでも難しい場合はトラックパッドとかトラックボールとかをキーボードの手前においたり、Lenovoのトラックポイント（赤ポッチ）を検討すると良いです。それだけでもすごく捗ります。&lt;/p&gt;
&lt;h3&gt;クリップボードの拡張&lt;/h3&gt;
&lt;p&gt;クリップボードの履歴を再利用できるソフトをインストールしましょう。OSやバージョンなどによって利用できるものは異なりますが、「CLCL」とか「Clibor」とか「CopyQ」とかさまざまなものが存在しています。
「クリップボード拡張」で検索すればいっぱい出てきます。&lt;/p&gt;
&lt;p&gt;この機会にスマホにもインストールしておくと良いです。あまり使わないのですがスマホでもやっぱり便利です。&lt;/p&gt;
&lt;h3&gt;cdコマンドより便利なpushd・popd&lt;/h3&gt;
&lt;p&gt;コマンドラインでディレクトリを移動するコマンド「cd」ですが、もっと便利な「pushd」「popd」ものがあります。LinuxやMacではもちろん使えて、Windowsの場合はCygwin上などでは利用できます。コマンドプロンプトでは使えなかったと思います。&lt;/p&gt;
&lt;p&gt;pushdはカレントディレクトリの移動に加えて、カレントディレクトリをスタックに保存します。
作業が終わったらpopdを実行することでスタックに保存していたディレクトリに戻ることが出来ます。
スタック形式になっているので、「FILO」先入れ後出し形式です。すなわち、popdは最後に入れたディレクトリから順番に移動します。&lt;/p&gt;
&lt;h2&gt;集中&lt;/h2&gt;
&lt;h3&gt;findコマンド&lt;/h3&gt;
&lt;p&gt;ファイルを開くときには、findコマンドを利用できるようになるといいです。
ファイル管理はいつもややこしくなり、目的のファイルを探すのはかなり面倒になります。
普段から整理をしていても、なかなかうまく管理できないものです。&lt;/p&gt;
&lt;p&gt;ここではいっそfindと正規表現を使ったファイルの検索方法を学ぶことで、検索によってファイルアクセスを快適にする方法を学びます。&lt;/p&gt;
&lt;h3&gt;コマンドプロンプトのカスタマイズ&lt;/h3&gt;
&lt;p&gt;プログラミングを行う上でよく使うコマンドラインですが、Windowsでは設定をショートカットごとに保存出来ます。&lt;/p&gt;
&lt;p&gt;開くたびに、ウインドウを大きくしたり設定を変更したりしなくて済むように、カスタマイズを有効にします。カスタマイズ例都市tえ以下の提案がされています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;スクロールを無限にする&lt;br&gt;
デフォルトは300行なので、実行結果やエラーのログメッセージが最後まで確認できないときがあります。大きく増やしておきましょう&lt;/li&gt;
&lt;li&gt;横幅を最大にする&lt;br&gt;
横スクロールしながら使うのは面倒なので、最大にしましょう&lt;/li&gt;
&lt;li&gt;決まった位置にウインドウが開くようにする&lt;br&gt;
利用する内容ごとに異なる位置に開くようにすることで直感的に使いやすくなります。Vimは左上、Gitは右上とか。&lt;/li&gt;
&lt;li&gt;画面の文字や背景の色を変える&lt;br&gt;
利用する内容ごとに見た目を変えることでも直感的に使いやすくなります。&lt;/li&gt;
&lt;li&gt;簡易編集モードをオフにする&lt;br&gt;
オンになっていると、表示されている文字をコピーしようとして選択すると、プロセスが一時停止してしまいます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;モニターを複数使う&lt;/h3&gt;
&lt;p&gt;デュアルディスプレイです。今時の企業であれば之くらい対応してもらえると思います。
出来れば自宅でのプログラミング学習の際にも画面が2つあると良いです。お金はかかりますが間違いなく快適です。&lt;/p&gt;
&lt;p&gt;安いものもありますが、ちょっと値をはるものであれば縦向きにできるものとかあるので、色々探してみると良いです。&lt;/p&gt;
&lt;h2&gt;自動化&lt;/h2&gt;
&lt;h3&gt;ブラウザ操作をSeleniumに任せる&lt;/h3&gt;
&lt;p&gt;特にテストのときなどに活用しますが、普段のネットサーフィンでも利用できます。ブラウザでの操作を自動化してくれるので、休憩時のネットサーフィンとかも捗ります。同じことを何度もやっていることに気づいたら自動化出来ないか検討してみましょう。&lt;/p&gt;
&lt;h2&gt;正準化&lt;/h2&gt;
&lt;h3&gt;バージョン管理&lt;/h3&gt;
&lt;p&gt;必ず必要です。プログラミングをするに当たって、どんな小さなものでもバージョン管理は行いましょう。
ソフトの設定ファイルとか、メモとかもバージョン管理するのがいいです。Githubも無料でプライベートリポジトリが作れるようになったので、ガンガン使うといいです。&lt;/p&gt;
&lt;p&gt;バージョン管理するべきでないファイルも中にはあります。IDやパスなどが書かれたファイルが代表的でしょうか。それらもなくなると困るので、必ずバックアップは取っておきましょう。&lt;/p&gt;
&lt;h2&gt;テスト駆動設計&lt;/h2&gt;
&lt;p&gt;この本では触りの部分についてのみの紹介です。詳細な内容は他の書籍を参考にしましょう。
個人でも小さく始めることはできるので意識してみると良いです。&lt;/p&gt;
&lt;h2&gt;哲学&lt;/h2&gt;
&lt;p&gt;「本質的特性と偶発的特性」「オッカムの剃刀」「デメテルの掟」といった、昔の哲学から着想を得たプログラミング哲学が紹介されています。どれもためになるもので、目の前の問題で頭が一杯になってしまうのではなく、そこから学べることはないか・なぜ起きたのかといった観察・反省を行うことが重要です。次に起きた時、または次は起きないように学びを活かせるようになりましょう。&lt;/p&gt;
&lt;p&gt;これらの教訓の様に、自分なりの教訓を見つけ出してノウハウ化できるといいです。&lt;/p&gt;
&lt;h2&gt;理想のツール&lt;/h2&gt;
&lt;h3&gt;理想のテキストエディタ&lt;/h3&gt;
&lt;p&gt;プログラムを行う上で、自分に合ったツールを見つけることも大切です。やりたいことに合わせてさまざまなツールを使い分けましょう。&lt;/p&gt;
&lt;p&gt;この本では、例として以下のエディタに触れられていました。触ったことがないものがあればこの機会に使ってみることをおすすめします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vim&lt;/li&gt;
&lt;li&gt;Emacs&lt;/li&gt;
&lt;li&gt;JEdit&lt;/li&gt;
&lt;li&gt;TextMate&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;生産性を向上するためのさまざまなアドバイスが書いてある本です。どれも間違いなく参考になります。
もっと効率の良いやり方がないか意識することは大切ですが、忙しいときには忘れてしまいがちです。
ですので、少し仕事が落ち着いたとか少し余裕あるという時間を使って、このような本の内容を試してみるといいです。中にはあまり効果がないもの、合わないものもあると思いますが、そこからの新しい発見もきっとあるはずです。本や同僚からもらえるアドバイスを柔軟かつ積極的に試してみることも、生産性を上げるためのコツだと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[初心者におすすめ『Unity C# ふりがなブログラミング』]]></title><description><![CDATA[Unityの入門書です。C…]]></description><link>https://honmushi.com/2019/04/01/furigana-unity/</link><guid isPermaLink="false">https://honmushi.com/2019/04/01/furigana-unity/</guid><pubDate>Mon, 01 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Unityの入門書です。C#を使ったスクリプト作成についての解説になっています。&lt;/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 target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4295005576/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4295005576&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=9694b6b1d6a3d9e8c725a10f5af4069b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4295005576&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4295005576&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&gt;利用する環境&lt;/h2&gt;
&lt;p&gt;Windows または Macを用いて「Unity hab」と「Visual Studio」を使って学びます。
インストールの仕方も説明があるので、特に困ることはないと思います。
私はLinuxで進めましたが、それでも特に問題はありませんでした。&lt;/p&gt;
&lt;h2&gt;Unityをはじめるなら最初は2Dのゲームが良い&lt;/h2&gt;
&lt;p&gt;Unityでは3Dのゲームも作ることができますが、最初は2Dのゲームから初めましょう。&lt;/p&gt;
&lt;p&gt;3Dのゲームでは考慮するべきことも多くなるとともに、ゲームプレイ時の動作が想像しづらいです。3次元的な想像力がある・慣れているという人であれば簡単なのだと思いますが、最初のうちは難しいです。
基礎を学ぶつもりとして、無理せずに2Dゲームから初めることをおすすめします。&lt;/p&gt;
&lt;p&gt;素材の用意に関しても、2Dであればイラストソフトで簡単に作れてお手軽です。素材などの準備は簡単に済ませて、完成を目標として取り掛かることが重要です。&lt;/p&gt;
&lt;h2&gt;ソースコードの説明が詳しく書かれているチュートリアルを探そう&lt;/h2&gt;
&lt;p&gt;これまでいくつかのUnityチュートリアルをやってみましたが、わかりにくいものが多かったです。
ゲーム制作の流れはつかめるのですが、スクリプトの意味や使っているクラス・メソッドのことがあまり理解出来ませんでした。ソースコードにコメントが書かれていても、情報量には限りがあるのであまり本質的な理解は出来ないことが多かったです。&lt;/p&gt;
&lt;p&gt;コライダーや物理などゲーム制作の基礎知識がある、かつ、C#の型の指定方法や名前空間・クラスの基礎知識がある状態であれば、理解できるようなものが多かったです。&lt;/p&gt;
&lt;p&gt;この本では、それらがわからない状態でも理解できるような書き方・進め方になっていました。
スクリプトも必要なものしか無い簡潔なものになっていますし、難しいアルゴリズムなどは使いません。単純な繰り返しと条件分岐のみで作っているようなイメージです。&lt;/p&gt;
&lt;p&gt;上記の理由もあるので、Unityによるゲーム入門としてこの本はおすすめです。作成するサンプルゲームも可愛らしく、シンプルでした。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Unityを使ってのゲーム制作の入門書でした。C#のことも学べますし、Unityを使ったゲーム制作の取り掛かりとして、かなり親切でわかりやすいです。&lt;/p&gt;
&lt;p&gt;ただし、シーンの概念についてであったり、ゲームのビルドに関することは載っていません。簡単なゲームを作成して、UnityEditer上で実行するというところまでの学習になります。
シーンを複数持つゲームの作成や、フレームなどの時間の取扱、端末でのデバッグ・配布などに関しては他の書籍を参考にする必要があります。&lt;/p&gt;
&lt;p&gt;ゲーム制作は身近なジャンルで取り掛かりやすいので、こういったところからプログラミングに興味を持つ人が増えてくれたら嬉しいです。趣味としてどうでしょうか。私のおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】Unityによるモバイルゲーム開発]]></title><description><![CDATA[Unityを使ってのゲーム開発の入門書です。 Unityの基礎について学んだ後、実際にゲームを開発しながら使い方を習得できます。
ゲームそのものの制作が主な内容で、Unityのコミュニティの使い方・説明はないですし、ビルドの説明も特にありません。あくまでも、Unity…]]></description><link>https://honmushi.com/2019/03/29/unity-mobile/</link><guid isPermaLink="false">https://honmushi.com/2019/03/29/unity-mobile/</guid><pubDate>Fri, 29 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Unityを使ってのゲーム開発の入門書です。&lt;/p&gt;
&lt;p&gt;Unityの基礎について学んだ後、実際にゲームを開発しながら使い方を習得できます。
ゲームそのものの制作が主な内容で、Unityのコミュニティの使い方・説明はないですし、ビルドの説明も特にありません。あくまでも、Unityエディターでできる箇所に範囲が絞られています。&lt;/p&gt;
&lt;p&gt;スマホでプレイするモバイルゲームがテーマとなっていて、2Dと3Dのゲームを1つづつ作成します。
基本的な素材はダウンロードして使えますし、小難しいスクリプトはGithubから取得して使うことが出来ます。&lt;/p&gt;
&lt;p&gt;ゲーム作成については、基本的な操作や概念を説明しているので親切でした。サンプルとなるゲームも洋風なものですが参考になります。ただし、利用しているスクリプト等がUnityチュートリアルと比較して簡単なゲームです。
ですので、新しいゲームを考えたい場合は、ここから更に発展が必要になります。チュートリアルとかたくさんやってみるのがおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873118506/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873118506&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=5210373e16742543f20a4a4e70d22190&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873118506&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873118506&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&gt;Unityの基本&lt;/h2&gt;
&lt;p&gt;基本的なUnityの操作と、用語についての説明です。いくつも難しい要素が出てきます。ここだけ読んでも理解しにくいので、後のサンプルゲームの作成を進めながら都度読むのがおすすめです。&lt;/p&gt;
&lt;p&gt;サンプルゲームでは使わない要素や知識も存在しています。デバッグ用の設定など便利なものも多いので、「この本に書いてあったな」という記憶だけは残しておきましょう。&lt;/p&gt;
&lt;p&gt;巻末にはUnity Hubのことや、エディターのことも書いてあります。Unityのカスタマイズに関することも少し書かれているので、時間があれば読んでみるといいです。この辺に関してはやり方が色々あるので、ネットで情報を調べてみるのがいいと思いました。&lt;/p&gt;
&lt;h2&gt;ゲーム作成の練習&lt;/h2&gt;
&lt;p&gt;2Dの「井戸を降下して宝を拾って、入り口まで戻るゲーム」と、3Dの「シューティング」を作成します。
ボタンをタップして入力したり、端末を傾けて移動したりするようなゲームになります。&lt;/p&gt;
&lt;p&gt;どちらも、素材はダウンロードするURLが書かれているので、そちらからダウンロードして利用します。
ゲーム内に出てくるスクリプトもGithubのURLが書かれているので、そこからコピーしてくると良いです。&lt;/p&gt;
&lt;p&gt;サンプルゲームの作成は順序だって説明があり、作りながら要素を理解していくことになります。
スクリプトを書いたり、ドラッグでオブジェクトを紐付けたりと、さまざまな操作があるのでややこしくなりがちです。ただ、設定している部分の意味と対象となっているものを理解しながら進めれば難しくないと思います。&lt;/p&gt;
&lt;p&gt;C#のスクリプトの中身に関しては結構難しいです。他のチュートリアルと比べるとだいぶ簡潔な方だと思いますが、それでも慣れていないと難しいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;サンプルゲームが洋風なイメージであることが結構気になりましたが、特に躓くところはありませんでした。しっかり学べるいい本だと思います。最初にも書いてありますが、ビルドの仕方や必要な設定などについては触れられていません。あくまでもUnityを使ったゲームプログラミングの部分に重点をおいた内容になっています。
実際にビルドしてストアで公開肢体となったときは、ネットで調べて情報を見つけるか別の本を参考にしましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】Webサイトパフォーマンス 実践入門]]></title><description><![CDATA[高速なWeb…]]></description><link>https://honmushi.com/2019/03/28/web-performance/</link><guid isPermaLink="false">https://honmushi.com/2019/03/28/web-performance/</guid><pubDate>Thu, 28 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;高速なWebページをつくるための施策や、メンテナンス方法などを取りまとめた本です。
実践入門とあるように、すぐに実践できるテクニック的なことを中心に広く浅くカバーしている印象でした。
幅広い領域からのアプローチを行っているので、一度読んでおけば解決の引き出しが大きく増えて良いと思います。&lt;/p&gt;
&lt;p&gt;Webサイトの応答速度はUXの面はもちろんSEOの面でも有利になりますので、細かく対応を行う必要があります。&lt;/p&gt;
&lt;h2&gt;Webサイトのパフォーマンス改修&lt;/h2&gt;
&lt;p&gt;パフォーマンス改修ではさまざまな改修案が出てきます。この本ではソフトレベルの対応がメインで、cssやJavaScript、画像とフォントファイルなどのメンテナンスを提案しています。
それ以外ではCDNやHTTP/2についての記載もあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cssのセレクタの選び方やレスポンシブにする際のコツ、preloadを使った実装など&lt;/li&gt;
&lt;li&gt;レスポンシブな画像の設置方法、画像ファイルの軽量化&lt;/li&gt;
&lt;li&gt;JavaScriptの最適化、async&lt;/li&gt;
&lt;li&gt;サービスワーカーを使って処理を行う&lt;/li&gt;
&lt;li&gt;CDNを用いた配信、HTTP/2の利用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;負荷分散や、スケールアップのようなサーバの対応はありません。小規模なWebサイトを対象としている印象です。&lt;/p&gt;
&lt;p&gt;パフォーマンスについての基礎や、その改善によって見込める効果などのデータも載っています。
Chromeの開発ツールなど基礎的なパフォーマンス測定ツールの使い方、情報などの解説もあります。スマホ実機と接続してのパフォーマンスチェックのやり方なども載っており、ちょっと応用的な方法も掲載されています。&lt;/p&gt;
&lt;h2&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;アクセスする時間帯やサーバの調子などによっても、応答速度は変わりますし、ユーザーのネットワーク環境やPCの性能なんかでも変わることがあります。観測するときのルールを定めておこうなど丁寧に進めていくことが大切です。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;パフォーマンス改善を行う際にはもちろんですが、普段のサイト開発にも役に立つ知識がたくさんありました。サイト立ち上げの際に、この本に書いてあることを意識しながら設計することができれば、大きい効果を得られると思います。
基本的にはフロントエンドの話が主になっていますので、フロントエンドに携わる人には一読の価値アリです。&lt;/p&gt;
&lt;p&gt;HTTP/1と2の差によって、対応すべき施策が異なることにも触れられており、技術の進歩や仕様の変更によって、ベストな対策が異なることがわかります。世の中のさまざまな知見を集めて、より良くするために勉強を惜しまないことが大切だと感じました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】才能を引き出した情報空間]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/03/27/jyohoukukan/</link><guid isPermaLink="false">https://honmushi.com/2019/03/27/jyohoukukan/</guid><pubDate>Wed, 27 Mar 2019 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;h2&gt;図書館の思い出&lt;/h2&gt;
&lt;p&gt;もちろんですが、本に出てくる人は図書館のヘビーユーザーとでも呼べる人ばかりです。研究のために資料を取り寄せたり、過去の資料を探したりなどの使い方をしています。仕事のための利用という形ですが、インタビューの中では幼少期の本の読み方などについても質問しています。物心ついたときの読んでいた本とか、よく行った図書館とか、小中学校の図書館はどれくらい利用していたかなどです。&lt;/p&gt;
&lt;p&gt;以下はわたしが大人になって利用した図書館のことを書いておきます。&lt;/p&gt;
&lt;h2&gt;地域の図書館&lt;/h2&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;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;p&gt;以前関西に住んでいたときには京都の国会図書館関西館をよく利用していました。
かなり広く特殊な雰囲気なのですが、結構快適だと思います。大きいバッグは持ち込めずロッカーに預けるルールだったりしますし、建物もかっこいいです。&lt;/p&gt;
&lt;p&gt;私は雑誌を読むためによく使っていました。さまざまなジャンルの雑誌がおいてありました。IT系雑誌もあれば物理化学系の雑誌も揃っていたので、興味のある人にはおすすめです。普通の本屋にはおいていないようなマイナーな雑誌や専門的な雑誌もあるので良い暇つぶしになります。&lt;/p&gt;
&lt;p&gt;かなり多くの本がありますが、基本的には閉架に置かれていて、カウンターや端末でリクエストすることで取り出してもらえます。最近の雑誌とかは開架においてあるので自由にアクセスできます。&lt;/p&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;私はこの本を読んで、図書館に行きたくなりました。
なんとなく居心地もいいですし、何より本がたくさんあります。無料で利用できるので本屋よりも気軽です。&lt;/p&gt;
&lt;p&gt;さまざまな図書館が生まれていますが、外国と比べると日本はまだまだ発展途上らしいです。
図書館や司書の方たちも、これからどのようにしていくのか何を目指すのかといったことを考えているそうです。個人的には特定のジャンルに特化した図書館が多くなってほしいです。多分歴史とかなら、すでにあるのだと思いますが、より細分化して図書館がたくさんできるとうれしいです。&lt;/p&gt;
&lt;p&gt;すでに図書館の活用は見直されている？注目されており、いろいろな場所に図書館が出来ています。これからも積極的に利用して行こうと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】売れるゲームのUI/UX 制作現場の舞台裏]]></title><description><![CDATA[有名なゲームのUI/UXの紹介・分析をして、それらの作成秘話の・ようなものを集めた本です。
実際に開発・デザインを行った人へのインタビューなどもあり、同じようにゲームをか作っている人にとっては参考になると思います。
ゲームとは関係ない業界の人でも、UI/UX…]]></description><link>https://honmushi.com/2019/03/25/game-uiux/</link><guid isPermaLink="false">https://honmushi.com/2019/03/25/game-uiux/</guid><pubDate>Mon, 25 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;有名なゲームのUI/UXの紹介・分析をして、それらの作成秘話の・ようなものを集めた本です。
実際に開発・デザインを行った人へのインタビューなどもあり、同じようにゲームをか作っている人にとっては参考になると思います。
ゲームとは関係ない業界の人でも、UI/UXの勉強として参考になる点は多いです。&lt;/p&gt;
&lt;p&gt;UXなどの観点としては、ゲームのように達成するとご褒美をもらえることや難易度を決めることは、さまざまな分野に応用できると思います。
UXの勉強としてゲームから参考になるものは多いので、とても勉強になりました。&lt;/p&gt;
&lt;p&gt;UIの分野についても、コンシューマーゲーム・スマホなどのモバイルゲーム・アーケードゲームと複数の形態のゲームについて取り上げられています。それぞれの物理的・利用者目線での制約は異なっており、それらに同対応するかといったことが考えられています。この辺の実装方針やデザインの考え方はWEBデザインやその他UIデザインの勉強として役に立つと思います。&lt;/p&gt;
&lt;h2&gt;UI/UXの基礎知識&lt;/h2&gt;
&lt;p&gt;設計するにあたり必要な基礎知識の紹介です。それぞれのデバイスによる物理的な制約のことや、利用する傾向が多いユーザー層の説明などが主な要素です。&lt;/p&gt;
&lt;p&gt;利用者の年齢層や性別などのデータも載っているため、とても参考になります。それぞれどんな人なのだろうかといった考察も書かれているので、すぐにでも役に立つのではないかと思いました。&lt;/p&gt;
&lt;p&gt;利用者のニーズをしっかり捉えること、「どうやって伝えるか」よりも「何を伝えるか」をしっかりと考えることが重要だそうです。これらは広告のクリエイティブ業界でしばしばいわれていることであり、それがゲーム業界でも同じように大切な要素となっています。&lt;/p&gt;
&lt;h2&gt;UI/UXデザインのヒント&lt;/h2&gt;
&lt;p&gt;さまざまなゲームのUI/UXが取り上げあられています。
「にゃんこ大戦争」や「モンスト」「FF14」など有名なゲームが名を連ねており、それらのデザインにおけるラフ案や検討プロセスなどを知ることが出来ます。&lt;/p&gt;
&lt;p&gt;9つのゲームを取り上げているので一つ一つはそれほど深くありませんが、異なるデバイスのゲームを取り上げているため、制約による考え方の違いなどを知ることが出来ます。一つを深く知るのではなく、広く浅く知ることが出来ます。&lt;/p&gt;
&lt;p&gt;開発初期のデザインなど、普段見ることは出来ない情報もちらほら載っています。そこから、さまざまな検討改善を経て今のデザインにたどり着いています。検討時のプロセスやボツ案など、UI/UXデザイナーにとっては良い教科書になります。意識すべき点や工夫など学べる点ばかりでした。&lt;/p&gt;
&lt;p&gt;デモプレイやインタビュー、問い合わせ・ご意見など、実際に遊んだユーザーの声をしっかり聞いてみるということも大切だそうです。やっぱり実際に遊んでくれるユーザーの声が、一番改善すべき点に近く、その影響は大きいそうです。ユーザーの声に耳を傾けるということの大切さを知ることが出来ます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;UI/UXのこれからの話として、「AI」のことや「VRデバイス」などについても触れられていました。
新しいプラットフォームやデバイスが出てくるたびに、それらに適応したUI/UXが求められます。&lt;/p&gt;
&lt;p&gt;さまざまな制約やニーズを捉えてデバイスにあったUI/UXをつくる、そのために必要な考え方やプロセスが詰まった本でした。
事例はすべてゲームのものですが、ゲーム以外のプロダクトにも取り入れられる考え方が満載でした。
ゲーム業界の人はもちろん、それ以外でもUI/UXについて勉強したいという人であれば大いに参考になる本だと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】スラスラ読めるPythonふりがなプログラミング]]></title><description><![CDATA[プログラミング言語Python…]]></description><link>https://honmushi.com/2019/03/22/surasura-python/</link><guid isPermaLink="false">https://honmushi.com/2019/03/22/surasura-python/</guid><pubDate>Fri, 22 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;プログラミング言語Pythonの入門書です。&lt;/p&gt;
&lt;p&gt;プログラミングをやったこと無い人向けの、超入門書になっています。
この本独自の伝え方としてプログラムにふりがなをつけることで、わかりやすくしています。&lt;/p&gt;
&lt;p&gt;内容的にもかなり初心者向けになっており、プログラミングの基礎的なことを学ぶことが出来ます。&lt;/p&gt;
&lt;p&gt;似たような本としては以前紹介した&lt;a href=&quot;/2019/01/10/surasurajs/&quot;&gt;【実践技術書】スラスラ読める JavaScript ふりがなプログラミング&lt;/a&gt;などがあります。&lt;/p&gt;
&lt;h2&gt;IDLEを利用してプログラムと実行を行う&lt;/h2&gt;
&lt;p&gt;Pythonのインストール方法から説明されており、Pythonとともに利用できる「IDLE」を使ってプログラムの記述・実行を行います。&lt;/p&gt;
&lt;p&gt;特にコマンドプロンプトやターミナル・コンソールなどを使うことはありません。実行環境としてはWindowsとMacが想定されています。といってもPythonなのでLinuxとかでも問題なく実行できます。&lt;/p&gt;
&lt;p&gt;実際にプログラムを作って何らかのサービスを動かす場合は、サーバ上で実行するなどややこしいことになりますが、一旦基本的なことを学ぶので簡単に実行できる環境を利用しています。&lt;/p&gt;
&lt;h2&gt;ライブラリの使用まで体験する&lt;/h2&gt;
&lt;p&gt;この本で学ぶことはプログラミングの基礎的なことです。
if文やfor文に加えて、関数を作って利用したりします。配列や辞書などの型も利用します。最後の章ではライブラリの利用も体験します。&lt;/p&gt;
&lt;p&gt;これらの基礎を使っての応用については、この本では取り上げられていません。別の本を参考に進んでみるのが良いと思います。&lt;/p&gt;
&lt;p&gt;if文やfor文など、Pythonの基礎と言うよりもプログラミングそのものの基礎を学ぶことになります。ですので、プログラミング歴0という人に向けた内容になっています。&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;/p&gt;
&lt;p&gt;エラーメッセエージにもふりがながついているので、エラーの読み方をここで理解しておけると良いです。なんで動かないのだろうといったことをしっかり理解できると、問題解決がはかどります。&lt;/p&gt;
&lt;p&gt;プログラマの最初の仕事はデバッグなどから経験することになるのではないかと思います。ですので、エラーを解決できる用になっておくことは、スタートダッシュで有利になるのではないかと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ふりがなシリーズはほかにもいくつかの言語で展開されています。これから更に増えていくかもしれません。&lt;/p&gt;
&lt;p&gt;入門書としてはかなり親切なので、興味ある言語を選べばいいです。プログラミングをやったことあるという人にとっては、もう少し具体的な本を選んだほうが速いかもしれません。&lt;/p&gt;
&lt;p&gt;子供の学習用とかにもいいですし、わからない人に教えるための伝え方の参考として読むのもおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[UbuntuでUnityをインストール]]></title><description><![CDATA[以前からUnityを使ってみたいと思っていました。
しかし、WindowsとMac用のサポートしか無いようで、Linux版は開発中？サポートしていないようだったので様子を見ていました。 今回、Unity Hubを使うことで安定してインストールできる、開発段階だがLinux…]]></description><link>https://honmushi.com/2019/03/19/unity-hub/</link><guid isPermaLink="false">https://honmushi.com/2019/03/19/unity-hub/</guid><pubDate>Tue, 19 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前からUnityを使ってみたいと思っていました。
しかし、WindowsとMac用のサポートしか無いようで、Linux版は開発中？サポートしていないようだったので様子を見ていました。&lt;/p&gt;
&lt;p&gt;今回、Unity Hubを使うことで安定してインストールできる、開発段階だがLinux用のUnityも利用できるようだったので試しにやってみました。&lt;/p&gt;
&lt;p&gt;結果としては無事にインストールできたようです。これからチュートリアル等進めてみようと思っています。
以下にインストール方法を記載しておきます。同じように考えている人は参考にしてください。&lt;/p&gt;
&lt;h2&gt;Unity Hubのダウンロード&lt;/h2&gt;
&lt;p&gt;以下のページでダウンロードしました。&lt;br&gt;
&lt;a href=&quot;https://forum.unity.com/threads/unity-hub-release-candidate-0-20-1-is-now-available.546315/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://forum.unity.com/threads/unity-hub-release-candidate-0-20-1-is-now-available.546315/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;自分のOSのリンクをクリックしてインストールします。
「UnityHubSetup.AppImage」というファイルがダウンロードできます。&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;chmod 764 UnityHubSetup.AppImage&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;権限与えたら実行しましょう。あとは質問や規約などを読みながら進めれば問題ないです。
ちなみに私がインストールしたUnity Hubは「1.6.0」でした。&lt;/p&gt;
&lt;h2&gt;Unityアカウントの作成&lt;/h2&gt;
&lt;p&gt;Unityのアカウントが必要なようです。個人の利用であればとりあえず無料のプランで試してみましょう。追加のサポートやトレーニングなどが受けられませんが、一旦問題ないです。&lt;/p&gt;
&lt;p&gt;メールアドレスとアカウント情報、パスワードを入力してUnityIDを作成します。
このIDを使ってログインすればオンライン上でプロジェクトの管理などができます。&lt;/p&gt;
&lt;h2&gt;ホームディレクトリに「Unity」ディレクトリが生成された&lt;/h2&gt;
&lt;p&gt;インストールが終わればUnity Hubが表示されます。最初は空っぽです。
ここから「Installs」タブでUnityEditterをインストールします。複数のバージョンを利用できるようです。
「~/Unity」以下のディレクトリにバージョンごとにインストールされます。パスからUnityEditterを実行することでも、任意のバージョンを使えるようです。とりあえず最新バージョン「2018.3.9fi」をインストールして設定しています。&lt;/p&gt;
&lt;h2&gt;プロジェクトを作成する&lt;/h2&gt;
&lt;p&gt;「新規」を選択してプロジェクトを作りましょう。プロジェクトを作成するディレクトリを選択できるので、任意の場所に作成します。&lt;/p&gt;
&lt;p&gt;次からはプロジェクトを選択することで、UnityEditterを開くことができます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ここまで特に躓くことなく簡単にできました。現在チュートリアルを進めていますが、特に問題はなさそうです。
この後はアプリの構築・ビルドまで一通りやってみて、躓くことがないか確認してみようと考えています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Unityのチュートリアルを試す]]></title><description><![CDATA[UbuntuでUnityをインストールの記事の続きです。
Unityが無事にインストール出来た様子なので、チュートリアルを試してみました。 初めてのUnity…]]></description><link>https://honmushi.com/2019/03/19/unity-korogashi/</link><guid isPermaLink="false">https://honmushi.com/2019/03/19/unity-korogashi/</guid><pubDate>Tue, 19 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/2019/03/19/unity-hub/&quot;&gt;UbuntuでUnityをインストール&lt;/a&gt;の記事の続きです。
Unityが無事にインストール出来た様子なので、チュートリアルを試してみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/unity3d-jp/FirstTutorial/wiki&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;初めてのUnity 球転がし&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;結論、開発は問題なくできそうです。チュートリアルを進めるに当たっては問題なく出来ました。
これから進めていくうちに問題に当たる可能性がありますが、何か合ったら共有したいと思います。&lt;/p&gt;
&lt;h2&gt;チュートリアル&lt;/h2&gt;
&lt;p&gt;いくつかあるようでしたが、Github上に公開されているものを採用しました。動画になっているものなどもあります。
今回は自分のペースでやりたかったのでドキュメントになっているものを選びました。&lt;/p&gt;
&lt;p&gt;ざっくりとのチュートリアルの内容は、玉を転がしてアイテムを集めるゲームを作ります。
チュートリアルということもあり、飾りっ気がないシンプルなものが出来ました。&lt;/p&gt;
&lt;p&gt;基本的な要素の作り方や、コンポーネントの追加、プレハブ化といったことを学習できました。
本格的にやってみたい人は、Unityに関する本を購入したり、Web上のドキュメントを参考にして真似してみるのがいいと思います。&lt;/p&gt;
&lt;h2&gt;LinuxでもUnity開発ができた&lt;/h2&gt;
&lt;p&gt;以下の構成で、チュートリアルを進めていきます。&lt;/p&gt;
&lt;ol start=&quot;0&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;ゲームのuiを追加する&lt;/li&gt;
&lt;li&gt;ゲームのクリアを追加する&lt;/li&gt;
&lt;li&gt;障害物とリスタートの追加&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;特にうまく行かないところはありませんでした。Linux でも問題なくUnity開発が出来ました。良かったです。&lt;/p&gt;
&lt;p&gt;Unityについても理解を深めていこうと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Linuxでも無事に開発できることがわかり良かったです。次はAndroid用のアプリにするためにビルドができるのか実験しようと思っています。&lt;/p&gt;
&lt;p&gt;Linux上でビルドが難しければ、WindowsとMacでビルドすればいいだけなのですが、一度試してみようと思います。&lt;/p&gt;
&lt;p&gt;UnityもそうですがReactNative等のクロスプラットフォームで開発できるというのはとても便利です。
もちろんネイティブではないことでいくつか制約があるのでしょうが、開発も積極的に進んでいるそうなので、徐々に解決されているようです。&lt;/p&gt;
&lt;p&gt;どこまで出来てどこから出来ないのか正確な情報はありませんが、簡単なものであればそれほど困ったことはありません。&lt;/p&gt;
&lt;p&gt;始めて作ってみるとか概要の勉強という段階においては、このような環境で作ってみるのが手っ取り早くてよいのと思います。
何より動くものを作るぞというモチベーションが高まるのでやっていて楽しいですね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】筆ペンで描く鳥獣戯画]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/03/18/fude-giga/</link><guid isPermaLink="false">https://honmushi.com/2019/03/18/fude-giga/</guid><pubDate>Mon, 18 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;なんとなくやってみようと思って手にとって見た本です。
筆ペンを使って鳥獣戯画を書きます。薄い線をなぞったり、移したりしながら練習できる本になっています。&lt;/p&gt;
&lt;p&gt;応用として、さまざまな場面で使えるようなアレンジについても紹介されています。ちょっとしたメモであったり、ラクガキであったりに使うことができるとおもしろいです。年賀状とかお手紙なんかにもいいと思います。鳥獣戯画っぽい書き方を身につけると、どこかで役に立ちそうです。&lt;/p&gt;
&lt;h2&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&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&gt;おわりに&lt;/h2&gt;
&lt;p&gt;暇なときのラクガキとおすすめです。イラストの本格的な練習には物足りないので、息抜きやアイデアの一つとして取り入れるくらいになります。&lt;/p&gt;
&lt;p&gt;筆ペンなんて子供の頃依頼触っていないという方にもおすすめしたいです。たまに触ってみると、それっぽいものが抱えるので楽しいです。文字もそれっぽく見えますよね。年賀状なんかを手書きで書いてみるのもいいかもしれません。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】UIデザインの教科書]]></title><description><![CDATA[UI/UXの観点から設計について学ぶ本です。 スマホなどのデバイスごとでの考え方などにも重点をおいており、マルチデバイスな考え方を知ることができます。 UIという言葉からもわかるように、WEBなどのIT…]]></description><link>https://honmushi.com/2019/03/18/ui-kyoukasyo/</link><guid isPermaLink="false">https://honmushi.com/2019/03/18/ui-kyoukasyo/</guid><pubDate>Mon, 18 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;UI/UXの観点から設計について学ぶ本です。&lt;/p&gt;
&lt;p&gt;スマホなどのデバイスごとでの考え方などにも重点をおいており、マルチデバイスな考え方を知ることができます。&lt;/p&gt;
&lt;p&gt;UIという言葉からもわかるように、WEBなどのIT系の内容になっています。
使いやすいインターフェースを学ぶために良い本でした。さまざまな例から学べるものを吸収して、これからの設計に活かしていきたいと思います。&lt;/p&gt;
&lt;h2&gt;物理的な制約&lt;/h2&gt;
&lt;p&gt;UIデザインのテクニックを見るよりも先に、スマホやマウスなどの操作デバイスによる物理的な制約を学びます。&lt;/p&gt;
&lt;p&gt;現代ではさまざまな制約のもとで、UIが提供されており、使いやすい場面もあれば不便に感じる場面もあります。
入力のみでなく、画面や音声などの出力にもさまざまな制約が存在しており、それらについても広く理解した上でUIデザインについて学んでいきます。&lt;/p&gt;
&lt;h2&gt;人間の認知特性による負荷&lt;/h2&gt;
&lt;p&gt;人間が視覚から情報を得る際の特性についても学ぶことができます。色や形・動きなどを人間がどのように捉えるのかということをざっくり知ることができます。&lt;/p&gt;
&lt;p&gt;これらを踏まえた上で、UIから受け取る負荷、すなわちインタラクションコストを減らすための方法について考えます。
具体的には一貫性やシンプル、共通概念といった考え方です。&lt;/p&gt;
&lt;h2&gt;ナビゲーションとインタラクション&lt;/h2&gt;
&lt;p&gt;世の中で使われている、ナビゲーションを紹介しています。ヘッダーやスライダー、メニューバーなどさまざまなものがあります。特に実装方法等は書いてないですが、どのような動き・表現なのかを写真にて説明しています。&lt;/p&gt;
&lt;p&gt;インタラクション的な表現、ユーザーの操作に対する反応なども書いてあります。本では伝わりにくいものもあるので実際にサイトにアクセスして確認すると良いです。さまざまな表現を使いこなすことはユーザーへの負担を減らすことにつながります。&lt;/p&gt;
&lt;p&gt;Webサイトやアプリで使われているデジタルなデザインが主な内容です。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;具体的な実装方法やサンプルではなく、基本的な技術・概念や言葉の説明となっています。&lt;/p&gt;
&lt;p&gt;UIデザイン関連の基本的な知識を身につけることができます。概念から深く学ぶことができますので、しっかりと理解を深めたいという場合によい本だと感じました。&lt;/p&gt;
&lt;p&gt;上記にも書いてありますが、具体的な実装方法などソースコードは書いていません。UI/UXの概念を知りたいという方や、設計するに当たっての勉強といった場面で役に立つ本だと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】エンジニアのための理論でわかるデザイン入門]]></title><description><![CDATA[文字、色、配置などのデザインの基本について学ぶ本です。 エンジニアのためのとあるように、理論的な説明を心がけています。
主な内容としてはWEBデザインに活かせるようなデザインやUIの解説になっています。 UI…]]></description><link>https://honmushi.com/2019/03/18/rirondewakaru-design/</link><guid isPermaLink="false">https://honmushi.com/2019/03/18/rirondewakaru-design/</guid><pubDate>Mon, 18 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;文字、色、配置などのデザインの基本について学ぶ本です。&lt;/p&gt;
&lt;p&gt;エンジニアのためのとあるように、理論的な説明を心がけています。
主な内容としてはWEBデザインに活かせるようなデザインやUIの解説になっています。&lt;/p&gt;
&lt;p&gt;UIデザインなどの現場ではわかりやすい・操作しやすいデザインが求められています。
情報を整理してから全体のコンセプトを捉えながら組み立てていく意識が必要だと感じました。&lt;/p&gt;
&lt;h2&gt;デザインは「ビジュアル」「文字」「色」「レイアウト」「飾り」から成り立つ&lt;/h2&gt;
&lt;p&gt;対象とするコンセプトをしっかり捉えてから、これらのデザイン要素の検討を行います。コンセプトを中心として、これらのデザイン要素に一貫性をもたせるようにします。&lt;/p&gt;
&lt;p&gt;伝えたい情報や伝える相手などを考えて、意味のある要素を選び出すことが大切な考え方です。不要な要素を盛りすぎないように気をつけましょう。&lt;/p&gt;
&lt;h2&gt;デザインに関する基本的な知識を学ぶ&lt;/h2&gt;
&lt;p&gt;文章が多めで、理論的にわかりやすくなっています。絵や実例を見て考えるというよりも、仕組みや成り立ちから学ぶようなイメージです。
フォントの選び方や、良い写真の選び方、黄金比や白銀比のこと、三分割法など、デザインの際によく使われる基本的な知識を身につけることができます。&lt;/p&gt;
&lt;h2&gt;ファッションからデザインを学ぶ&lt;/h2&gt;
&lt;p&gt;本の中に度々出てきますが、普段からファッショに気をつけることでデザイン能力を身につけることができるそうです。
服の色などはもちろん、形やトーンなど、来ている人の雰囲気や属性から、それに合った服の選び方などさまざまな勉強ができます。自分でいろいろなコーディネートを試すことも大切な取り組みです。&lt;/p&gt;
&lt;h2&gt;コンセプトをしっかり意識する&lt;/h2&gt;
&lt;p&gt;デザインをする上で大切なのはコンセプトをしっかり捉えることです。ワイヤーフレームをつくるところからしっかりと行い、情報を整理して伝えたいことをしっかりと伝えられるような意識を持ちましょう。&lt;/p&gt;
&lt;p&gt;感覚的なデザインや直感的なデザインよりも、しっかりと理由を説明できるようなコンセプトを持つことが重要視されています。それに沿ったデザインを行うことで、一貫性を保つことができ良いデザインとなります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;「エンジニアのための」とあるように、デザインの基礎を情報ベースの説明で紹介した内容です。
デザインを普段からやっている人にとっては、もっとメジャーな教科書があるのだと思います。&lt;/p&gt;
&lt;p&gt;エンジニアとしては大変わかりやすかったと思います。ただ、この知識を身につけるためには、取り組むことが重要です。良いデザインを真似してみたり、いくつもパターンを作って比較・検討したりなどすることで、能力が磨かれていきます。なかなかその取り組みをやる時間は取れないかもしれません。&lt;/p&gt;
&lt;p&gt;本の中では、普段の生活の中から得られる知識が書かれていました。ファッションのことであったり町中のデザインのことです。デザインのコンセプトについて意識しながら生活することで、デザイン能力を成長させていくことができるかもしれません。地道に努力したいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】Flutter入門]]></title><description><![CDATA[クロスプラットフォームアプリケーションをつくることができる言語「Flutter」に関する本です。
タイトルの通り入門書となっており、Fluttr…]]></description><link>https://honmushi.com/2019/03/15/flutter/</link><guid isPermaLink="false">https://honmushi.com/2019/03/15/flutter/</guid><pubDate>Fri, 15 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;クロスプラットフォームアプリケーションをつくることができる言語「Flutter」に関する本です。
タイトルの通り入門書となっており、Fluttrを使ったことが無い人向けの内容になっています。&lt;/p&gt;
&lt;p&gt;全くのプログラミング初心者ではなく、他言語でプログラミング経験があるレベルの人が対象です。&lt;/p&gt;
&lt;p&gt;以下の記事で以前紹介している「React Native」と立ち位置的にはにています。使用する言語や仕組みが違いますが、どちらもクロスプラットフォームのスマホアプリをつくることができます。&lt;br&gt;
&lt;a href=&quot;/2019/01/31/react-native/&quot;&gt;【実践技術書】React Native 入門&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;利用する環境&lt;/h2&gt;
&lt;p&gt;インストールの方法も丁寧に書かれているので、それに従って進めれば問題ありません。Windowsとmacの手順が記載されています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flutter SDK&lt;br&gt;
Flutterでの開発に必要なものが大体ここに入っています。利用するDartという言語や他もろもろです。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Android studioまたはVisual Studio CodeまたはXcode&lt;br&gt;
環境と好みによって好きなものを使えます。プラグインなどの設定方法も書かれていました。&lt;br&gt;
基本的にはAndroid Studioがおすすめされています。軽快さを求めるならVisual Studio Codeです。
FlutterSDKを導入すれば、これらのIDEを使わなくとも開発可能で、例えばテキストエディタでの開発も可能です。&lt;/p&gt;
&lt;p&gt;仮想デバイスでの確認の設定のために、AndroidStudioでの設定が必要になります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Flutter Studio&lt;br&gt;
ブラウザ上で利用できるUIデザインツールです。簡単に画面のデザインができて、そのソースコードをコピペすれば手元の開発環境で利用できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Flutterの特長&lt;/h2&gt;
&lt;p&gt;プロジェクト内にはテストコード用のプログラムも生成されており、ユニットテストのことも意識しながら開発ができます。
非同期処理もそこに含まれており、さまざまな基本的な処理をすぐに体験することができます。&lt;/p&gt;
&lt;p&gt;React NativeではWebと似たようなJSXやstyleの 開発ができましたが、Flutterではそういうわけではありませんでした。
そのかわりブラウザ上で利用できるFlutter Studioを利用することで、簡単にマテリアルデザインのUIが作れてコード化もできます。使い方は独特ですが、一度使ってみるとおもしろいです。&lt;/p&gt;
&lt;h2&gt;サンプルで作ったもの&lt;/h2&gt;
&lt;p&gt;一通りのウィジェットの解説と、グラフィック描写、複雑なUIの実装をやってから、ファイルやデータへのアクセス等を経験できます。
それらが終わったら以下のサンプルアプリを作ります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RSSリーダー&lt;br&gt;
WEB上のサイトからRSSを受け取り、更新や内容をチェックできます。WEBでのリクエストやその返り値の処理を行います。&lt;/li&gt;
&lt;li&gt;お絵かきカメラ&lt;br&gt;
カメラで写真を取り、そこにタップでお絵描きして、保存します。カメラへのアクセスやcanvasでの描画。編集などを行います。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;結構複雑そうに見えますが、ソースコードはシンプルでわかりやすいです。FlutterでつくるとUIはスッキリわかりやすく、ソースコードもシンプルになると感じました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Flutterは1つのソースコードでiOSとAndroidの両方のプログラムがかけるのでとても便利です。開発はGoogleが進めているので、これからの発展にも大いに期待できます。スマホアプリ以外の分野でも利用できるようになると思います。&lt;/p&gt;
&lt;p&gt;React Nativeと比較すると、使い勝手や使えるモジュールなどに差があります。必要な仕様や要件によって選ぶべきです。&lt;br&gt;
ただ「React Native」にはExpoを利用することで開発・ビルドがとても簡単になるので、私個人的にはそちらのほうがオススメです。最初はさくっとアプリを作って慣れてきたらFlutterにも手を出して、比較してみるのがいいかなあと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[「クロール済み-インデックス未登録」を解消する]]></title><description><![CDATA[以前書いた記事の続きです。 GoogleSearchConsoleの「クロール済み-インデックス未登録」状態の対処 「クロール済み-インデックス未登録」を解消するための対応をまとめます。 Google…]]></description><link>https://honmushi.com/2019/03/15/googleindex2/</link><guid isPermaLink="false">https://honmushi.com/2019/03/15/googleindex2/</guid><pubDate>Fri, 15 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前書いた記事の続きです。&lt;br&gt;
&lt;a href=&quot;/2019/01/07/googleindex/&quot;&gt;GoogleSearchConsoleの「クロール済み-インデックス未登録」状態の対処&lt;/a&gt;&lt;br&gt;
「クロール済み-インデックス未登録」を解消するための対応をまとめます。&lt;/p&gt;
&lt;p&gt;Googleのサーチコンソールでインデックスのカバレッジを確認すると、「除外」にされているものが多かった、という件です。なかでも「クロール済み-インデックス未登録」が多く、どうしたものかと思っていました。&lt;/p&gt;
&lt;p&gt;あれから2ヶ月くらい経過しました。対応のおかげで大きく解消されてきています。「除外」状態のページよりも断然「有効」のページのほうが多くなりました。&lt;/p&gt;
&lt;p&gt;実際にこれまでに実施した対応と、考察を記録しておきます。同じような現象で悩む人の参考になればと思います。&lt;/p&gt;
&lt;h2&gt;「クロール済み-インデックス未登録」を解消するために行った対応&lt;/h2&gt;
&lt;h3&gt;除外になっているページを確認する&lt;/h3&gt;
&lt;p&gt;サーチコンソールの「カバレッジ」から除外状態のページを確認します。具体的にどのページが除外なのか、そこに傾向や特徴はないかといったことを確認しておきましょう。時間が経過して、増えたか減ったかということもちゃんと判断できるようにしましょう。&lt;/p&gt;
&lt;p&gt;ここで「クロール済み-インデックス未登録」となっているページは、クローラが訪れたのにもかかわらず、Googleは覚えていない状態になっています。例えるなら、「映画を一回見たけど面白くなかったからすぐ忘れた、他の人にもちろんオススメしない」という扱いになっています。これらを頑張って解決する必要があります。&lt;/p&gt;
&lt;h3&gt;見出しをしっかりつくる&lt;/h3&gt;
&lt;p&gt;記事内の「h2」や「h3」などのことです。&lt;/p&gt;
&lt;p&gt;昔の記事ではh2に「概要」「結論」「ここがおもしろい」「印象に残ったところ」など、どの記事でも使える共通の項目名を入れていました。
しかし、除外への対応として項目名ではなく強調したい内容を入れるようにしました。他のページと同じものを入れると、使いまわしと思われるのではないかと考えたためです。&lt;br&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;変更前
&amp;lt;h2&amp;gt;印象に残ったところ&amp;lt;/h2&amp;gt;
作者はどうやら〇〇派のようでした。私もそう思います。

変更後
&amp;lt;h2&amp;gt;作者はどうやら〇〇派でした&amp;lt;/h2&amp;gt;
ここが印象に残ったところです。私もそう思います。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;記事の文字数を増やす&lt;/h3&gt;
&lt;p&gt;記事の文字数が短すぎると、あまり意味の無いページだと決めつけられてしまう可能性があります。どれくらいが最適なのかという確証はありませんが、私は1000文字以上を目指して書いています。&lt;br&gt;
実際それで問題が解決しているので、一つの例として参考になると思います。&lt;/p&gt;
&lt;h3&gt;記事数を増やす&lt;/h3&gt;
&lt;p&gt;引き続きページ数は頑張って増やしています。ブログ全体のコンテンツ量が増えることで、全体の価値が上がるので効果はあると思います。すぐには増やせないので地道に続けることが重要です。&lt;/p&gt;
&lt;p&gt;間違っても他人のブログの記事をコピーしたり、同じ内容のページをやたら増やしたりしてはしてはいけません。サイトを訪れる人にとってもがっかりです。そうするともちろんgoogleからペナルティを食らうはずです。地道にコツコツとやりましょう。&lt;/p&gt;
&lt;h3&gt;インデックス登録をリクエストをする&lt;/h3&gt;
&lt;p&gt;Googleに対して「もう一度インデックスしに来てください」というリクエストを依頼できます。&lt;/p&gt;
&lt;p&gt;サーチコンソールの上部の検索窓にリクエストしたいURLを入力すると、そのページの状態が表示されます。インデックスされなかった理由等も出てくるので参考にするといいです。&lt;br&gt;
特に理由が表示されていなければ、コンテンツの有用性が認められなかった可能性があります。内容を増やすなりしてから「インデックス登録をリクエスト」を押します。&lt;/p&gt;
&lt;p&gt;すると、リクエストがGoogleへ送られます。有用なページと認められればインデックスされます。リクエストを送ってからインデックスされるまでには数日かかる印象です。&lt;/p&gt;
&lt;h2&gt;意識すべきことはやっぱり質と量&lt;/h2&gt;
&lt;p&gt;結論としては、やはり意味のあるページをつくることを心がけることが良さそうです。文字数や見出しなどを意識しながらページを書いていきます。googleはユーザーにとって価値のあるものを優先して表示したいと思っているはずですので、しっかりとユーザー目線で記事を作成するように心がけましょう。&lt;/p&gt;
&lt;p&gt;読みやすく、情報に信頼性があり、読者にとって有益な情報であること。そして、検索して訪れた人がちょうど欲しかった情報を提供できていることが大切です。&lt;/p&gt;
&lt;p&gt;今更あまりいないと思いますが、titleやdiscriptionなどのSEO関連のメタタグについて未対応という方は、そちらから対応しましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】勉強の哲学]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/03/14/study-tetsu/</link><guid isPermaLink="false">https://honmushi.com/2019/03/14/study-tetsu/</guid><pubDate>Thu, 14 Mar 2019 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;h2&gt;勉強の目的は&lt;/h2&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;勉強法と言うか、読書のコツ・メモのとり方などのアドバイスもあり、参考にすると良さそうです。インプットしたものを書き出すことの重要性についても触れています。勉強することに対して、結構得られることが多いのではないでしょうか。勉強の勉強になると思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;勉強について、考え方が変わるかもしれないです。当たり前のように学校で勉強をしてきましたが、改めて向き合うととても不思議なものでした。勉強についての勉強といった状態になります。この本を読んでいない人に話しても、「何言っているんだろう」となると思いますが、勉強とはそういうことなのだと理解できます。&lt;/p&gt;
&lt;p&gt;勉強による自身の変化を「ユーモア」や「アイロニー」などの言葉で捉えています。
聞きなれない言葉かもしれませんが、結構わかりやすく説明されています。
他にもいくつか哲学的な概念を持ち出してくるので難しく感じることがありますが、基本的にはわかりやすい言葉で言い換えてくれています。結構スラスラ読めると思います。&lt;/p&gt;
&lt;p&gt;哲学的な捉え方の入門としても面白い本だと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[React Native + Expoによるアプリの雛形]]></title><description><![CDATA[React NativeとExpo…]]></description><link>https://honmushi.com/2019/03/14/second-app/</link><guid isPermaLink="false">https://honmushi.com/2019/03/14/second-app/</guid><pubDate>Thu, 14 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React NativeとExpoを利用してクロスプラットフォームなアプリを作成しています。&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;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Admob&lt;br&gt;
広告を表示するために取り入れています。
広告出す場合はプライバシーポリシーの記載が必須です。無いとストアから削除されるので気をつけましょう。&lt;/p&gt;
&lt;p&gt;Admobのアカウントを作成して、広告IDを取得することで利用できます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;React Navigation&lt;br&gt;
タブなどによる画面遷移をサポートしてくれます。なくてもアプリは作れますがあると便利です。&lt;/li&gt;
&lt;li&gt;Style&lt;br&gt;
コンポーネントの見た目をまとめて定義するのに使います。こちらもなくてもアプリは作れますが、スタイルの管理がややこしくなるので、間違いなく使ったほうがいいです。&lt;br&gt;
とりあえず別ファイルに切り出して実装する方針にしています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;create-react-native-appを実行する&lt;/h2&gt;
&lt;p&gt;コマンドラインで&lt;code&gt;create-react-native-app&lt;/code&gt;を実行します。コマンドがまだない場合はnpmでインストールしましょう。react-nativeやexpoも必要なのでinstallしておきます。&lt;/p&gt;
&lt;p&gt;上記のコマンドを実行すると必要な雛形ができます。そこに今回紹介する雛形を取り込めば、とりあえず動くものになります。&lt;code&gt;npm start&lt;/code&gt;を実行すればexpoによって実機での確認ができます。&lt;/p&gt;
&lt;p&gt;実機に&lt;code&gt;Expo&lt;/code&gt;というアプリをインストールしておく必要があります。ストアで検索して入れておくと良いです。&lt;/p&gt;
&lt;p&gt;以下の記事で取り上げていますので参考にどうぞ&lt;br&gt;
&lt;a href=&quot;/2019/02/25/make-app-expo/&quot;&gt;React NativeとExpoでアプリをリリース&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;雛形&lt;/h2&gt;
&lt;h3&gt;app.js&lt;/h3&gt;
&lt;p&gt;React-Navigationを利用しています。コンポーネントとしてページを作成して、設定することになります。ソースを見れば直感的にわかるかなと思います。&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;import React from &amp;#39;react&amp;#39;;
import { StyleSheet, Text, View, ScrollView } from &amp;#39;react-native&amp;#39;;
import { Constants } from &amp;#39;expo&amp;#39;;
import { createStackNavigator,createAppContainer } from &amp;#39;react-navigation&amp;#39;;

import styles from &amp;#39;./common/style.js&amp;#39;;
import Policy from &amp;#39;./common/policy.js&amp;#39;;
import FooterAdd from &amp;#39;./common/add.js&amp;#39;;


// メインコンポーネント
class Home extends React.Component {
  static navigationOptions = {
    title: &amp;#39;タイトル&amp;#39;,
    headerTinColor:&amp;#39;rgba(0, 0, 0, 0.6)&amp;#39;,
  };

  constructor(props){
    super(props);
    this.state ={};
  }
  _keyExtractor = (item, index) =&amp;gt; item.id.toString()

  render() {
    return (
      &amp;lt;View style={styles.container}&amp;gt;
        &amp;lt;Text 
          style={{paddingBottom:30}}
          onPress={() =&amp;gt; {
            this.props.navigation.navigate(&amp;#39;Policy&amp;#39;);
          }}
        &amp;gt;
          プライバシーポリシーはこちら
        &amp;lt;/Text&amp;gt;
        &amp;lt;FooterAdd/&amp;gt;
      &amp;lt;/View&amp;gt;
    );
  }
}


const RootStack = createStackNavigator(
  {
    Home: { screen: Home },
    Policy: { screen: Policy },
  },
  {
    initialRouteName: &amp;#39;Home&amp;#39;,
  }
);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;common/policy.js&lt;/h3&gt;
&lt;p&gt;アプリのプライバシーポリシーページです。ページへのリンクを貼るだけでもいいそうなのですが、アプリ内に設置するとして、このように実装しています。&lt;/p&gt;
&lt;p&gt;Admobを利用しているので、その部分は明記しています。Firebaseは利用していないので書いてません。必要であれば追加しましょう。&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 * as React from &amp;#39;react&amp;#39;;
import { StyleSheet, Text,View, ScrollView , Linking} from &amp;#39;react-native&amp;#39;;

class Policy extends React.Component {
  static navigationOptions = {
    title: &amp;#39;プライバシーポリシー&amp;#39;,
    headerStyle:{color: &amp;#39;rgba(0, 0, 0, 0.6)&amp;#39;},
    headerTinColor:&amp;#39;white&amp;#39;,
  };
  constructor(props){
    super(props);
  }

  render() {
    return (
      &amp;lt;View style={styles.container}&amp;gt;
        &amp;lt;ScrollView style={styles.mainView}&amp;gt;
          &amp;lt;View style={{paddingBottom:100}}&amp;gt;
            &amp;lt;Text style={styles.textTitle}&amp;gt;アプリケーション・プライバシーポリシー&amp;lt;/Text&amp;gt;
            &amp;lt;Text style={styles.textDisc}&amp;gt;
              {`本アプリケーションを利用するにあたり、以下のプライバシーポリシーが適用されます。 お客様は、本アプリケーションを利用することにより、本アプリケーション・ポリシーに同意したものとみなされます。
          
本アプリケーション・ポリシーにおいて、個人情報とは、個人情報保護法により定義された個人情報及び特定の個人情報に結びついて使用される個人に関する属性情報（メールアドレス・利用履歴・利用料金等）を意味するものとします。`}
            &amp;lt;/Text&amp;gt;
          
          &amp;lt;Text style={styles.textTitle}&amp;gt;個人情報の管理&amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textDisc}&amp;gt;
本アプリではお客さまの個人情報を保持するにあたり、個人情報への不正アクセス・紛失・破損・改ざん・漏洩などを防止するために適切な措置を講じ、安全対策を実施し個人情報の管理を行ないます。
          &amp;lt;/Text&amp;gt;
          
          &amp;lt;Text style={styles.textTitle}&amp;gt;個人情報の利用目的&amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textDisc}&amp;gt;
本アプリでは、広告配信ツールとしてAdMob(Google Inc.)を使用しており、AdMobがご利用者の情報を自動取得する場合がございます。取得する情報、利用目的、第三者への提供等につきましては、以下の広告配信事業者のアプリケーション・プライバシーポリシーのリンクよりご確認ください。
          &amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textDisc} 
            onPress={() =&amp;gt; {
              this.props.navigation.navigate(&amp;#39;SelectStop&amp;#39;);
              const url = &amp;#39;https://policies.google.com/technologies/ads?hl=ja&amp;#39;
              Linking.openURL(url).catch(err =&amp;gt; console.error(&amp;#39;An error occurred&amp;#39;, err));
            }}
          &amp;gt;
          {`Google 広告に関するポリシー
https://policies.google.com/technologies/ads?hl=ja`}
          &amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textTitle}&amp;gt;個人情報の第三者への開示・提供の禁止&amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textDisc}&amp;gt;
          {`お客さまよりお預かりした個人情報を適切に管理し、次のいずれかに該当する場合を除き、個人情報を第三者に開示いたしません。
          
・お客さまの同意がある場合
・法令に基づき開示することが必要である場合
・司法または行政機関から開示を求められた場合`}
          &amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textTitle}&amp;gt;個人情報の安全対策&amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textDisc}&amp;gt;
個人情報の正確性及び安全性確保のために、十分なセキュリティに万全の対策を講じ、万が一、問題が発生した場合は、速やかに適当な是正対策をします。
          &amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textTitle}&amp;gt;法令、規範の遵守と見直し&amp;lt;/Text&amp;gt;
          &amp;lt;Text style={styles.textDisc}&amp;gt;
保有する個人情報に関して適用される日本の法令、その他規範を遵守するとともに、本ポリシーの内容を適宜見直し、その改善に努めます。
          &amp;lt;/Text&amp;gt;
          &amp;lt;/View&amp;gt;
        &amp;lt;/ScrollView&amp;gt;
      &amp;lt;/View&amp;gt;
    );
  }
}

export default Policy;

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  mainView: {
    backgroundColor: &amp;#39;#EEEEEE&amp;#39;,
    paddingTop:10,
  },
  textTitle: {
    fontSize: 14,
    marginLeft:15,
    marginTop: 30,
  },
  textDisc: {
    fontSize: 18,
    marginLeft:30,
    marginRight:30,
    marginTop: 10,
    color: &amp;#39;rgba(0, 0, 0, 0.6)&amp;#39;,
  },
});&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;common/style.js&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;import { StyleSheet } from &amp;#39;react-native&amp;#39;;

const styles = StyleSheet.create({
  list: {
    width:&amp;quot;100%&amp;quot;,
    padding:20,
  },
  
  listItem: {
    flexDirection:&amp;quot;row&amp;quot;,
    borderColor: &amp;quot;rgba(0,0,0,0.2)&amp;quot;,
    borderBottomWidth: 1,
    paddingHorizontal: 10,
    paddingVertical:10,
    alignItems:&amp;quot;center&amp;quot;,
  },
  
  container: {
    flex: 1,
    backgroundColor: &amp;#39;#fff&amp;#39;,
    alignItems: &amp;#39;center&amp;#39;,
    justifyContent: &amp;#39;center&amp;#39;,
    color: &amp;#39;rgba(0,0,0,0.6)&amp;#39;,
  },
});

export default styles;&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;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;&amp;lt;Text style={[styles.list,styles.listItem]}&amp;gt;テキスト&amp;lt;/Text&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;common/add.js&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;import React from &amp;#39;react&amp;#39;;
import { View } from &amp;#39;react-native&amp;#39;;
import { AdMobBanner } from &amp;#39;expo&amp;#39;;

class FooterAdd extends React.Component {
  render(){
    return (
      &amp;lt;View &amp;gt;
        &amp;lt;View &amp;gt;
          &amp;lt;AdMobBanner
            adUnitID=&amp;quot;Admobで広告を作成してそのIDをここに設定します&amp;quot; // Test ID, Replace with your-admob-unit-id
          /&amp;gt;
        &amp;lt;/View&amp;gt;
      &amp;lt;/View&amp;gt;
    )
  }
}

export default FooterAdd;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記をimportしておけば、コンポーネントとして利用できます。限りなく簡潔になっています。とりあえずアプリの下部にAdmobを出すだけならこんな感じでしょう。&lt;/p&gt;
&lt;h3&gt;app.json&lt;/h3&gt;
&lt;p&gt;app.jsonは以下のようになります。バージョンなどは自身の環境で合わせてください。
slugなどの文字列も自身の使いたいものに変更します。&lt;/p&gt;
&lt;p&gt;app.jsonを設置すれば&lt;code&gt;expo-cli build&lt;/code&gt;コマンドでビルドもできます。実際にストアにアップロードするAPKが生成できます。&lt;/p&gt;
&lt;p&gt;とりあえずAndroid版についてはこんな感じでリリースまでできることを確認しました。iOSについても引き続き実験しようと考えています。&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;{
  &amp;quot;expo&amp;quot;: {
    &amp;quot;name&amp;quot;: &amp;quot;アプリの名前&amp;quot;,
    &amp;quot;slug&amp;quot;: &amp;quot;expoで表示されるslug&amp;quot;,
    &amp;quot;privacy&amp;quot;: &amp;quot;unlisted&amp;quot;,
    &amp;quot;sdkVersion&amp;quot;: &amp;quot;32.0.0&amp;quot;,
    &amp;quot;platforms&amp;quot;: [
      &amp;quot;ios&amp;quot;,
      &amp;quot;android&amp;quot;
    ],
    &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,
    &amp;quot;orientation&amp;quot;: &amp;quot;portrait&amp;quot;,
    &amp;quot;icon&amp;quot;: &amp;quot;./assets/icon.png&amp;quot;,
    &amp;quot;splash&amp;quot;: {
      &amp;quot;image&amp;quot;: &amp;quot;./assets/splash.png&amp;quot;,
      &amp;quot;resizeMode&amp;quot;: &amp;quot;contain&amp;quot;,
      &amp;quot;backgroundColor&amp;quot;: &amp;quot;#ffffff&amp;quot;
    },
    &amp;quot;updates&amp;quot;: {
      &amp;quot;fallbackToCacheTimeout&amp;quot;: 0
    },
    &amp;quot;assetBundlePatterns&amp;quot;: [
      &amp;quot;**/*&amp;quot;
    ],
    &amp;quot;android&amp;quot;: {
      &amp;quot;package&amp;quot;: &amp;quot;google play storeで表示されるID&amp;quot;,
      &amp;quot;permissions&amp;quot;: [],
      &amp;quot;versionCode&amp;quot;: 1
    },
    &amp;quot;ios&amp;quot;: {
      &amp;quot;supportsTablet&amp;quot;: true
    }
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;React NativeとExpoを利用したアプリの雛形をまとめました。これを使えば、とりあえず動くものを見ながら開発できると思います。実際にはいろいろなコンポーネントを利用しながら開発することになると思います、よく使うものは別ファイルにして切り出すなどして再利用性を高めておくと良いです。&lt;/p&gt;
&lt;p&gt;Expoを利用すると簡単に開発ができるのでとても便利です。ネイティブなコードを使った開発もやってみたいのですが、大変そうなのでしばらくはこの環境で進めようと思います。
React Nativeと比較される存在としてFlutterというものもあります。こちらも一度試してみます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Androidアプリがポリシー違反によりストアから削除された]]></title><description><![CDATA[タイトルのまんまですが、以前作成したアプリのっティ時刻表が、突然Google Play…]]></description><link>https://honmushi.com/2019/03/13/app-policy/</link><guid isPermaLink="false">https://honmushi.com/2019/03/13/app-policy/</guid><pubDate>Wed, 13 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルのまんまですが、以前作成したアプリ&lt;a href=&quot;/lp/noty/&quot;&gt;のっティ時刻表&lt;/a&gt;が、突然Google Playストアから削除されました。&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;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;〇〇 デベロッパー各位

審査の結果、 □□は、Google Play ポリシーに違反していると判断されたため、Google Play ストアから削除されました。
このアプリは、ポリシーに準拠するアップデートをご送信いただくまで、ユーザーに配布、販売されなくなりますのでご了承ください。

削除の理由:  Android 広告 ID の使用ポリシー及び Google Play デベロッパー販売 / 配布契約 4.8 への違反

アプリが個人情報や個人情報や機密情報を扱う場合、有効なプライバシーポリシーを掲載して頂く必要があります。
お客様のアプリは Android 広告 ID の収集及び転送を行うことが確認されましたので、プライバシーポリシーを掲載して頂く必要があります。

アプリが Android 広告 ID の収集を行う場合、有効なプライバシーポリシーを Play コンソールの所定の箇所及びアプリ内に掲載して頂く必要があります。
プライバシーポリシーの中でユーザープライバシーについて明記し、URL が有効であることをご確認ください。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Google Play Consoleはこんな感じ&lt;/h2&gt;
&lt;p&gt;管理画面では「削除されたよ」という情報が上部に表示されてました。
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/94f8e0361b6295a1a49f6a36165f7d47/c9c3a/store.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 24.324324324324326%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAABFUlEQVQY03WOS0vDQBSF83O1ILhwpbvWhRsbCi4KdSX4F0R0qSi+QJESXWm1eUxenVfSdJL2eDNSXDnwcQ/MnO+Os31whN3BCDuHQ3S6Ljo9F5vdvqVDbBBb+31cXJ7h6vYedy9jPLx6lqfxG64fn9EbnmBvcEyM4ERxgiQIEHgepp8TZIwhZ/EfUWQRMYNMYsg0BaechoHtpQSjTuthhCOVQik4dBQimpAwZCjyGZFDZzkUSRQJBJU4iyApJ75vl7PvL6T+FIrPoMijpITDOYek0M6qqrBsatTGoKnX1JbaToPFwuD05gPu+Tt8lmFeaAjx22+xQq01mqbBcrXCf6e9M62Y3nE9RyYLFGUJQ8vXHxJC4AdSDGk5oR+GjwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;管理画面の表示&quot;
        title=&quot;管理画面の表示&quot;
        src=&quot;/static/94f8e0361b6295a1a49f6a36165f7d47/fcda8/store.png&quot;
        srcset=&quot;/static/94f8e0361b6295a1a49f6a36165f7d47/12f09/store.png 148w,
/static/94f8e0361b6295a1a49f6a36165f7d47/e4a3f/store.png 295w,
/static/94f8e0361b6295a1a49f6a36165f7d47/fcda8/store.png 590w,
/static/94f8e0361b6295a1a49f6a36165f7d47/efc66/store.png 885w,
/static/94f8e0361b6295a1a49f6a36165f7d47/c83ae/store.png 1180w,
/static/94f8e0361b6295a1a49f6a36165f7d47/c9c3a/store.png 1289w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;アプリ用のプライバシーポリシーを設置&lt;/h2&gt;
&lt;p&gt;とりあえずポリシーのURL設定しなくてもストアで公開ができたのでそうしていましたが、やっぱり必要ということでした。ときに広告表示にAdmobを利用しており、それがAndroid広告IDを取得するので、必ず必要ということでした。&lt;/p&gt;
&lt;p&gt;対応は以下の2点です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プライバシーポリシーを作成してストアのアプリ情報にURLを登録&lt;br&gt;
いろんなサイトや他のデベロッパーの方を参考にして、以下の画面を用意しました。&lt;br&gt;
&lt;a href=&quot;/app/policy/&quot;&gt;アプリケーション・プライバシーポリシー&lt;/a&gt;&lt;br&gt;
私のアプリでが広告配信のためにAdmobを利用しているので、そのことは必ず書く必要があります。その上で、ストアのアプリ情報にURLを設定します。&lt;/li&gt;
&lt;li&gt;アプリ内にプライバシーポリシーを設置&lt;br&gt;
アプリ内に上記ページへのリンクを設置するのでもいいらしいのですが、何故かまたすぐ削除されました。リンクがわかりにくかったとか、外部ブラウザで開くのが良くない？のかと思います。&lt;br&gt;
ですので、アプリ内にページを作成しました。書いてある内容は上記にプライバシーポリシーと同じです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;解決&lt;/h2&gt;
&lt;p&gt;アプリのアップデートを行うと、削除状態が解消され公開されます。これで問題なければそのままで、引き続き問題がある場合は、次の日にはまた削除状態になっていました。現在は公開状態なので、問題は解決できたようです。&lt;/p&gt;
&lt;p&gt;Googleから届くメールを読めば解決できるような簡単なものなので、落ち着いて対応すれば問題ないです。
似たような状況になった人は参考にしてもらえばと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[自己分析用の質問集がすごい『メモの魔力』]]></title><description><![CDATA[SHOWROOM…]]></description><link>https://honmushi.com/2019/03/11/memonomaryoku/</link><guid isPermaLink="false">https://honmushi.com/2019/03/11/memonomaryoku/</guid><pubDate>Mon, 11 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SHOWROOM代表の前田裕二さんが書いた本です。&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;/p&gt;
&lt;p&gt;メモの使い方や書き方は本に詳しく載っていますのでそちらを参考にしてください。色の使い方とか、見開きにして使う際のコツなどが書かれています。本の中には著者のメモの写真等も載っているので、参考になると思います。&lt;/p&gt;
&lt;h2&gt;自分を知るためのメモ&lt;/h2&gt;
&lt;p&gt;人生の軸を見つけるためにもメモを利用しています。すなわち自己分析を行うということです。今やりたいことや将来の夢などをメモとして書き出し、未来の予定などを作っていきます。&lt;/p&gt;
&lt;p&gt;メモに書き出していくことで寄り具体的になりますし、見つめ直す時間ができます。取るべき行動を具体化・言語化することでモチベーションを高めることにもつながります。&lt;/p&gt;
&lt;h2&gt;巻末には自己分析用の質問&lt;/h2&gt;
&lt;p&gt;自己分析を行うための膨大の数に質問が載っています。
大学のときの就活の際にやってから、それっきりという人が多いかなと思います。著者もこれをこなしたそうです。自分自身を知るために、時間を取って取り組んでみると良いです。&lt;/p&gt;
&lt;p&gt;他にも、沢山の人にSNSで聞いた「人生の軸」の紹介があります。自分にとっての人生の軸は何かを考えてから、一通り目を通してみると何か発見があるかもしれません。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;メモを取ることのパワーとそのやり方が乗っており、積極的に取り入れたいテクニックだと思いました。
新しいことを知ったときには、その用法や応用をしっかりとイメージして記録しておことが大切なようです。そうしないと、せっかくの知識も使われずに忘れられていくだけになります。&lt;/p&gt;
&lt;p&gt;プログラミングで新しい技術や知識に触れることは多いですその都度何に応用できるか、どんな使い方が思いついたかを残しておきたいと思います。&lt;/p&gt;
&lt;p&gt;日常から得られることや気付きは、見逃しているだけで本当は山ほどおちているのではないかと思います。それらを見逃さずに何かに活かすためにも、細かくメモを取り続ける癖をつけておくといいかなと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】観察力を磨く 名画読解]]></title><description><![CDATA[数々の名画を始めとするアートに対して分析を行うことで、知覚の技法と呼ばれる…]]></description><link>https://honmushi.com/2019/03/06/meigadokkai/</link><guid isPermaLink="false">https://honmushi.com/2019/03/06/meigadokkai/</guid><pubDate>Wed, 06 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;数々の名画を始めとするアートに対して分析を行うことで、知覚の技法と呼ばれる4つの能力を身に着けます。
美術館などに行って絵が見たくなるとともに、いろいろなところで観察力を発揮したい欲求が湧いてきます。&lt;/p&gt;
&lt;p&gt;この本では「知覚の技法」と呼ばれるものが登場します。それは、大きなくくりで言えば観察・分析・伝達・応用の4つの核を持っています。&lt;/p&gt;
&lt;p&gt;FBIの訓練や医者の指導などにも用いられているらしく、エピソードの中には物々しいものもあります。ですが、あまり身構えずにラクな気分で読んで問題ありませんでした。基本的にはアートの知識など全くない状態でも読むことができます。&lt;/p&gt;
&lt;p&gt;絵や物事から核となる情報を見つけることはもちろん、優先順位をつけて整理すること、結論を導き誰かに伝えるところまでが一連の技として紹介されています。
「見つけること」と「伝えること」の比重が同じくらいになっており、さまざまな場面で活かせる内容だと感じました。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/415209642X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=415209642X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=4b5ef8f85019802aa2b933827a703617&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=415209642X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=415209642X&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&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&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;h2&gt;優先順位をつけて区別する&lt;/h2&gt;
&lt;p&gt;情報に正しい優先順位をつけるために、日頃自分はどんな優先順位の付け方をしているのかを把握することから始めます。&lt;/p&gt;
&lt;p&gt;脳には特徴的なところへ無意識に集中してしまう機能があります。そのため、ありきたりな部分は見落としてしまうことが多いです。重要な情報はそういったところにひそんでいることが多く、それを見落とさないためのコツや意識の方法が書いてあります。&lt;/p&gt;
&lt;h2&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;3つのR、リピート・リネーム・リフレイムによって落ち着いて解釈することができます。すぐに結論へ急がずに、ゆっくりと一呼吸をおいてから前に進むと良いです。&lt;/p&gt;
&lt;h2&gt;応用する&lt;/h2&gt;
&lt;p&gt;未完成の仕事があると、気が散ったり気なってストレスになります。未完成のものを完成したもののように扱う技術を憶えることでこの心配事を減らすことができます。&lt;/p&gt;
&lt;p&gt;具体的な方法は、そのタスクの数や内容を確認して優先順位をつけ、対応の計画を立ててしまうことでした。そうすることで、未完成のストレスから開放され、目の前のことに集中できます&lt;/p&gt;
&lt;h2&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></item><item><title><![CDATA[【おすすめ読書】沈黙のWebライティング]]></title><description><![CDATA[沈黙のWebマーケティングの続編です。
SEOについて書かれた本です。 客足が遠のいている旅館がテーマで、経営を立て直すためにSEOに注力します。
ざっくりとはSEO…]]></description><link>https://honmushi.com/2019/03/05/webwriting/</link><guid isPermaLink="false">https://honmushi.com/2019/03/05/webwriting/</guid><pubDate>Tue, 05 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/2019/01/29/webbone/&quot;&gt;沈黙のWebマーケティング&lt;/a&gt;の続編です。
SEOについて書かれた本です。&lt;/p&gt;
&lt;p&gt;客足が遠のいている旅館がテーマで、経営を立て直すためにSEOに注力します。
ざっくりとはSEOを意識したオウンドメディアの作り方についてです。&lt;/p&gt;
&lt;p&gt;人物の会話がメインで漫画のようにスラスラ読めるので、難しい本はちょっと苦手という方におすすめです。
Web関連の基本的な知識などは省略して、Seoを意識したライティングの内容に絞られています。基本的には前作を読んだ上でこちらを読むのがいいと思います。読んでなくても問題は無いです。&lt;/p&gt;
&lt;h2&gt;オウンドメディアの運用&lt;/h2&gt;
&lt;p&gt;本ではサイトのコンテンツの書き直しと、オウンドメディアの作成に取り組むことで、SEO力を上げ集客・宿泊予約を増やすという方針になっています。&lt;/p&gt;
&lt;p&gt;お店を経営している方であれば、Webでの集客について考えたときによく出てくる施策だと思います。参考にできるところが多いのではないでしょうか。
自分で作成するという場合でも、誰かに依頼して作成する場合でも、両方の場合で参考になることが書かれています。&lt;/p&gt;
&lt;p&gt;これからやってみようという方、続けているけど思ったより効果が出ないという方は一度読んでみると良いです。&lt;/p&gt;
&lt;p&gt;ライターとしての取材のコツやライティングのコツなんかも書かれているので、ライターの人にとっても大いに参考になる情報です。
今時ありがちな引用や著作的な問題についても触れられているので、気をつけておきたいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;漫画調になっているのでサクサク読めます。SEOなどの難しい話が苦手という方でも読みやすいです。細かいテクニックであったり、場面や場合ごとの対策方法などは詳細に書かれていないので、そちらが知りたい場合は別のほなお探したほうが良いです。&lt;/p&gt;
&lt;p&gt;SEOライティングの導入として参考にすると良いです。その上で、本に書いてあることを一つ一つ意識して取り組むことができると、効果の改善が見込めると思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】エクストリームプログラミング]]></title><description><![CDATA[より良いソフトウェア開発のために考えられた「エクストリームプログラミング」という考え方です。 ペアプログラミングやTDD…]]></description><link>https://honmushi.com/2019/03/05/extremeprogramming/</link><guid isPermaLink="false">https://honmushi.com/2019/03/05/extremeprogramming/</guid><pubDate>Tue, 05 Mar 2019 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;h2&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;h2&gt;チームでの活動&lt;/h2&gt;
&lt;p&gt;私もペアプログラミングを体験したことがあります。最初はなれるまでに少し緊張感がありますが、慣れてしまえば快適です。発展形としてモブプラグラミングというものもあります。
快適に行うためにはお互いの信頼・尊重であったり、快適なコミュニケーションが大切です。&lt;/p&gt;
&lt;p&gt;ペアの2人のレベルが違っていても、互いに得られることがあるのでおもしろい発見もあります。
学校でプログラミングの授業をするのであれば、ペアプログラミングの形式がいいんじゃないかなあと思います。二人ペアで何かやるってちょっと珍しい経験でもありますし、協調性とかも学べると思います。&lt;/p&gt;
&lt;h2&gt;一見遠回りに見えるもの&lt;/h2&gt;
&lt;p&gt;エクストリームプラグラミングに出てくる施策は、パット見では遠回りに見えたりリソースを余計に使うのではないか？という感覚もあります。しかし、実際にやってみると、手戻りが減るとか不具合が減るとか仕様の共有が快適とか、さまざま利点に気づくことができメリットが大きいです。やってみないと信じられないような大きな効果があります。結果だけに目が向いてしまいがちですが、その過程にも目を向けるとメリットがわかりやすいと思います。実際に取り組むエンジニアにとっても、これは良い印象だと思います。&lt;/p&gt;
&lt;p&gt;概念をしっかり理解した上でエクストリーム・プログラミングに取り組むことで、プログラミングがチームで取り組むことであること、何度も書き直していく必要があること、納品して終わりではなくその後も動き続け運用・改修されていくものであること、などが改めて意識できます。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;このようなエンジニアの環境を良くしよう、という取り組みは常に現れ続けています。最善のやり方というのは時代や場所によって全然違うものなのでしょうが、それを探し続けようという意志はおもしろいです。&lt;/p&gt;
&lt;p&gt;プロダクトを作る・納品することのみに注力するのではなく、より良い作り方を探そうという性格もプログラマ特有の考えなのかなと思います。&lt;/p&gt;
&lt;p&gt;成長と変化を続けるプログラマの世界はどこまで広がっていくのか楽しみです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[映画を見てITの勉強ができる『「アポロ13」に学ぶITサービスマネジメント』]]></title><description><![CDATA[映画「アポロ13」を見ることでITILの実践方法を学ぼうという本です。もっと大きく言えばITサービスマネジメントについて学ぶことができます。 映画の内容について触れている本でもありますので、ネタバレでもあります。その部分については理解して読みましょう。 映画「アポロ1…]]></description><link>https://honmushi.com/2019/03/04/aporo13/</link><guid isPermaLink="false">https://honmushi.com/2019/03/04/aporo13/</guid><pubDate>Mon, 04 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;映画「アポロ13」を見ることでITILの実践方法を学ぼうという本です。もっと大きく言えばITサービスマネジメントについて学ぶことができます。&lt;/p&gt;
&lt;p&gt;映画の内容について触れている本でもありますので、ネタバレでもあります。その部分については理解して読みましょう。&lt;/p&gt;
&lt;h2&gt;映画「アポロ13」とは&lt;/h2&gt;
&lt;p&gt;アポロ13は、宇宙船で月へ行き地球に帰ってくるまでの実話をもとに再現した映画です。
宇宙の旅ではさまざまな事故が発生し、無事に変えることができるのかという状況になります。
それを解決していくNASAや宇宙飛行士の事例を学ぶことができます。&lt;/p&gt;
&lt;p&gt;ITILを題材にした映画ではもちろんありません。しかし、映画内で発生する数々の問題への対応が、結果的にITサービスマネジメントと似た方式担っているところに着眼しています。さまざまな場面をメタファーとして利用して、ITILの詳細を説明するという方針になっています。
もともと面白い映画ですし、ITサービスマネジメントの理解・説明する際のメタファーとしても参考になります。&lt;/p&gt;
&lt;p&gt;ちなみにニール・アームストロングが人類で初めて月面に着陸したやつはアポロ11号です。
13号は途中で事故が起こり月面着陸は断念、しかし、さまざまな危機を乗り越え乗組員が無事に地球へ帰ることができたやつです。&lt;/p&gt;
&lt;h2&gt;ITILとは&lt;/h2&gt;
&lt;p&gt;ITサービスマネジメントの教科書的な存在です。&lt;br&gt;
&lt;code&gt;ITIL：IT Infrastructure Library&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;英国政府が1980年代にまとめた成功事例集です。現在では改訂され、ITサービスマネジメントのベストプラクティスという立ち位置になっています。&lt;/p&gt;
&lt;p&gt;戦略・設計・移行・運用の4段階のライフサイクルとして捉えています。
戦略や運用の知識が多く、具体的な技術などは出てきません。SEの人でも興味のある人とない人で別れるような印象です。&lt;/p&gt;
&lt;h2&gt;アポロ計画の背景&lt;/h2&gt;
&lt;p&gt;映画では語られないアポロ計画の細かい知識などが書かれています。映画を見るときの予備知識として、参考になります。ソ連とアメリカの宇宙開発における関係や、以前の実験や成果などが紹介されています。純粋に映画を見る前の知識としても面白いです。&lt;/p&gt;
&lt;h2&gt;インシデント管理&lt;/h2&gt;
&lt;p&gt;映画の中ではインシデント対応の箇所の盛り上がりが大きく見どころです。基本的にはこれらのエピソードからさまざまな考察をしていくことになります。
宇宙船ではさまざまな問題が発生します。搭乗員の命に関わるような緊迫した状況で、管制センターとやり取りしながら冷静に対応を行います。
実際のインシデントでは、原状復帰を急いで行うのか再発防止のために根本原因を調査するのかといった選択を行います。その時の焦りや困惑は似たものがあるのかなと思いました。&lt;/p&gt;
&lt;h2&gt;ITILに即していないところもある&lt;/h2&gt;
&lt;p&gt;SLAなどの約束事については、映画の中では詳細に語られていません。本の中でも、このあたりの約束事はITILに沿って進められてはいなかったのかなと予測されています。このように、いくつかITILの参考にならない部分もありますが、それに関しては「もしもNASAがITILに沿って進めていたら」という形で解説されています。&lt;/p&gt;
&lt;p&gt;「あの時ああしていれば」という反省から次に活かしていくことは、サービス運用においては重要な考え方です。PDCAの様に改善サイクルを回していくことは本の中でも説明されていますし、アポロ計画でもそれまでの蓄積された経験や知識を使っています。&lt;/p&gt;
&lt;p&gt;運用管理をしていくなかで、より最適な状態に改善していくことを目指しましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;映画を見ながらITILの勉強にすることは、とてもおもしろい試みだと思います。運用に関する研修とか、新人研修とかに良いと思います。他にも勉強になる映画があるかもしれません。そういった目線で映画を楽しむのも良いかなと思いました。&lt;/p&gt;
&lt;p&gt;アポロ13はすごく昔に見たことがあるのですが、このような観点を持って見ていませんでした。そのため、この本のような学びはまったくありませんでした。いい下界なので時間を取ってもう一度見てみようと思います。後日、感想を追記しようと思います。&lt;/p&gt;
&lt;p&gt;あとITILの資格とかも勉強してみようと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】論理トレーニング101題]]></title><description><![CDATA[論理的な思考力を鍛えるためのトレーニングです。
文章に対して適した接続詞を選ぶ、前提となっている内容を取り出す、正しい論証を把握する、などの問題と解説が主な内容です。 タイトルの通り問題が10…]]></description><link>https://honmushi.com/2019/03/04/ronritre101/</link><guid isPermaLink="false">https://honmushi.com/2019/03/04/ronritre101/</guid><pubDate>Mon, 04 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;論理的な思考力を鍛えるためのトレーニングです。
文章に対して適した接続詞を選ぶ、前提となっている内容を取り出す、正しい論証を把握する、などの問題と解説が主な内容です。&lt;/p&gt;
&lt;p&gt;タイトルの通り問題が101問、それぞれに丁寧な解説が書かれています。
論理的な思考はさまざまな場面で必要になると思います。この本では文章を読み解く力を学び、論理的に考える力を伸ばすことができます。アルゴリズムとか、図解とか、他にも論理的な考え方を学ぶ方法はあると思います。いろいろなものに触れてみることが大切だと思います。&lt;/p&gt;
&lt;h2&gt;論理トレーニングは難しくておもしろい&lt;/h2&gt;
&lt;p&gt;論理的なトレーニングをするための文章問題とは、ざっくりとは国語のテストのようなイメージです。
国語のテストとなんてほとんど覚えていませんが、やってみると結構難しいです。「ただし」と「しかし」の違いとか、普段あまり意識していないことであったり、どっちでもいいけど文脈を読むとこっちのほうがいいみたいなものもあります。
しっかりとそこに至るまでの文脈と、後に出てくる内容の文脈を踏まえて考えることが必要になります。&lt;/p&gt;
&lt;p&gt;先にも書いているとおり、国語のテストのような感覚です。なぞなぞやクイズとは脳の違う部分を使っている気がしておもしろいです。しかも、大人になって語彙力も上がれば、取り扱うテーマも豊富になっていますので、難易度も上がっている印象です。ただ衰えただけという可能性もありますが、実際はどうなんでしょうか。センター試験とか受けてみると如実にわかりそうです。&lt;/p&gt;
&lt;h2&gt;大人でも仕様の説明や報告には必要&lt;/h2&gt;
&lt;p&gt;プログラマであっても、仕様書などテキストとして残すための文章を書くことは多いです。
そのときに、相手にどう伝わるかとを考えながら書けるようになります。間違って伝わってしまったり、論理的でなくわかりにくい文章になることを防げます。
社会人になって早いうちに身に着けたい能力、その中の一つです。
そう考えると学校で習った現代文の授業なんかは、とても大切な授業だったんだなあとあらためて感心します。&lt;/p&gt;
&lt;p&gt;プログラミングを行う際にも論理的な考え方は役に立ちます。機械に対してプログラムの指示で動いてもらうので、正しく伝えなければいけません。論理的に簡潔で正しい言葉を選ぶ必要があります。
この本のような論理的な思考力のトレーニングは、良いプログラムを書くためのトレーニングにもつながります。&lt;/p&gt;
&lt;h2&gt;読解力のトレーニングになる&lt;/h2&gt;
&lt;p&gt;読解力という部分でも役に立ちます。文章を作成した人が何を伝えようとしているのか、どこがわかりにくいのかといったことが判断できる用になります。長い文章の中で本当に伝えたい部分を把握することにもつながるので、速読なども得意になると思います。&lt;/p&gt;
&lt;p&gt;文章の中で省略されてしまって隠れている前提や本意もわかるようになります。普段なんとなく聞き流している新聞やテレビのニュースを始め、さまざまな言論に対してより深い観点をもつことができます。&lt;/p&gt;
&lt;h2&gt;演繹や推測といった考え方に触れる&lt;/h2&gt;
&lt;p&gt;数学や科学っぽいですが、演繹などの書き方についても学ぶことができます。普通に生活しているとほぼ意識することは無いと思いますが、知らず知らずのうちに見ている・使っていると思います。&lt;/p&gt;
&lt;p&gt;普段は意識していないため、怪しい文章や間違った文章に対して、なんとなくそうだなと納得してしまうことがあります。この本を読んで意識しながらさまざまな文章を眺めると、あれ？間違っているなとか、最初の話からすり替えられた気がするなとか、指摘の内容がずれているなといったことに気づけるようになります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;問題は結構むずかしいです。もちろん人によりますが。大人になってよく文章を書いているという人でも難しいと思います。論理的な思考力を鍛えるためにとてもいい本です。かなり頭を使いますがその分トレーニングになります。&lt;/p&gt;
&lt;p&gt;学校でもたくさん学んだように思っていましたが、大人になってもまだまだ学ぶことが多いことがわかります。「大人のための国語の教科書」のような印象で、とても勉強になりました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】ライト、ついてますか 問題発見の人間学]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/03/01/tsuitemasuka/</link><guid isPermaLink="false">https://honmushi.com/2019/03/01/tsuitemasuka/</guid><pubDate>Fri, 01 Mar 2019 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;h2&gt;問題とは、望まれた事柄と認識された事柄の間の相違&lt;/h2&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;どこからきたのか？&lt;/li&gt;
&lt;li&gt;本当にそれを解きたいのか？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;問題に飛びつく前にこれらを考えることで、より真の問題にたどり着けるはず、というものです。
このリストはとても参考になります。問題を定義するタイミングで、毎回振り返って読み直してみるのがいいと思います。&lt;/p&gt;
&lt;h2&gt;ライト、ついてますか&lt;/h2&gt;
&lt;p&gt;タイトルの言葉は中盤に出てくるエピソードです。
解答があまりにも難解で、これでは解決できないとき。解決方法そのものは簡単な操作で各人の頭の中にあることでした。なので、必要な場面・タイミングで問題を思い出させることができればよかった。&lt;/p&gt;
&lt;p&gt;長々と解決方法を示すのではなく、気づいていない問題を思い出させることにした。というものです。
問題を正しく捉えることで、思ったよりも簡単に解決ができたというエピソードです。&lt;/p&gt;
&lt;h2&gt;設計者や意思決定者が責任を追っているはずの問題を体験していないこと&lt;/h2&gt;
&lt;p&gt;偉い人や、管理する人が問題に対してなかなか動かないのはこういった理由があるようです。
利用する人たちは問題の存在をはっきりと認識しているのですが、管理する人や責任を持っている人はそれを利用しておらず、問題に気づいていません。そのため、解決への意欲が低く優先度も低くなります。&lt;/p&gt;
&lt;h2&gt;問題はどこから来たのか&lt;/h2&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;p&gt;問題解決に挑む際の心得であったり、真の問題を探すための良い指針になります。
タイトルからはあまり感じないかもしれませんが、有名な本でありとても参考になることが多いです。&lt;/p&gt;
&lt;p&gt;エンジニアでもデザイナーでも、タスクの本当の目的やゴールを正しく捉えることができると、より活躍できそうだと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】人生は運よりも実力よりも「勘違いさせる力」で決まっている]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/28/kanchigai/</link><guid isPermaLink="false">https://honmushi.com/2019/02/28/kanchigai/</guid><pubDate>Thu, 28 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;人間が無意識に判断してしまう「錯覚資産」についての本です。
錯覚資産がどういうものなのか、それによってどんな誤った判断をしているのかということについて。そして、それに踊らされない、使いこなすにはどうすればいいのかといったことが書かれています。&lt;/p&gt;
&lt;h2&gt;錯覚資産&lt;/h2&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;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;/p&gt;
&lt;p&gt;または、コントロールできなかったことから目を背けて、コントロールできていることだけ取り上げて、うまく行っているト思い込むこともあります。&lt;/p&gt;
&lt;h2&gt;判断が困難な時、思考を放棄してデフォルト値を選んでしまう&lt;/h2&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;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;p&gt;好きなものはメリット大・リスク小と判断してしまい、嫌いなものはメリット小・リスク大だと判断してしまいます。
メリット・リスク・好みのどこか一つでも変化すると、他のパラメータもそれに引っ張られて勘違いしてしまいます。これを利用することも、錯覚資産の利用になります。&lt;/p&gt;
&lt;p&gt;メリットを伝えるためには好きになってもらうことが重要です。&lt;/p&gt;
&lt;h2&gt;うまく生きるためには&lt;/h2&gt;
&lt;p&gt;主張するときは一貫して片寄ったストーリーを語る。そのほうが説得力がありおもしろくなります。何事もいろいろな面を持っているはずですが、それらの情報を全部知るとややこしくなります。
一方の面だけを強く語ることで、聞きやすく説得力のある内容になるわけです。&lt;/p&gt;
&lt;p&gt;しかし、それとは逆に自分の人生の選択の場合は、徹底的に正しい判断をすることにこだわるべきです。多面的な情報をしっかり聞き分け、論理的に選びましょう。自分の内側と外側を分けて、判断を二重化する必要があります。錯覚資産を使いこなすためのコツです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;以下、脳が判断する際の性質です。どれも無意識にやってしまうので自覚することがあまりないです。まずはこのことを知り無意識の存在に気づくことが重要です。それを利用して、錯覚資産を築きあげていくことが成功の秘訣のようです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一貫性を求める&lt;br&gt;
一貫しているものが好きで、一貫していない場合は記憶を書き換えて一貫だったようにする。&lt;/li&gt;
&lt;li&gt;原因を求める&lt;br&gt;
原因があくまでも運であっても、原因を無理やり作ってしまう。運以外の何かを重要視したい。&lt;/li&gt;
&lt;li&gt;結論を急ぐ&lt;br&gt;
データが足りなくても、それが全てだと思い込み結論を出す。
すぐに思い出せないデータは、なかったものとしてしまう。
デフォルト値を選んでしまう。&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】理科系の作文技術]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/26/rikakei-sakubun/</link><guid isPermaLink="false">https://honmushi.com/2019/02/26/rikakei-sakubun/</guid><pubDate>Tue, 26 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;論文やレポートの書き方です。コツはどれも理系らしい考え方になっています。論理的に考えることは仕事の面でも大いに役に立ちます。&lt;/p&gt;
&lt;p&gt;理系の大学で卒検とかをやった場合はたいていこの本に出会っていると思います。
以下に参考になりそうな箇所をまとめてみました。&lt;/p&gt;
&lt;h2&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&gt;文の構造 レゲットの木&lt;/h2&gt;
&lt;p&gt;日本語の文章は、枝葉が先に出てきて最後まで読んでやっと幹の部分がわかります。逆茂木の形になっているそうです。&lt;br&gt;
それに対してわかりやすい文章というのは、幹の部分が最初に書いてあり、枝葉が後から出てきて補足します。&lt;/p&gt;
&lt;p&gt;以下のようなレゲットの木と呼ばれる図がとてもわかり易いです。左から読み進んでいくイメージです。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 385px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f04c138e607f2ddcee67cf530336cb2a/409e6/rikakei-sakubun-ogp.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 99.32432432432432%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAABfUlEQVQ4y4WUaa7DIAyEuf/5eoH+SJWtWbuk2fzeh2REECFIlNTY47E9iZH/te+7hMu3xZ5jMSyjF9/vV6qqkmmaZNs2a+NclsU9+2CXgASu6yrDMEhZli5wHEd5vV7y+/3s8xVLE8tG4DzPLqhtWymKQrIsk8/nc2DpbwsY9qbvexsMiC7AYQ9L3x7ru2maxvZOA+khgV3XSV3X8n6/XS85aQkVkAB/7GzHkH7BCBDYPZ9PeTweFohgQAHgP73kzPPc+ig4WwfpSsYAK5x9mw6MRADgo32MlswPAWSBDaVo+ff73bKnLdxxIq/LocTGDwtKJAFgtMNncqZJE16EDjBSccdYheDmLFsIfCbm0Mek+pFiw3BC5ocph4tSkcjZnWqXPqNdxxAd3m43O1Uaz+YVQz7IRG2qOSbNveqV+IMOmSZTVL3pxoENG0DIzsT1IwJDlRD/L0v2F2VpsC7KhGFU2KkhqN3/yuhbFH55kgxjMknZnLBTpZ7pM6XZPx1hJaKsPcHsAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;レゲットの木&quot;
        title=&quot;レゲットの木&quot;
        src=&quot;/static/f04c138e607f2ddcee67cf530336cb2a/409e6/rikakei-sakubun-ogp.png&quot;
        srcset=&quot;/static/f04c138e607f2ddcee67cf530336cb2a/12f09/rikakei-sakubun-ogp.png 148w,
/static/f04c138e607f2ddcee67cf530336cb2a/e4a3f/rikakei-sakubun-ogp.png 295w,
/static/f04c138e607f2ddcee67cf530336cb2a/409e6/rikakei-sakubun-ogp.png 385w&quot;
        sizes=&quot;(max-width: 385px) 100vw, 385px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;結論を最初に書くとか、枝葉を広げすぎない、一度に荷物を載せすぎないなど、たくさんのノウハウがこの木に詰まっていると思います。&lt;/p&gt;
&lt;p&gt;文章を書くときには、この木をイメージしながら書くとわかりやすいです。この本で一番のおすすめの考えです。&lt;/p&gt;
&lt;p&gt;両方の良いところを使って書くのが理想なのですが、難しければ思い切ってBの木を目指すのがいいです。面白くはないけど、端的でわかりやすくなります。&lt;/p&gt;
&lt;h2&gt;わかりやすく簡潔に書く&lt;/h2&gt;
&lt;p&gt;簡潔になるべく短く書きます。とりあえずこれを意識するところが最初の一歩です。気づくと文章は長くなりがちですし、余計な部分が多くなります。細かいテクニックもいくつかありますが、まずはこのことに気づき意識して改善していくことが効果的です。&lt;/p&gt;
&lt;p&gt;さらには、読者がどんな意味に捉えるか、あらゆる可能性を考えられると良いです。これについてはどうすれば一意な文章になるのかという具体的なテクニックはさすがに書かれていません。経験などで身につけていくしかないのでしょうか。それでも短く簡潔に書くということは、そこに少しは近づくことができると思います。&lt;/p&gt;
&lt;h2&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></item><item><title><![CDATA[React NativeとExpoでアプリをリリース]]></title><description><![CDATA[React NativeとExpoを利用して「のっティ時刻表」アプリを作成しリリースしました。
Expoを利用したビルドから、Android版アプリのリリースまでの概要を記載しています。 同じようにReact Nativeでクロスプラットフォーム開発がしたいという方、Expo…]]></description><link>https://honmushi.com/2019/02/25/make-app-expo/</link><guid isPermaLink="false">https://honmushi.com/2019/02/25/make-app-expo/</guid><pubDate>Mon, 25 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React NativeとExpoを利用して「のっティ時刻表」アプリを作成しリリースしました。
Expoを利用したビルドから、Android版アプリのリリースまでの概要を記載しています。&lt;/p&gt;
&lt;p&gt;同じようにReact Nativeでクロスプラットフォーム開発がしたいという方、Expo使うとどんな感じなのかと悩んでいる方の参考になればと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/lp/noty/&quot;&gt;リリースしたアプリ-のっティ時刻表&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;結論を先に言うと&lt;/h2&gt;
&lt;p&gt;React native+Expoを用いることで簡単なアプリですがすぐできました。ビルド・リリースも簡単でした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expoを使うことで、プログラムの変更を即時エミュレータやテスト端末に反映させることができる（ホットリロード機能）&lt;/li&gt;
&lt;li&gt;コンポーネントが用意されているので、そのまま利用するだけでもそこそこ完成する&lt;br&gt;
広告を表示するためのAdmobのコンポーネントなどを利用しました&lt;/li&gt;
&lt;li&gt;最後までExpoを使うことでビルドも簡単、ストア認証用の鍵情報なども管理してくれる&lt;/li&gt;
&lt;li&gt;一つのプログラムでAndorid・iOS両方のアプリが実装できる&lt;/li&gt;
&lt;li&gt;まだ経験できていないが、Expo使っているとできないことや不便になることがあります&lt;br&gt;
ネイティブAPIについて、Expo側で用意されているものしか利用できません&lt;br&gt;
その場合はビルド前にExpoを取り除いてから、自分で開発してビルドすることになります&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Expoを使ってみる&lt;/li&gt;
&lt;li&gt;Expoアプリをスタート&lt;/li&gt;
&lt;li&gt;実機で動作確認&lt;/li&gt;
&lt;li&gt;ビルド&lt;/li&gt;
&lt;li&gt;Google Playへアップロード・必要事項を入力&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Expoを使ってみる&lt;/h2&gt;
&lt;p&gt;「Snack」というWebIDEを使うことでお手軽に始めることができます。&lt;br&gt;
最終的にはローカルのIDEをやエディタを利用したほうがいいですが、動作や使い勝手を試してみると言うくらいならこちらでも十分です。&lt;/p&gt;
&lt;p&gt;こちらは「React Native 入門」という本を参考に行いました。記事にしていますので参考にどうぞ。&lt;br&gt;
&lt;a href=&quot;/2019/01/31/react-native/&quot;&gt;【実践技術書】React Native 入門&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798056057/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798056057&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=96a9ffb44408a92e1432b5e6edda7fe0&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4798056057&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4798056057&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&gt;Expoアプリをスタート&lt;/h2&gt;
&lt;p&gt;npmでReact NativeやExpoをインストールします。&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 -g react-native expo-cli create-react-native-app&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;そして「create-recat-native-app my-native-app」コマンドで、ローカルにアプリの雛形が生成されます。ここでプログラミングをしてアプリを作成します。&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;権限関係のエラーでうまく行かない場合はnodeやnpmのバージョンが影響していることがあります。  
私も発生しましたが「nvm」をインストールして、nvm経由でnode・npmを再インストールしたところ治りました。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このタイミングでgithubなどにリポジトリを作っておきましょう。&lt;/p&gt;
&lt;h2&gt;実機で動作確認&lt;/h2&gt;
&lt;p&gt;エミュレータを使ってPCで確認することができますが、自身の端末に「Expo」というアプリを入れると実機での動作確認することができます。 &lt;a href=&quot;https://play.google.com/store/apps/details?id=host.exp.exponent&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=host.exp.exponent&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PC側のアプリの開発ディレクトリで「npm start」コマンドを実行すると、QRコードが表示されます。テスト端末でExpoを起動して、QRコードを読み込むと開発中のアプリが動きます。&lt;/p&gt;
&lt;p&gt;Expoアプリ経由でPCとLANで接続し、アプリのソースをダウンロードして実行します。そのため同じネットワーク内でアクセスしないとできません。&lt;/p&gt;
&lt;p&gt;ホットリロード機能があり、PC側でプログラムを修正すると即時実機に反映されます。
開発の効率がよくなりとても便利でした。Android・iOSどちらでも利用できるようなので、開発の際にはこの方法がおすすめです。&lt;/p&gt;
&lt;h2&gt;ビルド&lt;/h2&gt;
&lt;p&gt;app.jsonに必要な項目を追加編集します。&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;{
    &amp;quot;expo&amp;quot;: {
        &amp;quot;name&amp;quot;: &amp;quot;アプリの名前&amp;quot;, // 日本語で問題なし
        &amp;quot;slug&amp;quot;: &amp;quot;Expoで管理する際のslug&amp;quot;, // 半角英数とハイフン
        &amp;quot;privacy&amp;quot;: &amp;quot;public&amp;quot;, // Expoで公開するかどうか
        &amp;quot;sdkVersion&amp;quot;: &amp;quot;32.0.0&amp;quot;, // sdkのバージョン、create-recat-nativeコマンドで生成したときのまま
        &amp;quot;platforms&amp;quot;: [
            &amp;quot;ios&amp;quot;,
            &amp;quot;android&amp;quot;
        ],
        &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;, // 
        &amp;quot;orientation&amp;quot;: &amp;quot;portrait&amp;quot;, // 画面の縦・横持ちの設定 &amp;#39;default&amp;#39;, &amp;#39;portrait&amp;#39;, &amp;#39;landscape&amp;#39;
        &amp;quot;icon&amp;quot;: &amp;quot;./assets/icon.png&amp;quot;, // アプリのアイコン
        &amp;quot;splash&amp;quot;: { // アプリの起動時の画面
            &amp;quot;image&amp;quot;: &amp;quot;./assets/splash.png&amp;quot;,
            &amp;quot;resizeMode&amp;quot;: &amp;quot;contain&amp;quot;,
            &amp;quot;backgroundColor&amp;quot;: &amp;quot;#ffffff&amp;quot;
        },
        &amp;quot;ios&amp;quot;: {
            &amp;quot;supportsTablet&amp;quot;: true
        },
        &amp;quot;android&amp;quot;: { 
            &amp;quot;package&amp;quot;: &amp;quot;google playで管理する際のslug&amp;quot;, // 半角英数とハイフンと.
            &amp;quot;permissions&amp;quot;: [], // 必要な権限 []にすると最小のものになる、ただしExpoがデフォルトでいくつかの権限を必要としている
            &amp;quot;versionCode&amp;quot;: 1 // google playで内部的な管理に必要なバージョン 整数 
        }
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;expo-cli login&lt;/code&gt;コマンドでExpoにログイン、&lt;code&gt;expo-cli build:android&lt;/code&gt;コマンドを実行するとビルドを行うことができます。&lt;/p&gt;
&lt;p&gt;このとき、ネット上のExpoのサーバ内でビルドが行われており、ビルドが完了するとAPKをダウンロードするためのURLが表示されます。&lt;br&gt;
&lt;a href=&quot;https://expo.io/builds&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://expo.io/builds&lt;/a&gt; にアクセスすればビルド状況やコンソールログなどを確認できます。&lt;/p&gt;
&lt;p&gt;実際にExpoのアプリとしてもアップロードされており、サイト内から検索することができます。&lt;/p&gt;
&lt;h2&gt;Google Playへアップロード・必要事項を入力&lt;/h2&gt;
&lt;p&gt;Google Play Consoleへアクセスしてアカウントを作成します。&lt;/p&gt;
&lt;p&gt;Google PlayでAndroidアプリをリリースするためにはGoogle Play Consoleでdeveloper登録が必要です。
初回に25ドルを支払う必要があります。&lt;/p&gt;
&lt;p&gt;「アプリの作成」を行い必要な項目を入力します。基本的には画面に沿って入力すれば問題ないです。&lt;/p&gt;
&lt;p&gt;以下のものが必要だったので作成しました。画像は基本&lt;a href=&quot;https://www.figma.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Figma&lt;/a&gt;で作りました。exportすることでPngなどの形式でダウンロードできます。&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;必要なものを登録すればアプリの公開ができます。公開されるまではしばらく時間がかかります。特定の人にだけアクセスできるテスト用のアプリや、本番リリース用のアプリなどを別々に管理できるので、必要なフェーズに合わせて試してみると良いです。&lt;/p&gt;
&lt;h2&gt;iOSも&lt;/h2&gt;
&lt;p&gt;React Nativeで実装しているので、iOSアプリとしても動作します。
こちらは現在実践中ですので、終わり次第追記します。プログラムはそのままでiOS用にビルドして、開発者ツールで登録していけば、AppStoreでも公開ができるはずです。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;React Nativeを使うことで、Androidアプリ、iOSアプリ両方を構築できます。Reactの概念を利用していることも合って、コンポーネントを利用しながら簡単に実装ができました。
ただし、ネイティブAPIのすべてが利用できるわけではなかったり、パフォーマンスに少し劣る部分があるそうです。要件を満たせない場合は考慮が必要です。&lt;/p&gt;
&lt;p&gt;さらにExpoも利用することで、開発デバック時のホットリロードや、Expoサーバを利用してのビルドを行うことができました。これらを使うと開発がかなり効率化され、簡単になりました。&lt;/p&gt;
&lt;p&gt;コンポーネントも豊富に用意されているので、お手軽に実装できた印象です。広告を表示するAdmobなどのコンポーネントもあり簡単に導入できます。今のところは問題なさそうなので、Expoでのアプリ開発を続けようと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】アプレンティスシップ・パターン]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/21/apprenticeship/</link><guid isPermaLink="false">https://honmushi.com/2019/02/21/apprenticeship/</guid><pubDate>Thu, 21 Feb 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873114608/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873114608&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=a0e221dbfbc6416e3550056d9038dae9&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873114608&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873114608&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&gt;無知をさらけ出す&lt;/h2&gt;
&lt;p&gt;上司やマネージャーも、あなたが何がわかって何がわからないのかを知りたがっています。
わからないことを積極的に質問することで、お互いの理解を助けることができます。&lt;/p&gt;
&lt;p&gt;質問をしないことはプライドを守れるかもしれませんが、知りたいことを知るまで遠回りになります。
質問をすることで、無知をさらけ出すことになりますが、その内容ができるようになるので、その分成長したと捉えることができます。すなわち、無知をさらけ出すことで学習能力をチームに示すことができます。&lt;/p&gt;
&lt;h2&gt;最低である&lt;/h2&gt;
&lt;p&gt;自分より優れた開発者が集まるチームに所属することで、成長する余地を得ます。自分が一番弱いことになるので、誰よりも頑張らなければいけない状態となり、地道な努力が必ず必要になります。周りは自分にとって良き指導者ばかりであり、学ぶことがたくさんあるはずです。&lt;/p&gt;
&lt;p&gt;簡単で退屈だけど必ず必要な雑務などを積極的にやりましょう。間違いなく貢献ができ、情熱を発揮できます。そういった仕事から、自分が必要であることを発揮しつつ、努力して強くなっていきます。&lt;/p&gt;
&lt;h2&gt;学びを記録する&lt;/h2&gt;
&lt;p&gt;学習した内容はブログやWikiに書きます。昔やったことは覚えていても詳細をおぼえていない、ということはよくあります。まだ覚えているだけマシですが、やったことも忘れているということすらあると思います。そうならないためにも、学習した内容は何らかの形で記録しておきましょう。&lt;/p&gt;
&lt;p&gt;いつの日か後輩に教えるときに役に立つはずですし、同じような経験をした仲間とつながるためのきっかけになることもあります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;熟練の職人になるために、意識すべきことはたくさんあります。長く続けることも、もちろん必要なことですが、より効率よく学んで技芸を身につけるためには、さまざまな心がけを行いながら進んでいくほうが良いです。&lt;/p&gt;
&lt;p&gt;文字の量が多い本ですが、紹介しているパターンの数はそれほど多くありません。さくっと読める内容ですので、定期的に読んでみることをおすすめします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】ここちいい文字]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/21/kokochiyoi/</link><guid isPermaLink="false">https://honmushi.com/2019/02/21/kokochiyoi/</guid><pubDate>Thu, 21 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ロゴや書体の実例を集めた本です。そのプロダクト専用にデザインされたフォントが多く、商品やイメージに強く影響されたものが紹介されています。タイトルの通り心地よいというのがテーマのようで、実例もそれっぽいのが集まっています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4756248446/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4756248446&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=f77dafda1eee807024e48cb6c2c79141&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4756248446&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4756248446&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&gt;文字がテーマ&lt;/h2&gt;
&lt;p&gt;ロゴの紹介ですが、主に文字が主体となっているロゴが集められています。文字に装飾をつけたり変形させたりして、商品の特長を受け継ぎながら、心地よい印象を与えています。商品の写真と一緒に紹介されているので、見比べてみると良いです。&lt;/p&gt;
&lt;h2&gt;ロゴ制作の実例&lt;/h2&gt;
&lt;p&gt;たくさんのロゴの実例が掲載されています。作る際のポイントや商品の特長なども説明があります。
機能性・情感・先進性をうまくバランスを取り、秩序をうまく崩すことで「ここちいい」が成り立つそうです。そこに至るまでの考え方が巻頭にかかれていますが、結構難しいです。&lt;/p&gt;
&lt;h2&gt;ロゴの実例がたくさん&lt;/h2&gt;
&lt;p&gt;作例がたくさん載っているので、そちらを眺めながら分析すると得られるものがあります。
上記の作例を読むことでロゴなどのアイデアの参考になると思いますので、資料として持っておくのも良いです。ロゴを作る過程の作業もちょっとだけですが載っています。関連する仕事をしている人であれば、参考になることがあると思いますので、読んでみるといいです。&lt;/p&gt;
&lt;p&gt;フォントはプロダクト用にオリジナルで作っているのでしょうか、見たこと無いような形や装飾のものが多いです。その点についての紹介はないので、多分オリジナルでデザインしたフォントだと思います。&lt;/p&gt;
&lt;h2&gt;心地よいロゴの作り方&lt;/h2&gt;
&lt;p&gt;機能性・情感・先進性のバランスによって作られます。秩序に少し混沌を混ぜるということのようですが、私には難しく感じました。いわれてみれば紹介されている作成では、この3つの要素を感じることが確かにできます。こうやって要素を分解して紹介してもらえると理解しやすくて良いです。新しい発見となりました。&lt;/p&gt;
&lt;p&gt;日頃から、これはいいなと思ったロゴやデザインはしっかり記録しておいて、落ち着いたときにゆっくり分析して見るとおもしろいのかなと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;文字の持つ表情や情感などについて考えつつ、可読性・情感などをしっかり抑えたロゴデザインの実例でした。クールで先進性のあるものというよりは、プロダクトに寄り添って属性を受け継いだロゴが多い印象です。&lt;/p&gt;
&lt;p&gt;どれも見ていてここちいいものばかりでしたし、本も厚いのですがサクサク読めます。ある程度イメージごとに分類されています。作りたいイメージに沿ったテーマの箇所を開いて、参考にする読み方がおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】コーディングを支える技術]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/20/code-gi/</link><guid isPermaLink="false">https://honmushi.com/2019/02/20/code-gi/</guid><pubDate>Wed, 20 Feb 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/477415654X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=477415654X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=935268e3ca4d4bc8a4f9b84c24f60692&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=477415654X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=477415654X&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&gt;プログラミングの学び方&lt;/h2&gt;
&lt;p&gt;比較しながら学ぶことが推奨されています。一つの言語で動作した書き方でも、仕様の異なる言語では動かないこともあります。複数の言語で利用してみることでより本質的な理解が進み、効率よく使いこなせるようになります。&lt;/p&gt;
&lt;p&gt;この本では上記のような進め方を取っており、文法ごとにいくつかのプログラミング言語での例が書かれています。JavaやRuby,Python,Scala,C言語など、バラエティに富んだソースコードが出てきます。特定の言語の学習ではなく、言語に依存しない普遍的な知識を学んでいきます。&lt;/p&gt;
&lt;h2&gt;プログラミングの文法や構文&lt;/h2&gt;
&lt;p&gt;ifやfor、関数の使い方など、基本的な文法からオブジェクト指向や正規表現まで網羅的に取り組みます。
特に難しい内容はありませんが、言語ごとの詳細な違いなどを知ることができるので、おもしろいです。&lt;/p&gt;
&lt;p&gt;その構文が作られた歴史も振り返って調べていくので、プログラミング言語の成り立ちなども知ることができます。
機能や用法などの正しい知識が得られるので、なんとなく動くものが作れるようになっているという人にも、学べる内容は多いです。&lt;/p&gt;
&lt;h2&gt;整数と浮動小数点&lt;/h2&gt;
&lt;p&gt;コンピュータ科学でもややこしいところかもしれません。それほど意識しなくてもアプリケーションは作れますが、理解しておいたほうがいいです。型の紹介のパートで簡単に説明があるので、この機会に学んでおくと良いです。より詳しい内容は他の本を読んだほうがいいです。&lt;/p&gt;
&lt;h2&gt;オブジェクト指向&lt;/h2&gt;
&lt;p&gt;継承やクラスといった概念の紹介がされています。詳細な思想やデザインパターンには触れていませんが、ざっくりとした概要と歴史的な背景を知ることができます。言語ごとのさまざまな考え方を見ることができ、難しいと思っている人にも興味を持ってもらえるきっかけになるかもしれません。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;最初にも書いていますが、特定の言語の仕様に依存せずに普遍的な知識を学ぶことができます。仕様は異なっても基本的なところは同じなので、しっかりと勉強しておけばいろいろな言語で応用して考えることができます。&lt;/p&gt;
&lt;p&gt;実際に一つプログラミング言語を使えるようになると、他の言語の理解も早いです。ある程度プログラムが書けるようになって、次は別の言語をつかってみようかなと思い始めた人におすすめしたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】エンジニアの知的生産術]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/19/chiteki-seisan/</link><guid isPermaLink="false">https://honmushi.com/2019/02/19/chiteki-seisan/</guid><pubDate>Tue, 19 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;エンジニアとして効率よく学ぶ方法や、情報を整理アウトプットする方法についてまとめられています。
主に学習方法の内容になっています。本や資料を読む際のアドバイスです。&lt;/p&gt;
&lt;p&gt;これらの内容をしっかりと学び意識しながら取り組むことで、より生産的な活動ができると思います。
意識するべき心がけや学び方を示している内容で、具体的なテクニックやツールの使い方ではありません。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4774198765/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774198765&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=c2c3a3fb244b6396db93076bf2a2ff99&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4774198765&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774198765&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&gt;新しいことを学ぶ方法&lt;/h2&gt;
&lt;p&gt;学び方についてです。本を読んで得た情報を抽象化することで身につけます。
簡単にやるのであれば、整理して名前をつけることがおすすめされています。速読や、内容をメモしたりするときのコツを学びます。&lt;/p&gt;
&lt;h2&gt;何を学ぶか決める&lt;/h2&gt;
&lt;p&gt;探索範囲を広げること、人から学ぶことで効率良く学べることが紹介されます。
他にも、掛け合わせることでより大きな知識として発揮できることに触れています。勉強する対象で迷っているのであれば参考になります。&lt;/p&gt;
&lt;p&gt;具体的にこの言語がオススメとか、次はこのフレームワークが熱い、という内容ではありませんでした。&lt;/p&gt;
&lt;h2&gt;記憶の仕組み&lt;/h2&gt;
&lt;p&gt;記憶の仕組みについて学んでから、記憶力を高める方法を考えます。
繰り返し反復して記憶から取り出すことが重要になります。
何度か期間を開けて、繰り返し知識をアウトプットすることにより、記憶の定着が強固になります。復讐する時間をつくってしっかり記憶に定着できるようにしましょう。&lt;/p&gt;
&lt;h2&gt;やる気が出ない原因はタスクが溢れているため&lt;/h2&gt;
&lt;p&gt;一度に取り組むタスクを一つに絞る、そのために優先順位をつけることから初めます。
その上でタスクの大きさ・全体像を眺めます。タスクの一つ一つに目を向ければちゃんとおわりが見えているのでやる気も湧いてきます。タスクを細かく分けることは見積もりのコツでもありますので、意識してできるようにしておくと良いです。&lt;/p&gt;
&lt;h2&gt;考えをまとめる&lt;/h2&gt;
&lt;p&gt;情報のアウトプットについてです。ごちゃごちゃになりがちなアウトプットですが、グループ化することを意識することにより、わかりやすくなります。整理するプロセスについての学びです。&lt;/p&gt;
&lt;p&gt;アイデアを生み出すときには、調べ尽くすフェーズであったり磨き上げるフェーズなど、様々な考え方をつかってアイデアを熟成させます。すぐにぽんっと降ってくるわけではありません。アイデアの作り方についてのプロセスを理解しておくと、ふとした時にこういうことか！と感じることができます。&lt;/p&gt;
&lt;h2&gt;学習方の紹介&lt;/h2&gt;
&lt;p&gt;エンジニアが業務で悩む問題に加えて、普段の勉強などで意識するべきことについても触れています。それぞれの項目については軽めに触れるくらいですが、幅広い範囲についてカバーしている印象です。具体的なプログラミングのテクニックやソースコードなどは全然ありません。学習法が主な要素です。&lt;/p&gt;
&lt;p&gt;タスクを進める上での基礎的なことも書かれているので、経験の浅いうちでもしっかり役に立つ本になっています。エンジニア以外の人であっても内容を参考にすれば、勉強の効率を改善するヒントになるはずです。いつでも役に立つような意識の持ち方が紹介されています。身につけておいて損はしないと思います。&lt;/p&gt;
&lt;h2&gt;これから本を読むぞ！という方におすすめ&lt;/h2&gt;
&lt;p&gt;より良い記憶の方法やアウトプットを行う際の参考になります。なかなか覚えられないとか、資格試験などで苦戦している人にも、一度時間を取って読んでみてほしいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;エンジニアとして効率には常に意識したいものです。仕事の効率ももちろんですが、それ以外の勉強や成長といった部分でも効率を意識することは大切です。&lt;/p&gt;
&lt;p&gt;闇雲に手を付けるのではなく、効率的なやり方を考えながら進めることができると、他のことにも応用が効くので心がけてみるといいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】達人に学ぶSQL徹底指南書]]></title><description><![CDATA[SQLをより使いこなして上級者になるための本です。 SQLをの基礎的なことはわかっている人向けの内容で、応用的な書き方がメインになっています。といっても「CASE」とか「HAVING…]]></description><link>https://honmushi.com/2019/02/19/tatsujin-sql/</link><guid isPermaLink="false">https://honmushi.com/2019/02/19/tatsujin-sql/</guid><pubDate>Tue, 19 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SQLをより使いこなして上級者になるための本です。&lt;/p&gt;
&lt;p&gt;SQLをの基礎的なことはわかっている人向けの内容で、応用的な書き方がメインになっています。といっても「CASE」とか「HAVING」といった位のものです。初心者から次のステップにいくために必要といったくらいでしょうか。&lt;/p&gt;
&lt;p&gt;各章には練習問題もついています。SQLをどうやって勉強したら良いかわからないと悩んでいる人にもおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798157821/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798157821&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=0503bc3b8f13def508cb6874d956188a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4798157821&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4798157821&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;応用的な位置づけになっています。「CASE」や「HAVING」、結合などを取り扱います。初心者の次のステップというくらいかなと思います。
大規模なRDBを普段から取り扱っている人にとっては、特に難しい内容ではありません。簡単なものしか取り扱ったことがなければ、とても参考になると思います。&lt;/p&gt;
&lt;p&gt;SQLを書く際の作法なども紹介されています。スペースやインデント、大文字小文字の使い分けなど覚えて置くべきです。現場によってルールはあると思いますが、基本的なルールが書いてあるので参考になります。&lt;/p&gt;
&lt;p&gt;他にもRDBの歴史や背景についての紹介もあります。仕組みや裏側についての情報もあるので、知らない方は読んでおくと世界が広がっていいと思います。特に実務では訳には立たないと思いますが、概念を知っておくと理解が深まります。&lt;/p&gt;
&lt;p&gt;SQLのチューニングについて基本的なことが書かれているので参考になります。ただし、簡単に取り入れられるものばかりで大きな改善は見込めないかもしれません。SQLの書き方に関するものなので、普段から気をつけておくのがいいと思います。&lt;/p&gt;
&lt;p&gt;例えば以下のようなものがありました。そのまますべての環境で該当するわけではないですが、普段SQLを書く際には気をつけようと思います。大きな考え方としては、中間テーブルやソートを減らすこと、インデックスを利用することによって、物理メモリへのアクセスを減らすことを目指します。&lt;/p&gt;
&lt;h3&gt;サブクエリを引数に取るときはINよりもEXISTSを使うべき&lt;/h3&gt;
&lt;p&gt;EXISTSならインデックスが有効になる。EXISTSは該当があればそこで検索を打ち切る。
INの場合はサブクエリの実行結果をワークテーブルに格納して、そこから全件走査を行います。そのため負荷が大きいです。&lt;/p&gt;
&lt;h3&gt;サブクエリを引数に取るときはINよりも結合を使うべき&lt;/h3&gt;
&lt;p&gt;サブクエリがないので中間テーブルが作られない。インデックスが利用できる&lt;/p&gt;
&lt;h3&gt;集合演算子のALLを使う&lt;/h3&gt;
&lt;p&gt;UNIONとかは暗黙的にソートが行われます。重複排除を行うためです。ソートは負荷が大きいです。
重複を気にしない、重複が起きないことが事前にわかっているのであればUNION ALLを使いましょう。&lt;/p&gt;
&lt;h3&gt;DISTINCTをEXISTSで代用する&lt;/h3&gt;
&lt;p&gt;DISTINCTも重複削除のためにソートが行われます。
EXISTSを使うことでソートせずに重複削除を行うことができる場合があります。&lt;/p&gt;
&lt;h3&gt;極値関数でインデックスを使う&lt;/h3&gt;
&lt;p&gt;MAXとMINです。ソートが行われますが、インデックスがあればインデックスのスキャンだけですみます。できるのであればインデックスを対象にスべきです。&lt;/p&gt;
&lt;h3&gt;WHERE句で書ける条件はHAVING句には書かない&lt;/h3&gt;
&lt;p&gt;GROUPで集約する後にHAVINGでフィルタリングするか、集約する前にWHEREでフィルタリングするかです。
GROUP BY による集約時にソートが行われるので、先に行数を絞ったほうがよいです。WHERE句ならインデックスが利用できるかもしれません。&lt;/p&gt;
&lt;h3&gt;GROUP BYとORDER BY で指定するキーでインデックスを使う&lt;/h3&gt;
&lt;p&gt;GROUP BY とORDER BYで指定するキーはインデックスの存在するキーであれば、インデックスを利用できます。ソートが行われるので、ソートの高速化が期待できます。&lt;/p&gt;
&lt;h3&gt;索引時に加工しているとインデックスが無効&lt;/h3&gt;
&lt;p&gt;インデックスを利用するときは、条件式の左辺は裸。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;WHERE column * 1.1 &gt; 10&lt;/code&gt;ではなく&lt;br&gt;
&lt;code&gt;WHERE column &gt; 10 / 1.1&lt;/code&gt;にする&lt;/p&gt;
&lt;h3&gt;IS NULLをつかった場合はインデックスが無効&lt;/h3&gt;
&lt;p&gt;インデックスにはNULLは存在しないためです。&lt;/p&gt;
&lt;h3&gt;非定型をつかっているとインデックスが無効&lt;/h3&gt;
&lt;p&gt;&amp;#x3C;&gt;とか!=とかはインデックスが無効です。&lt;/p&gt;
&lt;h3&gt;ORをつかっているとインデックスが無効&lt;/h3&gt;
&lt;h3&gt;複合インデックスがあるのに列の順番が違う&lt;/h3&gt;
&lt;p&gt;そのままです。複合インデックスは正しく設計して、正しく利用しましょう。&lt;/p&gt;
&lt;h3&gt;後方一致、または中間一致のLIKEを用いているとインデックスが無効&lt;/h3&gt;
&lt;p&gt;前方一致のみ有効です。&lt;/p&gt;
&lt;h3&gt;暗黙の型変換を行っているとインデックスが無効&lt;/h3&gt;
&lt;p&gt;オーバーヘッドも発生しますし、良くないことばかりです。正しくDBを定義を確認して明示的に方を変換して扱うようにしましょう。&lt;/p&gt;
&lt;h3&gt;HAVINGで中間テーブルを減らす&lt;/h3&gt;
&lt;p&gt;中間テーブルをつかってWHERE句に指定しがちですが、中間テーブル無しでHAVINGでできるのであればそのほうが良い。&lt;/p&gt;
&lt;h3&gt;INで複数のキーを利用する場合、一箇所にまとめる&lt;/h3&gt;
&lt;p&gt;キーを結合したり行比較を用いることで、複数のINを一つにまとめられるかもしれません。&lt;/p&gt;
&lt;h3&gt;ビューで集約関数や集合演算が入っていると速度低下の原因になりがち&lt;/h3&gt;
&lt;p&gt;集約関数、&lt;code&gt;AVG,SUM,COUNT,MAX,MIN&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;集合演算子、&lt;code&gt;UNION,INTERSECT,EXCEPT&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;初級者から一歩前に出るための知識が書かれています。練習問題もあるので、しっかり取り組んでおくと実務でも使えて良いです。実際にはデータ合ってのSQLなので、これだけでは役に立たないのですが、基本はとても大切です。&lt;/p&gt;
&lt;p&gt;仕様に沿ったSQLを書き、正しくデータを取り扱えるようになるためには経験が重要かなと思います。初心者のうちは仕様書や定義をしっかり参照できるようになることが一番大切だと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】Webデザインのロジック]]></title><description><![CDATA[Webデザインの様々な事例を紹介している本です。 ロジックに沿って、各サイトを読み解いており、クライアントの狙い、デザイナーやディレクターが考えた解決策、そしてターゲットの3段階で、デザインを分析しています。 デザインの事例紹介の本 Web…]]></description><link>https://honmushi.com/2019/02/18/web-design-logic/</link><guid isPermaLink="false">https://honmushi.com/2019/02/18/web-design-logic/</guid><pubDate>Mon, 18 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Webデザインの様々な事例を紹介している本です。&lt;/p&gt;
&lt;p&gt;ロジックに沿って、各サイトを読み解いており、クライアントの狙い、デザイナーやディレクターが考えた解決策、そしてターゲットの3段階で、デザインを分析しています。&lt;/p&gt;
&lt;h2&gt;デザインの事例紹介の本&lt;/h2&gt;
&lt;p&gt;Webデザインの作り方の解説ではなく、事例や案件紹介の本です。
たくさんのアイデアに触れることができる上に、その意図が書かれているのでアイデアの素としておすすめです。
真似していくつか自分で作ってみるというのも勉強になるので良いと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4866730358/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4866730358&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=c2e227b5c4c4c0f162073bf7e3cba0b4&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4866730358&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4866730358&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&gt;ロジックで分析&lt;/h2&gt;
&lt;p&gt;WEBデザインの概要の紹介と、クライアントとターゲットユーザーの設定、そして伝えたいメッセージの狙いとその解決策が紹介されています。すべてのサイトに対してロジックを用いて分析しています。
問題解決に至るまでのロジカルな思考を再現しており、提案や設計の勉強にもなると思います。&lt;/p&gt;
&lt;p&gt;一通り読み進めることで同じようなロジックが身につき、サイトを見る目も変わってくると思います。&lt;/p&gt;
&lt;h2&gt;デザインコンセプト&lt;/h2&gt;
&lt;p&gt;Webサイトをただ眺めているだけでは、その裏側にある解決すべき問題やコンセプトがわからない場合があります。その部分について紹介しながら解説しているので、普段は見えない裏側を覗くことができます。&lt;/p&gt;
&lt;p&gt;ブランディングやイメージの部分の解説がされているので、よく知っている商品やサービスでも、意外と思っていることと違ったりします。実際のサイトにアクセスしながら読み込んでみると新しい発見が合っておもしろいです。&lt;/p&gt;
&lt;p&gt;WEBサイトの説明などもありパラパラと眺めるだけでもおもしろい本です。キーとなるコンセプトの紹介から、デザインを分析してわかったデザインのコンセプトまで紹介されており、ただ眺めるだけでなく要素の分解もできるので勉強になると思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;この本で学んだアイデアやコンセプトを実務でも使いこなせるようになるといいですが、なかなかむずかしいです。この本の取り組みを真似して、自分なりのロジック研究を行うことで身につくのではないかと思います。
ただサイトを眺めるのではなくコンセプトや狙い・解決するためのアイデアを分析しながら、サイトを見て要素を記録する取り組みができるようになると、ロジカルな分析ができるようになっているのではないでしょうか。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】独学プログラマー]]></title><description><![CDATA[プログラマーとして働けるようになるまでの道のりを紹介した本です。「独学」というのがポイントになっており、0から独学でPython…]]></description><link>https://honmushi.com/2019/02/18/dokugakuprogramer/</link><guid isPermaLink="false">https://honmushi.com/2019/02/18/dokugakuprogramer/</guid><pubDate>Mon, 18 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;プログラマーとして働けるようになるまでの道のりを紹介した本です。「独学」というのがポイントになっており、0から独学でPythonプログラマーになる方法を前提としています。&lt;/p&gt;
&lt;p&gt;プログラミングの基礎的なところから仕事の探し方まで幅広くカバーしています。プログラマーの仕事について全くわからない・経験がない人におすすめです。
著者の仕事・勉強上での経験談が書かれていることもわかりやすくて良いです。勉強に利用している言語はPythonで、本を通してPythonの知識を学んでいくことになります。&lt;/p&gt;
&lt;p&gt;幅広く書いてあるのでそれぞれの内容はちょっと浅めです。すでにプログラマとして経験がある場合はあまり参考にならないと思います。
まだ仕事を初めていない学生や、全然違う業種からの転職を考えている人にはおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4822292274/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4822292274&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=676b89fba6ba783bf0067ef4114a462e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4822292274&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4822292274&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&gt;プログラミング入門&lt;/h2&gt;
&lt;p&gt;この本ではPythonを使ったプログラミングを試します。文法の基礎から始めて実際に動かすところまで行います。未経験の方でもわかるように丁寧に説明しています。&lt;/p&gt;
&lt;p&gt;Pythonはインストールさえできればすぐに動かせるので簡単です。インストールの方法など丁寧に説明があるので、なんか難しそうだなと思っている人にも簡単にできると思います。&lt;/p&gt;
&lt;p&gt;Pythonはプログラミング入門に適した言語の一つだと思います。文法もわかりやすいですし、なんとなく書いてもそれなりに見やすくわかりやすい形になります。できればルールや慣習を確認してそれにしたがってほしいですが、まずは動かすところから挑戦してやりきりましょう。&lt;/p&gt;
&lt;p&gt;この本ではあまり込み入った内容はやりませんが、とりあえず初めてみるのには十分だと思います。&lt;/p&gt;
&lt;h2&gt;オブジェクト指向&lt;/h2&gt;
&lt;p&gt;オブジェクト指向プログラミングの入門です。概念の導入としてほんの一部を紹介しています。
存在を認識しておくくらいの理解度の印象です。ですので、この本に書いてある内容だけでは実務には足りません。できれば他の書籍も活用して勉強しておくといいです。実際に使うときには現場でたくさんのルールや思想を教わることになります。&lt;/p&gt;
&lt;p&gt;Pythonでプログラムを書く際には、たいていオブジェクト指向に沿った設計になると思いますので、知ってるほうがよいです。ただ、オブジェクト指向は座学で学ぶよりも実践して学んだほうが理解しやすいです。実務に挑戦しながら並行して学ぶのがおすすめです。
効率的な勉強方法として、オブジェクト指向で書かれたプログラムを読みながら理解していくのが一番速いと思います。教えてくれる先輩や同僚がいると良いですが、いない場合は都度調べましょう。聞きなれないクラス名や関数名が出てきたら、その旅立ち止まって調べましょう。&lt;/p&gt;
&lt;h2&gt;プログラミング関連ツール&lt;/h2&gt;
&lt;p&gt;OSのコマンドや正規表現など、プログラミングを支えるツールの紹介です。普段はあまり意識しないものだと思いますが、プログラマとして働くにあたっては避けて通れません。黒い画面に苦手意識のある人も多いと思いますが頑張って体験してみてほしいです。それほど難しくはありません。&lt;/p&gt;
&lt;p&gt;これも使ってみる以外に克服する方法は無いです。よほどわからない状態でめちゃくちゃやらない限り、環境が壊れることってありません。やらかしたエピソードばかりを目にすると思いますが、うまく行ったことは誰もエピソードにしないので、失敗ばかり印象に残っているだけです。&lt;/p&gt;
&lt;p&gt;ググって出てきたコマンドをただコピペして実行するのではなく、コマンドの意味や動作、オプションの意味などを調査・理解してから実行するようにしましょう。それだけでもだいぶ安全です。&lt;/p&gt;
&lt;h2&gt;Linuxをインストールして触ってみるのがおすすめ&lt;/h2&gt;
&lt;p&gt;心配な方は使っていないPCや安いPCを購入して、Linuxをインストールして遊んでみるのがおすすめです。わからなくなったらOSを再インストールしてまた作り直せます。サーバサイドのインフラの勉強にはこれが一番早くてわかりやすいです。私はずっと前からLinuxのPCを普段からつかっています。自分で環境立ち上げたりコマンドでアプリケーションをインストールしたりするのは意外と楽しいです。&lt;/p&gt;
&lt;h2&gt;アルゴリズム&lt;/h2&gt;
&lt;p&gt;コンピュータ・サイエンスの入門としてアルゴリズムにも触れます。いくつか簡単なアルゴリズムを再現して考え方を学びます。簡単なアルゴリズムの紹介ですが、実務で行うことになる設計のことも理解できると思います。ビジネスロジックやデータの関係などを読み解き、整理して設計する練習になります。&lt;/p&gt;
&lt;h2&gt;仕事のこと&lt;/h2&gt;
&lt;p&gt;仕事の探しかたやチームでの動き方などを学びます。プログラミングはたいてい一人ではなくチームで行う活動です。実際の仕事の現場ではここがとても大事になると思います。&lt;/p&gt;
&lt;p&gt;現場ごとのルールもありますのでそこに入って学ぶことも多いですが、基本的な考え方は知っておきましょう。と言っても大抵は当たり前のことなのですが、意外とうまくいかないことややってみたら出来ないことが多いかもしれません。忙しくて余裕がないとか、進捗が良くないけど報告しなかったとかあるあるだと思います。やっぱり報連相とか、見積もりとか、準備とか、当たり前のことが大切になってきます。&lt;/p&gt;
&lt;h2&gt;Web関連の情報は少ない&lt;/h2&gt;
&lt;p&gt;この本ではHTMLやCSSのことはほとんど学びません。ですのでWEB系ではない業務が想定されます。DBやインターネットの基礎知識などもありません。&lt;/p&gt;
&lt;p&gt;利用する言語がPythonなので学術や科学・物理、機械学習系を想定しているのだと思います。これらの業界は初めてだと難しいと思いますので、最初はWEB系のことを学んでおきWEBシステムの運用・改修の仕事を探すのがいいと思います。&lt;/p&gt;
&lt;p&gt;そう考えるとこの本だけでは、ちょっと足りないのではないかという印象を受けました。WEB関連の知識も一緒に身につけるのがおすすめです。&lt;/p&gt;
&lt;h2&gt;エラーの読み方やデバッグのコツがあればより良い&lt;/h2&gt;
&lt;p&gt;エラーの対処方やバグの探し方といったことが、内容に含まれていればよかったかなと思います。結構おろそかにしがちですが、初心者には一番大切な部分だと思います。&lt;/p&gt;
&lt;p&gt;Pythonは簡単に動かすことができるので学習にはちょうどいいと思います。ソースコードもふんだんに出てきますが、どれも簡単です。読めばすぐに理解できるようになりますので、頑張って読み進めましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;本の内容は極めて親切で分かりやすかったです。未経験の人であればこれを参考にプログラミングを始めることができると思います。実務をするためにはもう少し深い知識が必要になると思いますが、現場で教えてもらうのがおすすめです。間違えながら試行錯誤して学んでいきましょう。&lt;/p&gt;
&lt;p&gt;基礎的なことは十分にこの本で学ぶことができます。あとは、それぞれの業界や領域に合った応用の知識を学ぶことができれば、初心者としてのスタートは切れると思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[まるまる1冊使って最強のチャーハンを探す『男のチャーハン道』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/15/otokono-han/</link><guid isPermaLink="false">https://honmushi.com/2019/02/15/otokono-han/</guid><pubDate>Fri, 15 Feb 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4532263301/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4532263301&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=0ecce21c9be7564b33f2ef9e21d4409b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4532263301&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4532263301&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&gt;ざっくり紹介&lt;/h2&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;p&gt;美味しいチャーハンが作れるとかっこいいですよね。冷蔵庫の中が少なくて困ったときにも簡単に作れます。
いざというときにさっと作れて美味しい料理を覚えておくと、一人暮らしでは心強いです。親子丼とチャーハンとナポリタンですかね。簡単でほとんど美味しくできます。&lt;/p&gt;
&lt;p&gt;本の最後の方に完成したパラパラチャーハンのレシピが載っています。この本を読んで、真似してつくるのもいいですし、自分なりのレシピを探すのもいいと思います。他の料理のシリーズもあるようですので、そちらも読んでみたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】ビジネスモデル2.0図鑑]]></title><description><![CDATA[「ビジネスモデル2.0」では、社会性や創造性が儲けることと同じくらい重要になります。 この本では「ビジネスモデル2.…]]></description><link>https://honmushi.com/2019/02/14/business-zukan/</link><guid isPermaLink="false">https://honmushi.com/2019/02/14/business-zukan/</guid><pubDate>Thu, 14 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「ビジネスモデル2.0」では、社会性や創造性が儲けることと同じくらい重要になります。&lt;/p&gt;
&lt;p&gt;この本では「ビジネスモデル2.0」という言葉を足がけに、これからの時代のビジネスをわかりやすく図解して説明しています。
最先端のビジネスには共通するモデルが存在しており、その部分についての分析を行うことで次のビジネスを生み出すための参考になりそうです。&lt;/p&gt;
&lt;p&gt;図解されることで、裏側であったり普段目にできないようなステークホルダーも書かれています。お金の動きのモデルなどもわかりやすいです。日本に限らず海外の事例も取り上げられています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4046023619/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4046023619&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=a42dfe5ebdba55fa7d358b46a18cf183&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4046023619&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4046023619&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;最初は「ビジネスモデル2.0」の説明になっています。
ビジネスモデル2.0の意味であったり、図解することによるメリットなどを取り上げています。&lt;/p&gt;
&lt;p&gt;「ビジネスモデル2.0」とは以下の3つを満たしており、1.0と区別できます。社会性や創造性が儲けと同じぐらい重視されるようになりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;逆説の構造&lt;/p&gt;
&lt;p&gt;これまでの定説と逆のものです。成り立たせるのは高度な仕組みが必要です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;八方よし&lt;/p&gt;
&lt;p&gt;「三方よし」の進化版です。売り手・買い手・世間をもっと細かくしたものです。ブラック企業とか環境への配慮が無いとかが悪い例です。信頼などの無形資産を得る必要があり、数字にできない価値を資産に変える必要があります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;儲けの仕組み&lt;/p&gt;
&lt;p&gt;1.0は儲けの仕組みのみに着目していたものだそうです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;図解の資料は100件あります。図解の読み方も書かれているので、最初はそれに従って順番に読んでいくのがおすすめです。いくつかジャンルでわけられているので気になるところから読むのもいいです。
聞いたことのないような海外のビジネスから身近なコンビニなど、種類は豊富にあります。それぞれに解説の文章も載っているので、理解はしやすいです。&lt;/p&gt;
&lt;p&gt;最後には自分で図解してみようのコーナーがついています。図解資料で使われていた箱や矢印などのデータが用意されているので、真似してやってみることができます。自分が運営しているサービスのモデルなどを図解してみることで、新たな発展や潜んでいる問題点を見つけられるかもしれません。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;基本的に図解は3×3になっており、上段・中断・下段にそれぞれ意味があったりと、フォーマットが統一されています。揃えてこれだけ並べるとかなり統一感がでるので、見ていて楽しいです。
もしかすると飽きてしまう人もいると思いますが、全部見ようとせずに自分の知っているものとか興味のあるものを選んで読むといいです。&lt;/p&gt;
&lt;p&gt;これからの時代に活躍するであろう、ビジネスモデル2.0について具体的に要素を紹介してくれているので参考になると思います。なかなかうまくいかないと頭を悩ませている人も、ビジネスモデル2.0を意識しながら自分のビジネスを見直してみるといいと思いました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】自分では気づかない、ココロの盲点]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/14/kokoronomouten/</link><guid isPermaLink="false">https://honmushi.com/2019/02/14/kokoronomouten/</guid><pubDate>Thu, 14 Feb 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4062579537/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4062579537&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=b1188563056503c800c62bee6698f825&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4062579537&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4062579537&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;「確証バイアス」や「サンクコスト効果」など人間が判断する際に、惑わされる錯覚や盲点を紹介しています。具体的な質問の後に、予想される答えと実際に多かった解答を紹介して、その差異に目を向けることで、ココロの盲点に気づくことができます。できれば質問に対して、自分なりに答えを考えてからページをめくっていくと、より楽しめます。本自体は小さく薄い本で文字数も少ないですので、すぐに読み切れる量です。&lt;/p&gt;
&lt;p&gt;おもしろい内容が多く、そうだったのかと納得することが多いです。実際経験したことがあるような身に覚えのあることも多く参考になります。認知バイアスについては普通に生活していてもなかなか気づくことができません。当たり前のようにみんなが騙されていることばかりでした。
難しいデータや単語はなく、誰が見てもわかりやすい内容になっています。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;認知バイアスについて知ることができます。読んで見ると、たくさんの種類が存在していることがわかり、それでもごく一部のみの紹介となっています。&lt;/p&gt;
&lt;p&gt;普段目にするような新聞やテレビのニュース・SNSの投稿なんかにも、間違いなく含まれています。友達との会話の中にも含まれているかもしれません。情報を受け取る際、または発信する際は気をつけて取り扱うことができればと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】minimalism 30歳からはじめるミニマル・ライフ]]></title><description><![CDATA[「持ち物を10…]]></description><link>https://honmushi.com/2019/02/14/30-minimalism/</link><guid isPermaLink="false">https://honmushi.com/2019/02/14/30-minimalism/</guid><pubDate>Thu, 14 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「持ち物を100個以下にする」などのルールに縛られるのではなくて、本当の意味での自由と開放を手にするために、ツールとしてミニマリズムを実行しているそうです。&lt;/p&gt;
&lt;p&gt;持ち物に限らず、考え方とか人との付き合い方などにも影響しており、参考になる箇所も多いです。
無理にとはいいませんができるところからやってみると、様々な束縛から開放されることができ、自由な暮らしを得られるかもしれません。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4845913240/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4845913240&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=7e8cad4827d89fa3b6238935b50e8112&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4845913240&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4845913240&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&gt;概要&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;イントロダクション&lt;/p&gt;
&lt;p&gt;特定のルールがあるわけではありません。ミニマリズムを制約ではなくツールとして扱い、本当に必要なものにだけフォーカスすることです。適した状態は人によって異なるので、本人次第で適したライフスタイルを見つけ出すことが大切です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;今を生きる&lt;/p&gt;
&lt;p&gt;一度に一つのことに集中すること、一つ一つの瞬間を大切にします。ご飯を食べながらスマホを見たりとか、歯を磨きながらメールをチェックするなどをやめます。一つのさらに一つのものだけをのせて、一つ一つ平らげて行きます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;心の成長&lt;/p&gt;
&lt;p&gt;手放すことには勇気が必要です。しかし、記憶は自分の中にあるもので、物の中にあるものではありません。持っているだけで重荷になるものもあります。手放すことで開放されるかもしれません。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;成長&lt;/p&gt;
&lt;p&gt;自覚こそが最も貴重な自由になります。それが不要なものであると気づくこと、必要なものにのみフォーカスできるようになることがミニマリズムの真髄です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;貢献&lt;/p&gt;
&lt;p&gt;他者に報いることで幸福を得られます。自分にとって不要な物や時間でも、他人からすると利用できたりほしいと思っているものかもしれません。もったいぶらずに差し出すことで自分も相手も幸福を得られるはずです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;パッションとミッション&lt;/p&gt;
&lt;p&gt;自分のパッションが動くものを見つける、人生のミッションを探す。ちょっと難しいことですが、幸福を得るために大切なことです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;行動を起こす&lt;/p&gt;
&lt;p&gt;最初の一歩は大変なものです。「したほうがいいリスト」を「マストのリスト」にすることで、やる気が湧いてきます。ただ紙に書いて、「したほうがいい」の部分を「する！」に変えて読むだけです。こうして口に出すだけでも、すぐやらなきゃという気分になります。&lt;/p&gt;
&lt;p&gt;知性では理解している状態が「したほうがいい」状態です。しかし、感情が理解していない状態です。感情でも理解できるようになった状態が「マストのリスト」の状態になります。ツールや手法をつかって「マスト」状態にすることで行動を起こすことができます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;変化と試行錯誤&lt;/p&gt;
&lt;p&gt;持ち物について考え直します。どうしてこれを買ったんだろうとか、本当に必要なのだろうかということを考えます。&lt;/p&gt;
&lt;p&gt;著者はテレビも手放した上にインターネットの契約も解除しているそうです。ネットを使いたいときは近所のネットにつなげるカフェとかに行って作業するそうです。こうすることで時間を決めて、目的をしっかり考えて利用できるようになりました。ダラダラ動画を見たりすることがなくなったそうです。
簡単には真似できませんが、ルータの電源切るとかで1週間だけ試してみるとかはできそうですね。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;より少なく活きるというのは、ぱっと見ると不便なように見えますが、実は快適だったりもします。
余計な心配や管理がなくなり自由になることもあります。どちらがいいかということは一概には言えませんが、試して見る価値はあるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;人によって快適や自由は異なる概念なので、合う合わないが絶対にあると思います。他の人のミニマリズムのやり方を学んで、自分だったらどうするかということを考えてみるとおもしろいです。&lt;/p&gt;
&lt;p&gt;エンジニア的には、プログラミングや仕様設計についても、ムダな部分を減らしより少なく実装することは大切な心構えです。プログラミングに限らずいろいろな場所でミニマリズムの考え方を活かすことができるのではないかと考えています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】スマートフォンサイトUI図鑑]]></title><description><![CDATA[スマートフォンサイトでよく使われるUIを集めた本です。使われているサイトの紹介と実装方法も載っています。全部で43種類が掲載されています。 CSSによる表現の調整の部分が多く、実際のデータの処理に関する部分はあまり載っていませえん。
よく見るUIの表現について、CSSをJS…]]></description><link>https://honmushi.com/2019/02/13/uizukan/</link><guid isPermaLink="false">https://honmushi.com/2019/02/13/uizukan/</guid><pubDate>Wed, 13 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;スマートフォンサイトでよく使われるUIを集めた本です。使われているサイトの紹介と実装方法も載っています。全部で43種類が掲載されています。&lt;/p&gt;
&lt;p&gt;CSSによる表現の調整の部分が多く、実際のデータの処理に関する部分はあまり載っていませえん。
よく見るUIの表現について、CSSをJSを用いて表現します。&lt;/p&gt;
&lt;p&gt;実装の概念やパターンを知ることができるので、スマートフォン向けのサイトをつくるときの参考になります。本でも紹介されていますが、UI表現を集めたサイトがいくつか存在しているので、そちらも一緒に参考にすると表現の幅が広がります。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4048690132/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4048690132&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=f3f3cb2b874271ca36260c65f6495ea8&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4048690132&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4048690132&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;CSSとjQueryをつかったUIの紹介です。jQueryのプラグインをつかった実装も多く載っていました。サンプルコードもアスキーのサポートサイトでダウンロードできます。ただし、メールアドレスをつかって会員登録が必要です。&lt;/p&gt;
&lt;p&gt;データの処理などに関しては載っておらず、あくまでも見た目についての情報になっており、CSSの属性指定の部分が多いです。jQueryの部分では難しい処理はありません。&lt;/p&gt;
&lt;p&gt;説明もわかりやすく書いてあるので、HTMLとCSSについて理解があれば簡単だと思います。デザイナーの人におすすめです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;たくさんのUIの表現の例が載っています。参考になるサイトの例も載っているので、実際にスマートフォンでサイトにアクセスしてみるとわかりやすいです。&lt;/p&gt;
&lt;p&gt;この本では見た目についての実装のみなので、かなり簡単なソースコードになっています。実際のサイトでの利用ではほかにも考慮することがあってややこしくなると思います。タイトルの通りUIの表現の図鑑として使う分には十分だと思います。デザインの部分で迷ったりしたときに読み直してみたり、インプットの一つとして暇なときに読んでみると良いです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】未来を味方にする技術]]></title><description><![CDATA[社会を便利にしているIT技術について、未来がどう変わっていくかを考察し、それを使いこなす方法についての本です。人工知能とIOT…]]></description><link>https://honmushi.com/2019/02/13/miraiwomikatani/</link><guid isPermaLink="false">https://honmushi.com/2019/02/13/miraiwomikatani/</guid><pubDate>Wed, 13 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;社会を便利にしているIT技術について、未来がどう変わっていくかを考察し、それを使いこなす方法についての本です。人工知能とIOTに関する情報が多いです。&lt;/p&gt;
&lt;p&gt;最近のトレンドに関わることから、私達が考えるべきことや知識の身につけ方など、新しい技術との付き合い方が書かれています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4774186473/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774186473&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=07348ba39c10f4adde211594732a12df&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4774186473&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;0//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774186473&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&gt;概要&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;新しい価値はどうやってもたらされるのか&lt;/p&gt;
&lt;p&gt;社会におけるIT技術の役割の紹介です。生活を便利にすることはもちろん、思想や常識にも影響を与えています。ビジネスとITは切り離せないほど密接したものとなりました。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;いま、世界の最前線で起こっている変化&lt;/p&gt;
&lt;p&gt;現在進行形で変化している社会の様子についてです。IT技術によって起こっている社会の変化を事例とともに紹介しています。ものを売らないサービスであったり、デジタルな情報やデータを取り扱うものであったり、新しい形態のビジネスが続々生まれています。災害の現場や個人の活動などへの影響なども取り上げています。&lt;/p&gt;
&lt;p&gt;変化に合わせて企業側の働き方の変化も加速しています。より効率を目指したり場所や時間にとらわれない働き方もよく聞くようになっています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;未来を支える技術&lt;/p&gt;
&lt;p&gt;人工知能・IOTに関する情報と考察です。未来についてこの点から考えています。&lt;/p&gt;
&lt;p&gt;様々な分野に影響しており、人間の手助けをすることができるはずです。ただし、課題や限界も存在しています。任せるべきところは任せて、ほかは自分でやっるといった考え方も必要です。正しい付き合い方を考え直す必要があります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;これからの常識を自分で作り出す方法&lt;/p&gt;
&lt;p&gt;ここまでの内容を踏まえて、活躍するための方法と考え方を紹介しています。具体的なステップや、狙うべき領域などを示してくれているので参考になると思います。そのまま真似するだけで活躍が約束されるというわけではありませんが、これを足がかりに何かを始めるのがいいと思います。&lt;/p&gt;
&lt;p&gt;突出した人になるための3つの原則&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;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;特長&lt;/h2&gt;
&lt;p&gt;わかりやすい図を用いて説明してくれる箇所が多く、概念の把握を手助けしてくれます。ニュースでなんとなく知っていたけども、意味はあまり理解していなかったという事柄に対して、理解を深めることができると思います。&lt;/p&gt;
&lt;p&gt;本中の図表については、巻末に記載のURLからダウンロードすることができます。プレゼンなどの資料に利用しても言いそうです。&lt;/p&gt;
&lt;p&gt;ITに関する包括的な情報と、現在社会にもたらしている変化についての説明が分かりやすかったです。難しい話は全然無いので、誰にでも理解できる内容だと思います。もしかすると「ホントかな？」と思うようなこともあるかもしれません。ITは想像を超えるスピードで進化しているので、ホントだと思ったほうがいいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;これから注目されるであろうIT関連技術である、人工知能やIOTに関するについての基礎的なことを学べる本でした。仕組みなどについては触れられていないので、そこまで知りたい場合はそれぞれの専門書を読むのがいいです。ビジネスなどに取り入れるのであれば、そこまで詳しく知らなくても十分に活用できると思います。&lt;/p&gt;
&lt;p&gt;ITによる社会の発展から取り残されないように、身の回りの変化を積極的に感じ取ることと、そのことの意味や未来について考えることが大切です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】エンジニアがフリーランスで年収1000万円になるための稼ぎ方]]></title><description><![CDATA[100…]]></description><link>https://honmushi.com/2019/02/13/free1000/</link><guid isPermaLink="false">https://honmushi.com/2019/02/13/free1000/</guid><pubDate>Wed, 13 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1000万の年収という大きな数字を掲げていますが、それ以外のフリーランスの基本的な情報も豊富です。会社員とフリーランスの良い点悪い点を比較しながら進めていくので、その目線でもわかりやすいです。&lt;/p&gt;
&lt;p&gt;ざっくりとはエージェントを利用して案件を紹介してもらって、常駐案件をこなすのがおすすめ。という意見になっており、そのときの心構えやノウハウが多いです。&lt;/p&gt;
&lt;p&gt;フリーランスになりたての人だけでなく、会社員の人やフリーランスを目指している・考えている人におすすめです。もちろん、この本を読んだ上で会社員として働き続けるという選択もあると思います。良い点悪い点をしっかり書いてあるので、どちらかを贔屓することなく考えることができると思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4774185795/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774185795&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=bcd59fbc8092af55df3d5ea807997ae6&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4774185795&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774185795&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&gt;概要&lt;/h2&gt;
&lt;h2&gt;これがフリーランスの「現実」だ&lt;/h2&gt;
&lt;p&gt;フリーランスのメリット・デメリットを会社員と比較しています。
収入や社会的信用や自由などについて、それぞれ比較して説明しています。フリーランスでもちゃんと確定申告とかをして収入を証明できればローンとかもできるそうです。&lt;/p&gt;
&lt;p&gt;会社員との比較がわかりやすく書かれています。独立しようか転職しようかなど悩んでいる人にとってはいい情報になります。&lt;/p&gt;
&lt;h2&gt;仕事を獲得する最良の方法&lt;/h2&gt;
&lt;p&gt;自分で営業するか、クラウドソーシングか、エージェントのいずれかが基本です。著者のおすすめは、エージェントに案件を紹介してもらって常駐案件をこなすだそうです。&lt;/p&gt;
&lt;p&gt;著者が実際に経験した手を出してはいけない案件の特徴や、契約形態の落とし穴などの情報もあります。&lt;/p&gt;
&lt;h2&gt;最小限の労力で最大の成果をもたらすエージェントの秘密&lt;/h2&gt;
&lt;p&gt;エージェントの活用方法、選び方です。著者はエージェントの利用をおすすめしているのでその情報です。良いエージェントの探し方も載っているので、探している場合は参考にすると良いです。&lt;/p&gt;
&lt;h2&gt;良質な案件を効率的に獲得するコツ&lt;/h2&gt;
&lt;p&gt;案件の探し方、選び方です。注意すべきことや期待すべきことなど書かれています。これらは実際に経験してみないとわからないことばかりなので、とても参考になりました。&lt;/p&gt;
&lt;h2&gt;成功する商談の傾向と対策&lt;/h2&gt;
&lt;p&gt;商談についての具体的なテクニックと心構えについてです。
スキルシートの書き方や商談の実際の流れなどが書いてあります。これも経験してみないとわからないことなので参考になります。会社員だとこの辺のイメージはあまり付きません。実際にやる機会が来たら参考にしたいです。&lt;/p&gt;
&lt;h2&gt;現場に入ってから契約を延長し続ける方法&lt;/h2&gt;
&lt;p&gt;契約を続けてもらうために必要な「信頼」を得る方法について書かれています。
現場独自のルールやフォーマットなど、優先して学んでおくといいそうです。他にも、しっかりコミュニケーションを取っていったほうが印象もよく、何よりも信頼につながります。&lt;/p&gt;
&lt;p&gt;エンジニアであっても、デザイナー業務もできれば手伝うなど優しさがありました。一方で、ディレクターの考えた仕様については、口を挟まずに正しいと考えて実装するというコツでした。意見を挟まないほうがいいそうです。この理由について以下になっています。&lt;/p&gt;
&lt;p&gt;デザイナーの業務に関しては、JavaScriptなどエンジニアもできる、またはエンジニアのほうが得意な領域があります。手伝えるなら手伝ったほうがお互いにとって良いです。&lt;/p&gt;
&lt;p&gt;しかし、ディレクターの考える仕様については、明確な解が存在しないとても難しい問題です。エンジニアにはわからない営業データやノウハウが詰まっていることがあります。実際やってみなければわからないことが多いので、意見を求められない限り口を挟まない方がいいそうです。仕様以外の部分で何かできることを探してあげるのが良いそうです。技術・実装的な問題やノウハウなどの共有ができルト役に立てるそうです。&lt;/p&gt;
&lt;h2&gt;これからフリーランスで働くなら知っておくべき5つのこと&lt;/h2&gt;
&lt;p&gt;技術力や営業力などフリーランスでなくてもためになる情報です。活躍できる人材になるために必要なことが書かれています。会社員であっても同じなのかなという印象でした。&lt;/p&gt;
&lt;p&gt;ほかにも、最低限知っておくべきことが書いてあります。確定申告とか健康保険とか所得税のことなど基本的なことです。検索したら出てきますが、必要なことがまとまっていますので目を通しておくと良いです。&lt;/p&gt;
&lt;h2&gt;経験談が書かれているので参考になる&lt;/h2&gt;
&lt;p&gt;実際に会社員からフリーランスになった経験が書かれておりとてもためになる内容でした。タイトルのとおりフリーランスについての情報が多いです。しかし、会社員にもいいところはあるのでよく考えて選びましょうという意見になっています。大きな企業であれば部署移動のほうがいいかもしれない、という考え方も書いてあります。&lt;/p&gt;
&lt;p&gt;ここに書いてあることが絶対の方法ではありませんが、一つの参考として真似してみるのはいいと思います。最初は全然わからないことだらけなので、参考にできる情報があるだけで安心できます。やってみて自分に合わなければ、別の方法や考え方を取り入れてみましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;実際に現場で活躍して信頼を勝ち取るためのコツや考え方が満載でした。どんな案件がいいのか、どうやって探せばいいのかなど参考になりました。都会での話なので、地方在住の場合は都合が異なるかもしれません。&lt;/p&gt;
&lt;p&gt;フリーランスに限らず会社員でも、この本に出てくることを意識できると活躍につながります。すなわち、本質的にエンジニアに求められることは、フリーランスでも会社員でも同じということだと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】初めての自動テスト]]></title><description><![CDATA[Web…]]></description><link>https://honmushi.com/2019/02/12/hajimete-test/</link><guid isPermaLink="false">https://honmushi.com/2019/02/12/hajimete-test/</guid><pubDate>Tue, 12 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Webシステムの自動テストを初めたい人に向けた、考え方やフレームワークなどを紹介しています。&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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873118166/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873118166&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=f0817bdb0947bf401234073c4fb53b6e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873118166&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873118166&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&gt;概要&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;テストのピラミッド&lt;/p&gt;
&lt;p&gt;UIテスト、統合テスト、ユニットテストからなるテストのピラミッドを定義します。それぞれがどんなものなのか、どうやって進めていくのか、システムテストの概要を説明しています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ユーザーインターフェイステストに触れる&lt;/p&gt;
&lt;p&gt;UIテストについてです。どんなテストなのか、何をテストするのかといった概要です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;レガシーシステムにUIテストを追加する&lt;/p&gt;
&lt;p&gt;HTMLの属性などが正しく実装されていない場合のDOMの指定についての情報です。IDEなどを用いて指定できると、テストが簡単に実装できます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;統合テストで点と点を結ぶ&lt;/p&gt;
&lt;p&gt;統合テストについての導入です。HTTPリクエストについての情報と、RESTについての概要です。Webの仕組みに関するところなので、詳しければ飛ばしてもよいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RESTfulなWebサービスの統合テスト&lt;/p&gt;
&lt;p&gt;RESTの各要求を試してみます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ユニットテストで基礎を固める&lt;/p&gt;
&lt;p&gt;ユニットテストについてです。開発者向けの内容になっていますが、それ以外の人にも得られる内容があるので、飛ばしながらでも目を通しておくと良いです。&lt;/p&gt;
&lt;p&gt;ユニットテストの設計や実装というよりは、基礎の情報の紹介です。コードカバレッジとかそういった語句の説明です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JavaScriptをつかったブラウザ上のユニットテスト&lt;/p&gt;
&lt;p&gt;JavaScriptをつかってユニットテストを行います。結構ソースコードが多い章です。ブラウザ上で起きることをユニットテストの領域・範囲でテストします。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ピラミッドを登る&lt;/p&gt;
&lt;p&gt;ここまでのテストを組み合わせます。ありがちな問題や、そのことへの対処方が書かれています。&lt;/p&gt;
&lt;p&gt;UIテストが重くなり、ユニットテストが不十分になりがちです。逆ピラミッドのような上位のテストばかりが充実してしまう問題です。なんとか下の層でカバーできたほうがよいです。&lt;/p&gt;
&lt;p&gt;ただ、それが必ず悪なのかは決めないほうがよいです。逆ピラミッドになっていても、ピラミッドそのものが存在しないよりはマシです。最初はそうなることもよく割ることですので、諦めずに改善を続けましょう。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;プログラミング初級講座&lt;/p&gt;
&lt;p&gt;コーディングスタイルや、名前の付け方などの考え方です。プログラミングの基礎的な話なので、普段ソースコードに触れないテスター向けの内容です。開発者にとってはそれほど新しい情報はありません。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;テストを整理する&lt;/p&gt;
&lt;p&gt;テストの設計についてです。ちょっと難しいですが、テストコードの構築についてもしっかり整理して設計しておくと管理が簡単になります。頑張っておいた方が後々ラクができます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;効果的なモックの活用&lt;/p&gt;
&lt;p&gt;モックを使うことで簡単にテストができます。ただ、できれば本物のデータやオブジェクトを利用したほうがいいです。構築時には外からテストができるように実装ができると良いです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;テストファースト&lt;/p&gt;
&lt;p&gt;テスト駆動開発についての章です。TDDの利点やプロセスを紹介しています。テストに対してより注目して、テストを先に実装する開発手法です。これによって必ずうまく行くわけではありませんが、一つの解決方法として強力なものです。開発者テスターともに参考にしていきたいです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;テストのピラミッド&lt;/h2&gt;
&lt;p&gt;基本的なことなのですが、システムのテストの概要としてピラミッドの構造を学ぶことができます。
テストする上では最初に教えられるものかと思いますが、結構おろそかになっている現場も多いと思います。
なんとなく初めてしまった人や、ツギハギでやってきた人などはここから勉強してみると良いです。&lt;/p&gt;
&lt;h2&gt;参考のプログラムはRubyとjavaScript&lt;/h2&gt;
&lt;p&gt;本の末尾に環境構築の応報が載っています。他の言語をつかっている方でも参考になる内容です。&lt;/p&gt;
&lt;p&gt;この本はプログラミングをあまりやらないテスターの方向けの内容になっています。Webやシステムテストの基礎的な情報が多く、入門書といった内容です。より詳細なシステムテストの情報については、開発者が持っていると思いますので、そちらを見せてもらうのがおすすめです。&lt;/p&gt;
&lt;h2&gt;テストそのものが無いよりがマシ&lt;/h2&gt;
&lt;p&gt;特に印象に残っているのは「テストが良くない構造になってしまったとしても、テストそのものが無いよりはマシ」ということです。
自動テストの導入は結構難しく、やってみたけどうまく行かないとか、運用されなくてほったらかしになるということが多いです。しかし、それでも全くのムダではなく、失敗を繰り返すことでより良いものができていきますし、無いよりはだいぶマシというのは本当です。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;テストを作って堅牢なシステムを作りたいという意欲を忘れずに、より良いシステムや構築環境をつくるために努力していきたいです。&lt;/p&gt;
&lt;p&gt;テストの実装については実は奥が深いです。さまざまな書籍があり、概念やパターンが存在しているので興味を持ったのであればより深く勉強してみることをおすすめします。
テストを構築することは、プロダクトを作ることと同じ用に重要なことです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】人工知能は人間を超えるか]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/09/koeruka/</link><guid isPermaLink="false">https://honmushi.com/2019/02/09/koeruka/</guid><pubDate>Sat, 09 Feb 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4040800206/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4040800206&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=abe6e5313d5156966d56ccee13dab55a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4040800206&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4040800206&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&gt;概要&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;広がる人工知能&lt;/p&gt;
&lt;p&gt;導入です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;人工知能とは何か&lt;/p&gt;
&lt;p&gt;現代すでに活躍している人工知能とその成果の紹介です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;推論と探索の時代&lt;/p&gt;
&lt;p&gt;人工知能の歴史の紹介です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;知識を入れると賢くなる&lt;/p&gt;
&lt;p&gt;まだうまく行かない時代の人工知能の成長についてです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;機械学習の静かな広がり&lt;/p&gt;
&lt;p&gt;最近の研究で成長してきた内容の紹介です。この辺から現在騒がれているような人工知能らしくなってきます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;静寂を破るディープラーニング&lt;/p&gt;
&lt;p&gt;一つのブレイクスルーとなる「ディープラーニング」という技術の紹介です。概念が難しく理解しにくいかもしれませんが、なんとなく覚えておくといいと思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;人工知能は人間を超えるか&lt;/p&gt;
&lt;p&gt;これらの技術がこれから先どのような進化を遂げるのか想像しています。その上で、人間との違いであるとか、考慮すべき問題などが提示されています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;変わりゆく世界&lt;/p&gt;
&lt;p&gt;未来の社会について想像します。消えてしまう仕事であるとか、変わっていくものについて予想を立てています。どれくらい当たるのかはわかりませんが、必ずいつの日にかそんな時代が来るのではないでしょうか。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&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&gt;おわりに&lt;/h2&gt;
&lt;p&gt;人工知能関連の本の中では技術的な話が少なく、数式などもほとんどありません。
ちょっとだけややこしい概念図は出てきますが、比較的知識の浅い人でも理解できるようになっています。入門というかとっかかりにはとてもいいと思います。&lt;/p&gt;
&lt;p&gt;どちらかといえば歴史的な部分や、これから起こるであろう社会の変化などに着目しており、人工知能に関する周辺知識が豊富に書かれていて、だれでも読める内容になっています。&lt;/p&gt;
&lt;p&gt;人工知能に興味を持ち始めたけど、難しいそうで手が付けられない人にとっては概要がわかるのでぜひお勧めしたい本でした。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】ベタープログラマ]]></title><description><![CDATA[生産性の高いプログラマになるための考え方やテクニック・習慣をまとめた本です。 以前紹介した【おすすめ読書】「プリンシプル オブ プログラミング」と似たような形です。3…]]></description><link>https://honmushi.com/2019/02/08/better-programer/</link><guid isPermaLink="false">https://honmushi.com/2019/02/08/better-programer/</guid><pubDate>Fri, 08 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;生産性の高いプログラマになるための考え方やテクニック・習慣をまとめた本です。&lt;/p&gt;
&lt;p&gt;以前紹介した&lt;a href=&quot;/2018/11/21/principles/&quot;&gt;【おすすめ読書】「プリンシプル オブ プログラミング」&lt;/a&gt;と似たような形です。38のエッセイとしてまとめられています。
こちらはより初心者にもわかりやすい、スローガン的な内容になっている印象でした。&lt;/p&gt;
&lt;p&gt;プログラミングや設計のテクニックのみでなく、意識的なことであったりプログラマとしてのあり方も書かれているので、経験が浅い人にこそおすすめしたい内容です。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873118204/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873118204&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=83f9f434e650d59953e421d8386990d4&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873118204&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873118204&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&gt;概要&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;you.write(code)&lt;/p&gt;
&lt;p&gt;コードを書く際に気をつけるべきことです。いろいろな本にも書枯れていることを取りまとめて書いてあり、この本を読めば結構網羅できると思います。&lt;/p&gt;
&lt;p&gt;プログラミングは大抵の場合、一人ではなくチームで取り組むか、担当者が変わっていくものなので、自分の独善などに従ってはいけません。コーディング規約に従って一貫性を持ったコードを維持するべきです。&lt;/p&gt;
&lt;p&gt;DRYや などの原則ももちろん出てきます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;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;/li&gt;
&lt;li&gt;
&lt;p&gt;個人的なこと&lt;/p&gt;
&lt;p&gt;学びを愛すること、何を学ぶべきか考えること、学ぶことを学ぶことを意識しましょう。
背筋や首の向きなどの姿勢についても、早いうちに解決できると健康的で良いです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;成し遂げる&lt;/p&gt;
&lt;p&gt;戦い方を選び、賢く勝ちましょう。タスクを分解して、完了を自分で再定義できるようにします。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;人々の営み&lt;/p&gt;
&lt;p&gt;開発は一人で行うものではなく、チームで行うことが多いです。そうでないとしても同じようなことをやっている人は必ずいるはずなので、専門家を探して協力してもらいましょう。一方的に参考にするだけでも、かなり違ってきます。&lt;/p&gt;
&lt;p&gt;周りの人や顧客とのコミュニケーションに気を配りましょう。積極的にコミュニケーションを取ることで、良い方向に進みます。そのときには態度や身だしなみに気をつけましょう。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;特長&lt;/h2&gt;
&lt;p&gt;各項目の最後には、問いかける質問とやってみようのコーナーが用意されています。その部分もしっかり読んでおくと、忘れずに身につけることができます。要点という項目も用意されており、特に重要な覚えておく点が書かれています。目を通しておきたいです。&lt;/p&gt;
&lt;p&gt;ここでも「DRY」の原則が出てきます。コピー&amp;#x26;ペーストして冗長なコードを書かないように気をつけましょう。基本的には、共通で使える関数にしてパラメータなどを受け取り、それぞれの処理をできるようにします。&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;p&gt;ベタープログラマというタイトルの通り、寄り良いプログラマになるための考え方が満載です。初心者の人であれば、これを読んでそのとおりに意識すれば間違いなく成長できます。&lt;/p&gt;
&lt;p&gt;人生の節目であったり毎年決まった時期に読み返すことがおすすめです。自分は今どれくらいできるようになったのかということをしっかり意識して、効率よく成長していけるといいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】発想する会社！]]></title><description><![CDATA[デザインファームIDEO…]]></description><link>https://honmushi.com/2019/02/08/hassousurukaisya/</link><guid isPermaLink="false">https://honmushi.com/2019/02/08/hassousurukaisya/</guid><pubDate>Fri, 08 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;デザインファームIDEOから、様々なイノベーションを生む方法やプロセスを学ぶ本です。&lt;/p&gt;
&lt;p&gt;イノベーションを生む会社にするために、どんな取り組みを行うのか、どんな考え方を持てばいいのかといったことを考えるためのネタになります。個人でも取り組めるものもあるので、誰でも参考にできると思います。&lt;/p&gt;
&lt;p&gt;たくさんのアイデアや商品、オフィスの写真が掲載されており、イメージしやすいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/415208426X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=415208426X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=e3ab66567331494232d8b37028a52c3e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=415208426X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=415208426X&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;様々なイノベーティブな商品やアイデアの写真とともに、それに至るまでの考えや技法が書かれています。&lt;/p&gt;
&lt;p&gt;イノベーションを生むためには、日頃からの観察や、想像力が重要になります。以下にして観察力を鍛えるのかといったことも書かれているので、書いてあることを真似するだけでも、少しはIDEOに近づくことができると思います。&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;li&gt;人間らしいホットなチームをつくる&lt;/li&gt;
&lt;li&gt;小さいところから大きいところへ、現在から未来へ橋をかける&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;イノベーションを生む会社の仕事の進め方、考え方を知ることができます。この手の本は結構あると思いますが、その中でも写真が多いうえ文字もぎっしりです。結構なボリュームなので読み切るのに体力を要しますが、その分身につくこと、参考にできることも多いです。&lt;/p&gt;
&lt;p&gt;前衛的で外国のおしゃれ企業というイメージもありますが、最近では日本でもこのような自由でおしゃれなオフィスが増えています。よりイノベーティブな環境を目指そうとすると、このような形になっていくのだと思います。&lt;/p&gt;
&lt;p&gt;チーム全員で読んで、自分たちに必要な部分を抜き出して取り入れていくと効果的です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】大人のための落書き帳]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/08/rakugaki-adult/</link><guid isPermaLink="false">https://honmushi.com/2019/02/08/rakugaki-adult/</guid><pubDate>Fri, 08 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルの通り、書き込んでいく本です。大人になって落書きなんてめったにしなくなったという人が多いかと思います。
落書きをすることで子供の頃に持っていた、自由な発想力や表現力を思い出すことができます。&lt;/p&gt;
&lt;p&gt;それが日常のふとした時であったり、仕事の場面でも生かされることがあります。
デザインなどクリエイティブな業種以外の人でも、必ずいい効果があるので試してみてほしいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4887597789/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4887597789&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=391ac8fcb776eae9adc3f466fef5d0ee&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4887597789&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4887597789&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;ページごとにちょっとした絵と英語の1文章が載っています。これらは創作のヒントとなっていて、それを足がかりに自由に落書きをします。教科書の偉人の顔写真に落書きしたときのような気分です。ほんのちょっとだけの制約があるので、書き始めやすいと思います。真っ白な紙に「何か書いて」と言われるとすごく困りますが、この本ではそんな心配はありません。なんとなく思ったままに書き込んでみるといいです。&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;p&gt;誰でも子供の頃は落書きしたと思います。いつの間にかやらなくなったという人も、この本にガンガン書き込んで子供の頃の気持ちに戻ってみてほしいです。暇つぶしにもなりますし、自由な発想力が発揮できるようになります。ちょっとだけ絵が上手になるかもしれません。&lt;/p&gt;
&lt;p&gt;他にも落書きに関する本がたくさん出ていた時期があるので、合わせて読んでやってみるといいです。以前紹介した&lt;a href=&quot;/2019/01/11/rakugaki-master/&quot;&gt;【おすすめ読書】ラクガキマスター&lt;/a&gt;などもおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】Docker]]></title><description><![CDATA[ソフトウェア開発の中でのDocker…]]></description><link>https://honmushi.com/2019/02/07/docker-or/</link><guid isPermaLink="false">https://honmushi.com/2019/02/07/docker-or/</guid><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ソフトウェア開発の中でのDockerの使用方法を学べます。開発・テスト・デプロイなど実際に開発で利用する内容を経験できます。スケールアウトについてやセキュリティなどの知識も身につきます。ただし結構難易度が高いです。インフラやネットワーク等の基礎知識が必要になります。&lt;/p&gt;
&lt;p&gt;以前紹介した&lt;a href=&quot;/2019/01/25/cockersyo/&quot;&gt;【実践技術書】プログラマのためのDocker教科書&lt;/a&gt;よりも応用的な内容になっています。実際の開発現場でどうやって活用するのかなどの知識が身につきます。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873117763/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873117763&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=746e9db61b1941c87d21bb9ba1959d06&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873117763&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873117763&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&gt;概要&lt;/h2&gt;
&lt;p&gt;1部では基礎的な概念の説明から操作方法を学びます。2部では開発の中でのDockerの使用方法を学びます。3部では高度なツールやテクニックの紹介です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;コンテナとは何か&lt;/p&gt;
&lt;p&gt;1部です。概念の理解が目標です。&lt;/p&gt;
&lt;p&gt;Dockerの歴史的なところから、プラグインなどに至るまで知ることができます。幅広い知識が必要になるので、基礎の理解については&lt;a href=&quot;/2019/01/25/cockersyo/&quot;&gt;【実践技術書】プログラマのためのDocker教科書&lt;/a&gt;で紹介している本を参考にするのがおすすめです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;インストール&lt;/p&gt;
&lt;p&gt;基本的にはLinux環境へのインストールを紹介しています。参考程度にですが、WindowsとMacへのインストール方法もあるので参考にしてみてください。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;はじめの一歩&lt;/p&gt;
&lt;p&gt;Docker runとかbuildなどの基礎的なコマンドを試します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dockerの基礎&lt;/p&gt;
&lt;p&gt;Dockerの概念の解説です。イメージの概念に加えて、SwarmやMachineなど周辺技術を踏まえて解説します。基礎的なコマンドの意味の解説をします。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;開発でのDocker利用&lt;/p&gt;
&lt;p&gt;ここから2部です。開発での利用方法を学びます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Webアプリケーションの作成&lt;/p&gt;
&lt;p&gt;pythonをつかって簡単なHTMLページを作成します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;イメージの配布&lt;/p&gt;
&lt;p&gt;Docker Hubを利用してイメージを配布します。一人でやっているとよくわからないかもしれませんが、チームなどで開発する場合重要です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;継続的インテグレーションとテスト&lt;/p&gt;
&lt;p&gt;スケジューラであるJenkinsを利用してCIを行います。内容が複雑になってきますが、CIを取り入れることができれば安全に開発ができます。重要視されるので頑張って理解したいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;コンテナのデプロイ&lt;/p&gt;
&lt;p&gt;実働環境でのDockerの利用についてです。コンテナのホスティングサービスの説明もしているので試すこともできます。ただし、簡単なアプリケーションであればそこまでしなくていいと思います。したほうが後々便利なのは間違いないと思いますが。この辺は特に難しいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ロギングとモニタリング&lt;/p&gt;
&lt;p&gt;ログの収集や設定方法やツールをつかったモニタリングの解説です。実働環境での運用を考えるのであれば必須の知識だと思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ネットワーキングとサービスディスカバリ&lt;/p&gt;
&lt;p&gt;ここから3部です。応用的なツールやテクニックの紹介です。ネットワークやインフレ的な知識が必要になるのでかなり難易度が高いです。&lt;/p&gt;
&lt;p&gt;ネットワークとの連携や適切なサービスへのアクセスなどの設定方法を学びます。参考になるツールの紹介もあり参考になります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;オーケストレーション、クラスタリング&lt;/p&gt;
&lt;p&gt;Kubernetesなどをつかってコンテナオーケストレーションを行います。&lt;/p&gt;
&lt;p&gt;クラスタリングとは、ホストをグループ化してネットワークで接続します。外からは単一のリソースのように見せます。&lt;/p&gt;
&lt;p&gt;オーケストレーションとは、様々な作業を取りまとめて、適切にコンテナ郡を起動、操作します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;セキュリティ&lt;/p&gt;
&lt;p&gt;Dockerを利用するに当たって考慮すべきセキュリティ問題を取り上げます。起こりそうな問題の例と、対応すべき防御について書かれており、実際にサービスに適応する場合は参考にしたほうがいいです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;特長&lt;/h2&gt;
&lt;p&gt;序盤はDockerの使い方で簡単なのですが、段々と難しくなってきます。実際の開発で用いる場合は様々なややこしいことがあります。わからないところ、うまく行かないところは飛ばしながらでも一通りやってみるといいです。終盤は難しいので飛ばしておいて、必要になったら確認するくらいがおすすめです。&lt;/p&gt;
&lt;p&gt;開発段階の利用方法から実装・運用段階での利用まで書かれており、本格的にDockerを利用するのであれば読んでおいたほうがいいです。正しい概念を理解できていないことで、推奨されない利用方法をしてしまったりすると、せっかくのDockerの良い点が活かせません。セキュリティ関連の内容もあるので、大変参考になります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;開発環境は、大抵はすでに動いているものに混ぜてもらう場合が多いです。詳しい人に解決してもらうことになります。ただ、基礎的な部分や触りの部分だけでも知っておく、またはやったことがあるとかなりスムーズに理解できます。&lt;/p&gt;
&lt;p&gt;開発環境にDockerなどの仮想環境やCIなどが整備されていない場合は、頑張って理解して取り入れたほうがいいです。かなり快適で安全になります。&lt;/p&gt;
&lt;p&gt;実働環境についてはDockerを採用することは思ったよりも難しそうです。合ったほうが便利そうですが、考慮することも多く余計に複雑になりそうです。簡単なWebサービスであれば、コストと相談して利用しないという選択のほうが多いのかなと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】パソコンの仕組みの絵本]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/07/pasokon-shikumi/</link><guid isPermaLink="false">https://honmushi.com/2019/02/07/pasokon-shikumi/</guid><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;パソコンの仕組みをイラストなどで解説しています。わかりやすく説明されているので、なんとなくパソコンを難しそうだと思って避けてしまっている人におすすめです。&lt;/p&gt;
&lt;p&gt;イラストや画像が多くサクサク読めます。専門的な知識も必要としないので、パソコンを触ったことがあるくらいの人なら誰でも読めると思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798122521/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798122521&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=88cec260352d3e9953315f39e940614e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4798122521&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4798122521&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;パソコンの仕組みに関する本です。自作PCなどで分解したことある人には結構馴染み深い画像が多いです。
大学の情報学部では、PCを分解してこの本のような勉強を行いました。&lt;/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;p&gt;わかりやすく解説されて入るのですが、たくさんの単語が出てくるので憶えるのは大変です。全部の意味を覚えようとしないで、この本に書いてあったな、ということをなんとなく覚えておくのがいいです。&lt;/p&gt;
&lt;p&gt;普通に読んでも十分に理解が進むと思います。更に、パソコンを分解しながら読んでいくと理解が深まって良いです。&lt;/p&gt;
&lt;p&gt;すでに理解している人にとっても、わからない人に説明するときの資料や説明の参考になると思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】PythonによるWebスクレイピング]]></title><description><![CDATA[WEBスクレイピングを行う際の基本的な処理から、使えるライブラリの紹介、守るべきルールや考慮すべき点などを学べます。 WebスクレイピングにはよくPython…]]></description><link>https://honmushi.com/2019/02/07/python-web/</link><guid isPermaLink="false">https://honmushi.com/2019/02/07/python-web/</guid><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;WEBスクレイピングを行う際の基本的な処理から、使えるライブラリの紹介、守るべきルールや考慮すべき点などを学べます。&lt;/p&gt;
&lt;p&gt;WebスクレイピングにはよくPythonが用いられるイメージがあるので、どこかで役に立つ知識だと思います。
いくつかのライブラリや、関連ソフトが出てくるのでぜんぜんPython触ったこと無いという人にはちょっと難しいかもしれません。でもライブラリを使いこなせるようになれば、かなりできることの幅が広がると思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873117615/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873117615&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=770469ff00fa91431b53fd0fc824222f&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873117615&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873117615&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&gt;概要&lt;/h2&gt;
&lt;p&gt;内容は盛りだくさんで、複数のライブラリを用いて処理を行ったりします。巻末にはPythonの入門としてインストール方法も書かれています。&lt;/p&gt;
&lt;p&gt;他にも巻末付録には、「Webスクレイピングの適法性と倫理」という章があります。何かの役に立つというものではないですが、結構ためになるので一読しておくと良いです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Webスクレイピング&lt;/p&gt;
&lt;p&gt;urllibという標準ライブラリを使い、Web上のコンテンツを取得します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;HTMLパーシング
BeautifulSoupというライブラリをつかってHTMLを処理します。かなり便利なライブラリなので使い方を覚えておくと便利です。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;クローリングを開始する&lt;/p&gt;
&lt;p&gt;Wikipediaを例に用いてスクレイピングによるデータ収集を行います。リンクを辿りデータを収集します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;APIを使う&lt;/p&gt;
&lt;p&gt;外部サービスのAPIを利用するときの手順や作法を学びます。実際にTwitterやGoogleのAPIを利用します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;データを格納&lt;/p&gt;
&lt;p&gt;RDBであるMySQLを利用して、DBにデータを格納します。難しいまたは必要なければCSVへの格納ですすめるのもありです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;文書を読む&lt;/p&gt;
&lt;p&gt;様々な形式のファイルを利用します。PDFやCSV、Wordなどが対象になっています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;データのクリーニング&lt;/p&gt;
&lt;p&gt;この章以降は応用編の位置づけです。間違った文法のファイルの対応や、取得データのフィルタリングなどを行います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自然言語の読み書き&lt;/p&gt;
&lt;p&gt;自然言語解析を少しかじるような印象です。機械学習などを利用する場合はきっと必要になるとお思いますので試しておきましょう。興味なければ飛ばしてもいいと思います。Googleなどのインデックスの概念なども学べます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;フォームとログインでクロール&lt;/p&gt;
&lt;p&gt;フォームのサブミットを行ったり、ログインの処理を行います。ログインが必要なページについてもスクレイピングを行うために必要になります。Basic認証を初め、サブミットが必要なフォームの通過方法を学びます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JavaScriptのスクレイピング&lt;/p&gt;
&lt;p&gt;静的なHTMLのみでなく、JSのフロントエンド処理が行われたページを取得します。Selenium・PhantomJSを用いることでJavaScriptの処理を実行することができます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;画像処理とテキスト認識&lt;/p&gt;
&lt;p&gt;ライブラリをつかって画像処理を行います。画像になっている文字列を正しく認識することが目的です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;スクレイピングの落とし穴&lt;/p&gt;
&lt;p&gt;ルールや作法についての内容です。無闇にスクレイピングを行うと、相手に迷惑がかかることがあるので、ある程度の作法は守りましょう。リクエストヘッダを調整したり、リクエストに間隔をもたせたりします。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Webサイトをスクレイイングでテスト&lt;/p&gt;
&lt;p&gt;簡単にですがWebページのテストを行います。スクレイピングの応用として、Web表現のテストについて学びます。この本では入門の位置づけになっており詳細には書かれていません。Seleniumの本や別の資料を参考にする必要があります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;リモートスクレイピング&lt;/p&gt;
&lt;p&gt;リモートサーバをつかってスクレイピングを行います。移植性や拡張性などの観点からリモート環境での処理を推奨しています。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;付録C.Webスクレイピングの適法性と倫理&lt;/h3&gt;
&lt;p&gt;アメリカ及び国際的なスクレイピングに関する法律についてです。
商標や著作権について、過去の事例などから学びます。こういったことはすべきではないとか、ここに注意するべきといったことがわかります。本格的なスクレイピング処理をつくる場合は一読しておいたほうがいいです。実際に裁判所により行われた判断も例として掲載されています。&lt;/p&gt;
&lt;p&gt;ルールなどの整備も盛んに行われているので、気をつけた方がいいのは事実です。スクレイピングをい行う際には、対象のサービス規約などを確認するといった作法を覚えておきましょう。&lt;/p&gt;
&lt;h2&gt;特長&lt;/h2&gt;
&lt;p&gt;Pythonにはさまざまなライブラリが用意されていますので、それらを利用して行います。簡単に利用できるのでとても便利です。Pythonにはスクレイピング以外にも様々なライブラリがあるので、興味があれば試してみましょう。数学的な計算やグラフ化、自然言語処理や機械学習などが有名でしょうか。RailsやLaravelのようなWebアプリフレームワークもあります。&lt;/p&gt;
&lt;p&gt;利用する際のインストールなどに苦戦することがあるかもしれません。プログラミングする上で避けては通れない課題なので、この機会に克服しておくと良いです。&lt;/p&gt;
&lt;p&gt;プログラムを書く際のコツであったり構造化や設計に関する部分はあまりありません。Python書く上でのルールなどの説明もあまりないです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;WebスクレイピングはPythonのチュートリアル的にも学んでおくと勉強になります。
Web関連の知識の習得にもなり、セキュリティ的な勉強になることもあります。&lt;/p&gt;
&lt;p&gt;ある程度HTMLへの理解がないと難しいことがあると思いますが、HTMLの構造の勉強にもなるので良いです。&lt;/p&gt;
&lt;p&gt;これで一通りの処理や作法に慣れてから、Pythonを利用した機械学習などに取り組むのがおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】Python クローリング&スクレイピング]]></title><description><![CDATA[Pythonを用いてWeb…]]></description><link>https://honmushi.com/2019/02/07/scrapy/</link><guid isPermaLink="false">https://honmushi.com/2019/02/07/scrapy/</guid><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Pythonを用いてWebクローリング・スクレイピングを行います。基礎的な知識に加えて、実装を行う際の設計の部分でも参考になる点が多いです。&lt;/p&gt;
&lt;p&gt;スクレイピングを行う上で必要になる知識やライブラリなどが一通り経験できます。サンプルコードにコメントが丁寧に書かれているので、勉強中の人にもおすすめです。処理の内容を読み進めながら読んでいくとわかりやすいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4774183679/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774183679&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=a2747a9692c0e90726c86a183c22c77a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4774183679&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774183679&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&gt;概要&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;クローリング・スクレイピングとは何か&lt;/p&gt;
&lt;p&gt;基礎的な語句の説明です。Pythonは標準ライブラリが充実しているので、今回のような目的でよく使われます。すぐ試せるように作られていることも良い点だと思います。&lt;/p&gt;
&lt;p&gt;基本的にはMacでの実装を想定しています。Windowsでも付録に記載のVagrantでLinuxの仮想環境を立ち上げて試すことができます。&lt;/p&gt;
&lt;p&gt;この章で基礎的な理解のために、Pythonを用いずにwgetなどのLinuxのコマンドでスクレイピングを行います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pythonではじめるクローリング・スクレイピング&lt;/p&gt;
&lt;p&gt;Pythonと標準ライブラリでスクレイピングを行います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;強力なライブラリの活用&lt;/p&gt;
&lt;p&gt;サードパーティライブラリを用いて難しい処理を実装します。lxmlとBeautifulSoupを使います、pyqueryもコラムとして登場します。&lt;/p&gt;
&lt;p&gt;データの保存先としてデータベースへの保存も行います。RDBとしてMySQL、NoSQLとしてMongoDBを試します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;実用のためのメソッド&lt;/p&gt;
&lt;p&gt;実際のWebサイトを対象に実装します。&lt;/p&gt;
&lt;p&gt;スクレイピングする上で気をつけるべきことや、エラー発生時の確認方法・対応方法なども載っています。実装を行う上で検討すべき設計などもあるので、システム設計の導入に良いと思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;クローリング・スクレイピングの実践とデータの活用&lt;/p&gt;
&lt;p&gt;取得したデータの活用方法を学びます。自然言語処理をつかったり、為替のグラフを作成したりします。
RobobrowserやSeleniumを用いて、Webページの自動操作も行います。地図への描写やBigQueryなどもつかっており、幅広い利用方法を知ることができます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;フレームワーク Scrapy&lt;/p&gt;
&lt;p&gt;スクレイピングフレームワークの「Scrapy」を利用してクローラーの効率的な開発を体験します。
フレームワークを用いることで高機能なシステムが効率的に作成できます。一通りの使い方やデバッグ方法などを知ることができます。Scrapyをつかってみたいという人にちょうどいいです。結構この章は詳しめに書いてあり、ボリュームも多めです。&lt;/p&gt;
&lt;p&gt;取得したデータをElasticsearchをつかって検索できるようにします。OpenCVを用いた顔認識も行います。この章でも応用的な使い方が多数紹介されており、参考にしやすいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;クローラーの継続的な運用・管理&lt;/p&gt;
&lt;p&gt;運用する際のノウハウを学びます。&lt;/p&gt;
&lt;p&gt;AWSでのリモート運用を行います。AWSの最低限の使い方も載っているので触ったことがない人でも確認できると思います。無料期間があるので実質お金をかけずに試せますが、アカウント作成にクレジットカードの情報が必要なので注意が必要です。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;付録 Vagrantによる開発環境の構築&lt;/h3&gt;
&lt;p&gt;付録としてVagrantとVirtualBoxを用いて仮想環境の立ち上げ方が紹介されています。なくても試すことはできますが、使いこなせると後々便利です。他の開発でも役に立つと思います。Docker等利用したことがあればそちらのほうがいいかもしれません。&lt;/p&gt;
&lt;h2&gt;特長&lt;/h2&gt;
&lt;p&gt;コードがしっかり書かれており、コメントも豊富なのでわかりやすいです。プログラムにやらせたいことの定義と、行う処理をしっかり読みながら進めていくといいです。&lt;/p&gt;
&lt;p&gt;応用の部分でのスクレイピングの活用が多く、おもしろいです。この本を読んで色々試しているうちに、あんなこともできそうだなとか、アイデアが湧いてくるかもしれません。&lt;/p&gt;
&lt;p&gt;別で紹介している&lt;a href=&quot;/2019/02/07/python-web/&quot;&gt;【実践技術書】PythonによるWebスクレイピング&lt;/a&gt;よりも、プログラムの設計や実装方法・プログラムそのものに関する内容が多いです。&lt;/p&gt;
&lt;p&gt;実際のアプリケーションを作成しながらプログラムの実装の設計などを学ぶことができると思います。
スクレイピングはWebの知識や技術を学ぶ上でいい例題になるので、基礎を学んだ後の実践にうってつけだと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Webアプリ開発の入門としておすすめです。
Webを利用したシステムを考えるときに、なんだかんだ外部APIへのリクエストなど必要になると思います。ほかサイトへのスクレイピングなどもできると、ぐっとできることの幅も広がるのでおすすめです。&lt;/p&gt;
&lt;p&gt;結構ボリュームのある本なのですが、紹介している応用の技術も盛り沢山なので、読んでいるだけで新しいアプリのアイデアとか思いつきそうです。引き出しを増やすためにも参考になる点の多い本です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】Selenium実践入門]]></title><description><![CDATA[「Selenium」をつかったブラウザテストの導入から実装、事例の紹介などを行った網羅的な本です。 網羅的に書かれていることもありますが、経験から得られる様々な知見が載っており、具体的な実装に活かすことができます。Selenium…]]></description><link>https://honmushi.com/2019/02/07/selenium-jissen/</link><guid isPermaLink="false">https://honmushi.com/2019/02/07/selenium-jissen/</guid><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「Selenium」をつかったブラウザテストの導入から実装、事例の紹介などを行った網羅的な本です。&lt;/p&gt;
&lt;p&gt;網羅的に書かれていることもありますが、経験から得られる様々な知見が載っており、具体的な実装に活かすことができます。Seleniumを用いたブラウザテストの導入を検討中のテスト担当者にとって、大いに参考になります。プログラマ向きの内容ですが、テスターに対しても内容を共有できるといいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4774178942/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774178942&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=d95e872400a04550592c313d0f0f6a6e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4774178942&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;0//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774178942&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&gt;Seleniumの基礎知識&lt;/h2&gt;
&lt;p&gt;テスト自動化についての知識を学びます。どんな恩恵を受けられるのかといったことが主な内容です。
個人的な経験では手動テストを行っている場面はまだまだ多いのではないかと思います。なかなか完全に自動化することは難しいと思いますが、取り組むだけでも大きく意味があると思います。軽く見られがちですが、構築以上にテストの工程は大切にするべきです。&lt;/p&gt;
&lt;h2&gt;WebDriverの基本&lt;/h2&gt;
&lt;p&gt;セットアップ手順から基本的なスクリプトの書き方、応用的な使い方も説明しています。様々なプログラミング言語でのセットアップ手順が用意されています。Java・Ruby・Python・javaScript・C#が挙げられていました。&lt;/p&gt;
&lt;p&gt;テストスクリプトの書き方、運用方法についての技法も紹介されています。かなり詳しく書かれているので、一通りやるだけで大抵のことはわかるようになると思います。覚えきれないくらいなので、なんとなくこんなことしたなと言う記憶を残してサクサク進むのがいいです。&lt;/p&gt;
&lt;h2&gt;複数の言語の実装が記載&lt;/h2&gt;
&lt;p&gt;本は分厚いですが、複数の言語について書かれています。ですから、自分の該当するもののみ抜き出して読めば、思ったよりボリュームは少ないです。ソースコードはそれほど多くありません。どちらかといえば実装や運用に当たって注意すべきことと、導入方法に重きをおいたような印象です。ためになる考え方や、設計すべき点が書かれており、運用する際には役に立つと思います。チーム全員で回し読みしたりするといいと思います。&lt;/p&gt;
&lt;h2&gt;便利なライブラリの紹介&lt;/h2&gt;
&lt;p&gt;WebDriverをよりシンプルに実装できるようになる、いくつかのライブラリの紹介です。
あまり詳細には読まなくてもいいと思います。あったら便利ですがなくてもできますし、余計な懸念や学習が必要になるかもしれません。&lt;/p&gt;
&lt;h2&gt;サイボウズやDeNAでの実践的な運用&lt;/h2&gt;
&lt;p&gt;テスト工程の運用で起こりがちな問題と解決方法が書かれています。
他にも実際の企業での運用の経験談も書かれています。サイボウズとDeNAでの運用の実態と知見を学ぶことができます。設計段階での考察・検討や運用したうえでの評価など、実体験に基づく情報になっており学べることが多いです。ここで紹介されている運用ノウハウを真似して取り入れてみるのもいいですし、参考にしてカスタマイズするのもありだと思います。&lt;/p&gt;
&lt;h2&gt;CSSセレクタやWebDriverのリファレンス&lt;/h2&gt;
&lt;p&gt;付録にリファレンスがついており、読み終わった後もリファレンス本として参考になります。&lt;/p&gt;
&lt;h2&gt;プログラマ向けの内容&lt;/h2&gt;
&lt;p&gt;プログラミングレベルでの実装については、詳細には書かれていない印象です。基礎的なことがわかっている状態であれば、この内容を参考に十分実装できると思いますが、プログラミング経験の少ないテスト担当者とかだと難しいと思います。&lt;/p&gt;
&lt;p&gt;プログラマとテスターが協力して、テストの環境を作り上げていく必要があります。その点でも、この本を一緒に読んで、協力しながら環境づくりに取り組むことに意味があると思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;構築するに当たってテストは大切なプロセスですが、軽く見られがちな時代もあったと思います。今ではTDDなど存在していますが、しっかり目を向けるべき点だと思います。&lt;/p&gt;
&lt;p&gt;正しい実装を行うためにも、一度テストの工程を見直して見るのも効果的です。構築者がテストについても面倒を見てあげられるような環境だと良いです。プラグラミングがわからない人に導入を進めてもらうのは難しいです。&lt;/p&gt;
&lt;p&gt;良いプロジェクトではテストも整っている印象です。テストにかけているリソースや整備状況などで、よい環境かそうでないかのある程度の判断要素になると思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】実践 Selenium WebDriver]]></title><description><![CDATA[Seleniumをつかった自動テストの本です。Java+Selenium+Firefoxを用いての実装についてです。
テスト自動化を検討中の方には参考になります。他環境での導入に当たっても参考にできる情報があります。。  WebDriverとWebElement…]]></description><link>https://honmushi.com/2019/02/07/selenium-webdriver/</link><guid isPermaLink="false">https://honmushi.com/2019/02/07/selenium-webdriver/</guid><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Seleniumをつかった自動テストの本です。Java+Selenium+Firefoxを用いての実装についてです。
テスト自動化を検討中の方には参考になります。他環境での導入に当たっても参考にできる情報があります。。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4873116953/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873116953&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=cb9aa7b6997c51e4cf007768fa3655c5&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4873116953&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873116953&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&gt;WebDriverとWebElementの紹介&lt;/h2&gt;
&lt;p&gt;Seleniumの歴史についてです。興味があれば読んでおけばいいですが、飛ばしてしまっても問題はありません。&lt;/p&gt;
&lt;p&gt;一連のアクションを実行できるようにします。簡単な操作から少しづつ練習していきます。親切に書かれているので躓くことは少ないです。
3章ではスクリーンショットを取ったり、Cookieを取り扱ったりする応用的な使い方になります。応用的と言ってもWebシステムのテストをする際には必ず必要になるので、ちゃんと学習しておきましょう。&lt;/p&gt;
&lt;h2&gt;WebDriverについて&lt;/h2&gt;
&lt;p&gt;Firefoxから始まり、IEやChromeのWebDriverの説明です。固有の機能などがあるので、選択するブラウザによって該当することを読んでおき、ブラウザごとの差異があることを把握しましょう。&lt;/p&gt;
&lt;h2&gt;WebDriverのイベントの理解&lt;/h2&gt;
&lt;p&gt;イベントの存在を理解することで、各ステップで起きていることのデバッグの方法を学びます。テストそのもののデバッグやテスト対象のデバッグの際に、この知識があるととても便利です。どのイベントで現象が発生しているのか問題の切り分けをすることから初めましょう。&lt;/p&gt;
&lt;p&gt;実際の障害発生時なども問題を切り分けることは最優先なので、そういった学習にもなると思います。&lt;/p&gt;
&lt;h2&gt;Remote WebDriver&lt;/h2&gt;
&lt;p&gt;リモートマシン上でブラウザテストを実行する方法についてです。RemoteWebDriverをつかって実装します。
ここまではローカルのサーバから動作させていましたが、そうするとその間他の作業ができません。実際の運用ではテスト用にリモートサーバを立ち上げて、並行して動作させることになります。その際の手順や仕組みを学びます。&lt;/p&gt;
&lt;p&gt;Selenium Gridについての説明もあります。ハブとなるPCからノードとなる複数のPCを動かし、ハブ上で管理集計する機能です。ややこしい内容ですが、大規模なテストであったり複数環境のテストであったりなどの場合に、テスト時間の効率化などを考えると、必要になってくる知識です。&lt;/p&gt;
&lt;h2&gt;Page Objectパターン&lt;/h2&gt;
&lt;p&gt;テストスクリプトのメンテナンス性を高めるための施策についてです。プログラミングする上で考慮すべき点は様々あると思いますが、テストスクリプトにも独自の落とし穴のようなものがあります。しっかり意識して、設計・実装を行うことで効率的に、かつ保守性高く運用できるように気をつけたいです。&lt;/p&gt;
&lt;h2&gt;iOSとAndroidアプリケーションのテスト&lt;/h2&gt;
&lt;p&gt;Appiumを用いて各スマホのアプリのテストを行う方法の紹介です。こちらを利用すればアプリのテストも自動化することができるようになります。この本の内容では簡単な触りだけ紹介しています。インストールなどの準備が大変なので、よほどで必要で無ければ飛ばしてもいいと思います。必要になってから他の本で学ぶという選択肢もあります。&lt;/p&gt;
&lt;h2&gt;対象の読者&lt;/h2&gt;
&lt;p&gt;基本的にjavaに関してプログラミングができるくらいの読者を想定しています。ブラウザテストに興味はあるけどどこから初めたらいいかわからない、Javaエンジニアにおすすめです。&lt;/p&gt;
&lt;p&gt;普段プログラミングをしないテスト担当者には難しいです。先にJavaの入門書などでプログラミングに慣れておいたほうが良いです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Javaをつかったブラウザテストの自動化をするに当たっては、この本を参考にすればうまくいくと思います。バージョンの更新など、そのままではうまく行かない点がありますが、ある程度は検索すれば解決できます。&lt;/p&gt;
&lt;p&gt;テスト関連の技術の需要はまだまだ大きいと思います。正しくテストが整備されていない、運用されていない環境はまだまだあると思いますので、基本的な知識や実運用を行うことができるととても助かります。&lt;/p&gt;
&lt;p&gt;この本ではJavaに限られていますが、テストのノウハウを覚えてしまえば他の環境であっても簡単に応用ができます。後回し・他の人に任せっきりになりがちですが、チャンスと捉えてテストにも取り組んでいきたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】OKR シリコンバレー式で大胆な目標を達成する方法]]></title><description><![CDATA[「Objectives Key Results」というKPIに変わる目標達成のフレームワークの紹介です。 メンバーのモチベーションを維持しながら、目標達成がしっかり成果につながり、全員が意識することができるようなフレームワークになっています。 後半のOKR…]]></description><link>https://honmushi.com/2019/02/05/okr/</link><guid isPermaLink="false">https://honmushi.com/2019/02/05/okr/</guid><pubDate>Tue, 05 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「Objectives Key Results」というKPIに変わる目標達成のフレームワークの紹介です。&lt;/p&gt;
&lt;p&gt;メンバーのモチベーションを維持しながら、目標達成がしっかり成果につながり、全員が意識することができるようなフレームワークになっています。&lt;/p&gt;
&lt;p&gt;後半のOKRの解説は特に参考になります。これからOKRに取り組もうとしている方や、なんとなくで進めてきたという人にはぜひ呼んでみてほしいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4822255646/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4822255646&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=93c656ca54975b6db7f6601377c7552b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4822255646&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4822255646&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&gt;概要&lt;/h2&gt;
&lt;p&gt;前半は架空の物語で、OKRを用いて成功に向かって再生していくメンバーの成長を描いています。
うまく行かずぶつかり合っていたメンバーですが、OKRを取り入れることでいつの間にか成功に向かって進んでいるというような物語です。&lt;/p&gt;
&lt;p&gt;後半はフレームワークの説明になっており、運用ノウハウなどの説明になっています。&lt;/p&gt;
&lt;p&gt;忙しければ後半だけ読んで取り入れるのもいいと思います。少し前からOKRを取り入れてうまく回り始めた企業の情報を、日本でも目にするようになった気がします。そちらを探して読んで見るほうがおもしろいです。&lt;/p&gt;
&lt;h3&gt;うまく行かない理由&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;h3&gt;OKRの基本&lt;/h3&gt;
&lt;p&gt;「O」は定性的なものをひとつだけ、「KR」は定量的なものを3つくらいにします。四半期くらいを一定期間として、「KR」を確認することで「O」が達成できたかどうかを判定します。&lt;/p&gt;
&lt;p&gt;Oの基本的な決め方&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;KRの基本的な決め方&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;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;h2&gt;特徴&lt;/h2&gt;
&lt;p&gt;OKRのイメージをつかむために前半の物語があるようです。ある程度目標達成とか、モチベーションのイメージなどがすでにできている人は飛ばしてもいいと思います。&lt;/p&gt;
&lt;p&gt;OKRの説明の箇所では、振り返りの内容として話すべきことや、目標の決め方などが具体的に書かれています。
いつでも当てはまるわけではないと思いますが、参考になります。
うまく行かないパターンなども書かれているので、読んでおくと同じ罠にかからずにすみます。&lt;/p&gt;
&lt;p&gt;簡単にはうまく行かないこと、繰り返し行動して学び修正していくことなども書かれており、継続して読んでいく方がいいです。OKRを取り入れてみたけどなかなかうまく行かないという場合も、まだまだ途中というだけかもしれないので本の内容が参考になります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;目標を決めてもうまく運用できなかったり、振り返る頃には誰も覚えていないということがあると思います。達成できたとしても、それで目指しているゴールに近づいているのか曖昧になっているということもあります。
OKRのようなフレームワークに沿って考えることで、メンバーのモチベーションを維持しつつ、しっかりと前に進んでいくことができるので早いうちに築き上げておくべきものです。&lt;/p&gt;
&lt;p&gt;OKRに関する本は他にはあまりない印象なので、とりあえず気になった場合はこの本から初めて見るのがいいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】なぜ、あなたの仕事は終わらないのか]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/05/owaranainoka/</link><guid isPermaLink="false">https://honmushi.com/2019/02/05/owaranainoka/</guid><pubDate>Tue, 05 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「スピードは最強の武器である」という考え方と実践方法について、元マイクロソフトのプログラマー中島さんが書いた本です。ビル・ゲイツから学んだ時間術を紹介しています。&lt;/p&gt;
&lt;p&gt;まるで自分のことを言っているのかのようなタイトルで、ビクッとしてしまうかもしれません。
内容は参考になることが多く、プログラマーの人には特におすすめです。もちろんそれ以外の業種の方にも大いに参考になると思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/B01GPCKJWK/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B01GPCKJWK&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=b54aeda4e13fe710d6f2758ccd1fb2c1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B01GPCKJWK&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=B01GPCKJWK&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&gt;概要&lt;/h2&gt;
&lt;p&gt;すべての人に平等に与えられる時間を最大限に、かつ効率的に運用するための考え方や方法が書かれています。「ロケットスタート時間術」といいます。方法については4,5章で紹介されているのですが、そこまでの1〜3章も意味を知る上で読んでおくといいです。共感できることが多いです。残りの6章も、応用としておもしろいです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;なぜ、あなたの仕事は終わらないのか&lt;/p&gt;
&lt;p&gt;今までの自分の仕事を振り返ります。
締め切り間近になって取り掛かる「ラストスパート型」という思考に目を向けて、その状態に陥っていないか振り返ります。&lt;/p&gt;
&lt;p&gt;ズバリ終わらない原因は「安請け合い」「ギリギリまでやらない」「見積もりしない」ことです。
これらの事実を見直し解決できれば、仕事は終わるはず！です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;時間を制するものは、世界を制す&lt;/p&gt;
&lt;p&gt;最初から100％は目指さない。必ず作り直しになるし、評価を恐れない。時間を守れない人と思われるよりも全然マシです。&lt;/p&gt;
&lt;p&gt;遅刻しないように、待ち合わせの30分前に自分の中で待ち合わせ時間を再定義して、スタバでゆっくりします。すなわち、約束の時間にその場所にいることが重要で、間に合う予定の電車に乗ることではありません。受け取った約束を自分の中で再定義します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「ロケットスタート時間術」はこうして生み出された&lt;/p&gt;
&lt;p&gt;夏休み終盤に海に誘われたが、宿題が残っていていけなかったことから意識が変わったそうです。
翌年からは、さっさと夏休みの宿題を終わらせたそうです。やりたいことをやるために、やりたくないことを速攻で終わらせる考えです。&lt;/p&gt;
&lt;p&gt;まず作ってみて、見せてみることでチャンスが生まれます。誰より速く作って動かしプレゼンすることで企画として認められたそうです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;今すぐ実践ロケットスタート時間術&lt;/p&gt;
&lt;p&gt;「常に締め切りを守ること」は100人に1人もできないそうです。ラストスパート思考が諸悪の根源です。最後に頑張ればなんとかなる、という考え方が根底にあります。&lt;/p&gt;
&lt;p&gt;例えば10日くらいでこれやっといてと言われた場合&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日もらう
2. この2日をロケットスタート期間として、「ほぼ完成」まで持っていく
3. 「ほぼ完成」まで行かなかった場合、スケジュールの調整を交渉&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最初の2割の時間で8割完成させます。残りの8割の時間は流しの時間で、残った2割のブラッシュアップ・クオリティ向上に取り組みます。前倒しで仕事に取り組むことが大切です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ロケットスタート時間術を自分のものにする&lt;/p&gt;
&lt;p&gt;ロケットスタート時間術をさまざまな場合にカスタマイズします。長期にかかる仕事であったり、いくつか並行して進むような場合のは話です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;時間を制するものは、人生を制す&lt;/p&gt;
&lt;p&gt;これまでの時間術を人生に役立てるためのノウハウです。勉強法であったり仕事の選び方などが紹介されています。&lt;/p&gt;
&lt;p&gt;これまでのノウハウを活かして行動することで、自分のやるべきことに集中して取り組むことができます。自分が幸せになれることをやる、やり続けることで幸せを手にできたそうです。嫌なことにも期限を切って、自分の目指したいものにフォーカスすることが大切です。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;特徴&lt;/h2&gt;
&lt;p&gt;プログラマー特有の時間管理術や見積もり術が多いです。情報系の職種であれば、そのまま取り入れることができると思います。大きな根本の部分は他のあらゆる職種で共通していることもあると思うので、参考にはなると思います。&lt;/p&gt;
&lt;p&gt;最後には読みっぱなしで終わらないように、明日から始めるべきことや具体的な行動（明日の仕事のタスクリストをつくる・明日の仕事は午前中で終わらせる！）が書かれています。
確かに、読んで満足してそのまま取り組まないということはよくあります。ですので、この本の内容に従ってこれらにもしっかり取り組めるといいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;タイトルからそうですが、まるでエンジニアのあるあるが詰まっており、自分のことを言い当てられているかのような印象でした。&lt;/p&gt;
&lt;p&gt;ロケットスタートを意識して取り組むことは最初は難しいですが慣れれば簡単になります。サクサク進んで、締め切り頃には余裕がある仕事というのは気分がいいです。結局使う体力は同じはずなので、より気分良くできる方法に出会えるのが良いです。ロケットスタート時間術を使いこなして、ゆとりある時間を送れるようになりたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】図で考える。シンプルになる。]]></title><description><![CDATA[いろんな概念を図にして考えることでよりシンプルに理解できるという話です。
図にする時にも…]]></description><link>https://honmushi.com/2019/02/04/zu-simple/</link><guid isPermaLink="false">https://honmushi.com/2019/02/04/zu-simple/</guid><pubDate>Mon, 04 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;いろんな概念を図にして考えることでよりシンプルに理解できるという話です。
図にする時にも7つの図のパターンがあり、基本的にはこれに当てはめるだけで図を用いた整理ができます。&lt;/p&gt;
&lt;p&gt;演習の形で例となる事象の図解化をしていくので、読みながら練習して身につけていくことができます。&lt;/p&gt;
&lt;p&gt;簡単に読み進めることができるのですぐに実践に取り入れることができます。文章では伝わりにくいことや整理しきれないことも、図解にすることで理解しやすくなります。この本を読んで上手に整理・理解ができるよう勉強したいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4478069905/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4478069905&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=c6ce2ac862c9026064912a5f3d65f56c&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4478069905&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4478069905&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&gt;本の概要&lt;/h2&gt;
&lt;p&gt;図にすることで考えを整理してより理解を深めることができます。ただ、図解することは結構ハードルが高く感じる人もいて、おっくうになりがちです。&lt;/p&gt;
&lt;p&gt;この本では誰でも書けるような簡単な7つの図のパターンを紹介しています。そして、それぞれの使い方と場面を知ることができます。
どの図もシンプルな要素でできており、枠に当てはめて使うことができます。演習を行うことで、手先のテクニックだけでなく実際の活用方法や考えかたが身につきます。&lt;/p&gt;
&lt;p&gt;図にすることによって、シンプルに考えられるようになり思考プロセスも単純化することができるようになります。
自分の頭の中で整理することも役に立ちますが、他人に説明・共有するときにも力を発揮します。&lt;/p&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;7つの図の紹介をしたあとに、基礎トレ・応用と進んでいきます。&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;/ol&gt;
&lt;p&gt;基礎トレではそれぞれの図の使い方のコツと、実際の事象を例に図解を行います。練習問題ごとに解説・解答が載っているので確認しながら学ぶことができます。
しっかりと読み飛ばさず問題に取り組んでいけると理解も深まりますし、より効果的に学びが得られました。&lt;/p&gt;
&lt;p&gt;応用では人生戦略を図解を用いて考えたり、図解の習慣化を取り上げています。読書であったり動画コンテンツを見たあとに、その内容を図解してみることをおすすめしています。
他にも、他人に伝えるために図解にひと工夫を加えて効果を足したりすることで表現力を高めるコツもあります。他人に教える・説明する時に便利な方法が紹介されているので、そういった機会が多い方にはとても学びになる内容でした。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;慣れていないと図解するということを難しく捉えてしまいます。しかし、この本のようにいくつかのパターンに当てはめることができれば、オリジナルのセンスなどはあまりいらないように思います。&lt;/p&gt;
&lt;p&gt;理解を深めるためであったり、よりシンプルに物事を捉えるためにも図解は大いに役に立つものです。頭の中を整理するためにも使えるようになると良いです。プログラミングでも設計でもよく役に立ちます。&lt;/p&gt;
&lt;p&gt;難しいIT関連の概念や知識を自分で理解するときはもちろんですが、人に教える際にも役に立つ内容でしたので、とても良い勉強になりました。
早速図解して開設できるようにホワイトボードを用意して見たところ、簡単に描き始める癖がつきました。おすすめです。&lt;/p&gt;
&lt;p&gt;様々な図解の本を読んで、自分もやってみたいなあと思っている人は多いと思います。この本を読んで、日常のいろいろなものを図解してみることから初めて見るのがよさそうです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】Joel on Software]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/04/joelonsoftware/</link><guid isPermaLink="false">https://honmushi.com/2019/02/04/joelonsoftware/</guid><pubDate>Mon, 04 Feb 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4274066304/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274066304&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=18b91118a7cf81dedd77961c4f5dc6db&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4274066304&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4274066304&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&gt;本の概要&lt;/h2&gt;
&lt;p&gt;著者が自身のブログに書いた内容を編集したものです。読みやすいように以下のような章わけがされています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;プログラミングのプラクティス&lt;/p&gt;
&lt;p&gt;プログラミングを行う上でのアドバイスです。ただし、技術者の目線と言うよりはマネージャー的な目線での手段が多いです。作業に集中させるために環境を良くしようとか、バージョン管理やデイリービルドをしっかりしようといった感じでしょうか。今時これくらいは基本的にできている環境のほうが多いのかもしれませんが、そうでないならすぐになんとかしたほうがいいです。&lt;/p&gt;
&lt;p&gt;最近では是非が問われるかもしれませんが「仕様書」についての考察もあります。仕様書とはこういうものだという例もあれば、誰が書くのか？管理はどうするのかという内容もあります。同じ悩みを持ったことがある人は多いと思います。&lt;/p&gt;
&lt;p&gt;スケジュールの項目などちょっとツールなどは古いですが、基本的な部分はためになると思います。Exelを使う必要はありませんが、スケジュールに組み込むべき要素や見積もりの根拠など参考になります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;開発者のマネジメント&lt;/p&gt;
&lt;p&gt;こちらもマネージャや人事的な話が多いです。採用の際にはこういった箇所をチェック・テストするべきだとか、報酬の考え方などです。章自体は少なめなのですが、結構参考になることは多いです。チームを立ち上げる際など一度目を通しておくのがいいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;それほどランダムでもないトピックに関するランダムな考察&lt;/p&gt;
&lt;p&gt;特別テーマが定まっておらず、いろいろな内容が書かれている章です。基本的には著者が経験した事件の紹介と、そこから得た教訓です。特別なテーマ等は無いので読み物としておもしろいです。&lt;/p&gt;
&lt;p&gt;著者はMicrosoftで働いていたので、そこで経験したことも書かれています。超大手の会社なので、その実情が知れるだけでも結構おもしろいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;.NETに関する少し行き過ぎた論評&lt;/p&gt;
&lt;p&gt;.NETの開発の際に著者が思っていたことことです。ここは今読んでもそれほど参考になるものではないです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;技術者の目線で読むと、思っていたこととは違うことが書いてある印象を受けると思います。実際に起こった経験から、その時の対応や感想が書かれています。こんなことが実際に起こるのか、といったことから、こんな結果になるならあのときはどうすればよかったのだろうかなど、いろいろ考える余地があります。&lt;/p&gt;
&lt;p&gt;経験豊かな著者による問題に対する解決方法が乗っているので、かなり参考になると思います。ただ、外国での事柄であることと、ちょっと古い内容ですので、その部分はうまく補完できるといいです。エンジニアリングの根本的なあり方みたいなものはいつの時代も変わらないのかもしれません。&lt;/p&gt;
&lt;p&gt;1エンジニアとしてのキャリアではなく、プロジェクトをうまくすすめるためのマネジメントなどの内容が多めです。特に、自分が経営者・雇用者の立場での内容が結構多いので、普段とは異なった目線での価値観が多いと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;かなり昔に書かれた内容なのですが、今でも結構参考になるところがあります。技術者というよりはマネージャや人事的な目線での捉え方なので、そういった経験がない人にとっては新しい視野になると思います。もちろん技術者でもビジネスやマネジメントの目線が合ったほうがいいので、その手始めにおすすめします。&lt;/p&gt;
&lt;p&gt;内容もブログがもとなので、面白く書いてあり興味を持って最後まで読むことができます。1つ1つの章も短いので、気になるテーマのみ読んで見るので十分です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】とにかくすぐやる人の仕事の習慣]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/01/tonikakusuguyaru/</link><guid isPermaLink="false">https://honmushi.com/2019/02/01/tonikakusuguyaru/</guid><pubDate>Fri, 01 Feb 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/B009CP9ZEQ/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B009CP9ZEQ&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=84f04f992782c6c9dcf432ae3441cf2a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B009CP9ZEQ&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=B009CP9ZEQ&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&gt;本の概要&lt;/h2&gt;
&lt;p&gt;すぐやる人の習慣を紹介しており、それを真似ることで誰でもすぐやる習慣を身につけることができます。
同じやるなら「後でやる人」より、「すぐやる人」のほうが印象はいいので、積極的にすぐ動きましょう。&lt;/p&gt;
&lt;p&gt;1部と2部に分かれています。&lt;/p&gt;
&lt;p&gt;1部はすぐやる人の意味や得する点、意識するべきことなどを紹介しています。13のキーワードで進めていくので覚えやすいです。例えば、自分をすぐやる人であると周りにアピールすることは効果が大きいです。周りからも頼みやすくなりますし、実際にできたときの納得感がアップします。ほかにも嫌な仕事こそすぐ片付けることも大切です。意識しないとなかなかできませんが、やってみるとそれほど難しいことではありません。すぐやることを意識することで、かかる時間も短くなり、残業等も減ると思います。&lt;/p&gt;
&lt;p&gt;2部はすぐやる人になるための習慣を30個紹介しています。これらをメモして日頃から意識することですぐやる人になることができます。できれば新人のうちから意識して取り入れたいことですね。
すぐやるための小手先のテクニックばかりでなく、ビジネスマンの意識すべきこととして挙げられています。身だしなみのことであったり、できないことはしっかりNoと言うことなど、初めのうちに身に着けておくべきことです。仕事にかかった時間を計測することなども、最初のうちは思いつきもしないので、よくわからなくてもやってみるといいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;すぐやることは大切なスキルだと思います。意外と世の中にはすぐやることができない人が多いと思います。忙しいからとかいろいろ理由はあるのですが、頼む側からすれば関係ありません。やるかやらないか、そしてすぐやるか後でやるかという結果しかわかりません。どれが印象としていいかで言うと間違いなく「すぐやる」なので、しっかりすぐやる人を目指しましょう。&lt;/p&gt;
&lt;p&gt;すぐやるためには時間を捻出するスキルや、かかる時間を見積もるスキルなど必要になります。このあたりのスキルは経験によるものも大きいともいます。意識しながらどんどん取り組むことで、それらの経験値もたくさん手に入れることができると思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】ひらめきスイッチ大全]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/02/01/hiramekiswitch/</link><guid isPermaLink="false">https://honmushi.com/2019/02/01/hiramekiswitch/</guid><pubDate>Fri, 01 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&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;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4861139961/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4861139961&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=d7d621821de4e5d0ce8ac2112a99696b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4861139961&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4861139961&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;アイデアを見つけるための発想の方がいっぱい詰まっています。基本的には箇条書きになっていて、ひらめきのスイッチとなるルールと、その説明が見開きで載っています。&lt;/p&gt;
&lt;p&gt;225個のひらめきスイッチが載っており、見た目からわかるとおりボリューム満点です。1つ1つの内容は少ないですが、ひらめきのきっかけにはなりそうです。&lt;/p&gt;
&lt;p&gt;アイデアを見つけるためのプロセスではなく、ひらめくためのテクニックというか刺激になることが載っています。どちらかといえば近道のような本です。しっかりアイデアの本質であったり技術を身に着けたい場合は別の本のほうがいいと思います。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;行き詰まってしまったときの気分転換にもいいかもしれません。ついでに何かひらめくことがあると思います。最初から順番に読むのではなく、なんとなく開いたページを読むのもおすすめです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】チョコレートの手引]]></title><description><![CDATA[もう…]]></description><link>https://honmushi.com/2019/01/31/chocolate/</link><guid isPermaLink="false">https://honmushi.com/2019/01/31/chocolate/</guid><pubDate>Thu, 31 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;もう2月になります。チョコレートを目にする機会が増えました。&lt;/p&gt;
&lt;p&gt;チョコレートについて、その奥深さを知ることができる本です。&lt;/p&gt;
&lt;p&gt;全く知らない人にもわかりやすく、かつ詳しいことが書いてあるのでおすすめです。チョコレートってそもそもどういうものなのだろうと思ったら読んでみるといいです。チョコレート全般のことについて詳しくなります。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4844136755/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4844136755&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=01086f3cb3ce66fb37255caf6e349db8&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4844136755&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4844136755&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&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&gt;おわりに&lt;/h2&gt;
&lt;p&gt;毎年2月が近づくと読みたくなる本です。
直前に騒がしくなり、スッと終わって特に何も残らないようなイベントです。一過的なイベントにしてしまうのではなく、ちょっと踏み込んで見つめ直してみるのもおもしろいと思います。味わいが豊かになりそうです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】React Native 入門]]></title><description><![CDATA[React Nativeの入門書を試しました。
WEB上のIDEを利用して実際に動くアプリの作成を行うことができます。ローカルに環境を用意することなく一通り学ぶことができます。 React Nativeを用いることで、AndroidとiOS…]]></description><link>https://honmushi.com/2019/01/31/react-native/</link><guid isPermaLink="false">https://honmushi.com/2019/01/31/react-native/</guid><pubDate>Thu, 31 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React Nativeの入門書を試しました。
WEB上のIDEを利用して実際に動くアプリの作成を行うことができます。ローカルに環境を用意することなく一通り学ぶことができます。&lt;/p&gt;
&lt;p&gt;React Nativeを用いることで、AndroidとiOS両方で動作するアプリを構築できます。
たくさんのコンポーネントを利用することもでき簡単に実装できます。&lt;/p&gt;
&lt;p&gt;ただし、この本ではストアでのアプリ公開の手順などは書かれていません。
その部分は他で学ぶ必要があります。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798056057/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798056057&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=b612ed46df748662a3c287524d938349&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4798056057&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4798056057&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&gt;なぜこの本を読んだか&lt;/h2&gt;
&lt;p&gt;アプリ制作の手法を学ぼうと思いました。ゆくゆくは作成したアプリをストアで公開したいです。&lt;/p&gt;
&lt;p&gt;ReactNativeを使うことでAndroidとiOS両方で動作するアプリが作れますので、お手軽そうと感じています。実際、UIなどの部分で様々なコンポーネントが用意されているので、その点でも効率よく開発ができると感じました。&lt;/p&gt;
&lt;h2&gt;本の概要&lt;/h2&gt;
&lt;p&gt;本に出てくるソースコードはサンプルコードとして出版社のHPからダウンロードが可能です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;インストールとセットアップ&lt;/p&gt;
&lt;p&gt;Android StudioやXcode、npmやReactNativeのインストール方法が紹介されています。
いろいろな項目が合ってわかりにくいですが、必要なものを選択してセットアップしましょう。&lt;/p&gt;
&lt;p&gt;おすすめはExpoSnackを利用してWEB上で開発する方法です。ローカルに何もインストールしなくていいので、簡単に初められます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;基本をマスター&lt;/p&gt;
&lt;p&gt;基本の作り方とコンポーネントの基本についてです。Reactに関する知識の説明は少しありますが、詳細に知りたい場合は公式サイトか別の書籍を参考にしたほうがいいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UI関連のコンポーネント&lt;/p&gt;
&lt;p&gt;スライダーやスイッチなどUI表現のコンポーネントを実装してみます。リストやフォームなどもここで出てきます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;レイアウト関連の実装方法&lt;/p&gt;
&lt;p&gt;ヘッダーやflexboxなどの表現方法の紹介です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OS固有の機能&lt;/p&gt;
&lt;p&gt;AndroidとiOSそれぞれで利用できるコンポーネントや機能の紹介です。ここに関してそれほどこった作りを目指していないのであれば飛ばしても問題ないと思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;グラフィック描写&lt;/p&gt;
&lt;p&gt;Canvasなどをつかって図形の描写を行います。四角や丸の図形を描いて、グラデーションしたり回転縮小したりします。ここも、あまり使う機会がなければ飛ばしていいと思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;タイマー・アニメーション・データアクセス&lt;/p&gt;
&lt;p&gt;ちょっとむずかしくなってきますが、複雑な処理を行います。データアクセスではネットワークにアクセスしたり、ファイルの読み書き、ストレージへのアクセスなどを行います。アプリつくる上でデータ保存とかは重要なのでしっかり身につけておきたいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;サンプルアプリ開発&lt;/p&gt;
&lt;p&gt;3つのアプリを試しに作ります。WEBViewやストレージへのアクセスなど、これまでの知識をフル活用するので、良いまとめになります。位置情報取得や権限取得など、ここで初めて出てくる知識もあるのでぜひ体験しておいてほしいです。コードの量はそれほど多くないので、簡単に実装できます。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;Expoを利用することで、簡単に React Nativeを利用できます。ストアを通さず独自のシステムでアプリを公開・配信したりできます。実用には耐えないと思いますが、練習やデバッグであれば十分そうです。&lt;/p&gt;
&lt;p&gt;しかもExpoにはSnackというWEB上で利用できる開発環境が用意されています。ローカルにパッケージのインストールなどを行うことなく、WEB上で構築、実行ができます。
これらの使い方が書かれているので、一度試してみることをおすすめします。&lt;/p&gt;
&lt;p&gt;上記以外のAndorid StudioやXcodeのインストール手順や構築方法、デバッグ方法も簡単にですが紹介されていました。&lt;/p&gt;
&lt;p&gt;ソースコードはどれも短いのでわかりやすいと思います。複雑な設計や構造ではないので理解が早いです。解説も丁寧に書かれており処理の概要が分かりやすかったです。&lt;/p&gt;
&lt;h2&gt;注意点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Expoの開発・バージョンアップが盛んです。そのままでは動作しなくなっている関数などがあるので、注意が必要です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Headerのiconの表示がエラーになることがありました。
Expoで利用するiconのモジュールをインストールすれば解決できそうでしたが、よくわからなかったので、その部分は取り除いて進めました。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;React Navigationの利用方法が変更されている&lt;/p&gt;
&lt;p&gt;「createStackNavigator」という関数をReactNavigationからロードして利用しますが、v3へのアップデートによる変更の影響でそのままでは動作しないときがありました。バージョンを「2.11.2」にするか、ソースコードを変更するかしましょう。エラーの内容で検索するとstackoverflowなどで解決方法を見つけられます&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 { createStackNavigator } from &amp;#39;react-navigation&amp;#39;;
~~ 省略 ~~
export default createStacknavigator(
  {
    Home: { screen: FirstScreen },
    Next: { screen: SecondScreen },
    Last: { screen: Thirdcreen },
  },
  {
    initialRouteName: &amp;#39;Home&amp;#39;,
  }
);&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;// 動いたソース
import { createStackNavigator,createAppContainer } from &amp;#39;react-navigation&amp;#39;;
~~ 省略 ~~
const RootStack = createStackNavigator(
  {
    Home: { screen: FirstScreen },
    Next: { screen: SecondScreen },
    Last: { screen: Thirdcreen },
  },
  {
    initialRouteName: &amp;#39;Home&amp;#39;,
  }
);

// このコンテナ作成処理を自分で行う必要がある
const App = createAppContainer(RootStack);
export default App;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;実行環境は自分のスマホにEXPOアプリをインストールして、連携して実行するのがおすすめです。&lt;/p&gt;
&lt;p&gt;ExpoSnackではWEB上で実行できる「Appetize.io」を利用することができますが、おすすめできません。IDEの右側にスマホが表示されて、そこでアプリを動かすことができ一見便利そうです。しかし、無料のアカウントではリソースを他ユーザーと共有するようで、他ユーザーの使用状況によって待たされることが多かったです。午前中であれば、ほとんど待ち時間無しでスムーズに実行できました。&lt;/p&gt;
&lt;p&gt;各OSのストアからExpoアプリをインストールすれば、WEB上のIDEと連携して、手元の端末で実行できます。こちらは待ち時間が全く無いのでおすすめです。端末のIDであったりQRコード読み込みで連携が開始できます。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ReactNativeの基本的な使い方を学ぶことができます。簡単なアプリであれば、この本の内容を応用して実装することができます。&lt;/p&gt;
&lt;p&gt;複雑なアプリを構築する場合は、もっといろいろな知識が必要なので詳しい学習が必要です。アプリのビルドやストアでの公開などの手順はこの本にはありません。実際のアプリでは設計なども必要なので、この本の内容だけではその部分についても難しいかもしれません。&lt;/p&gt;
&lt;p&gt;ReactNativeを使ってみて、AndroidとiOSの両方のプラットホームで動くアプリが作れるのは快適でした。一度ReactNativeを利用したアプリを構築して、ストアに公開してみようと思います&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】知的戦闘力を高める 独学の技法]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/30/dokugaku/</link><guid isPermaLink="false">https://honmushi.com/2019/01/30/dokugaku/</guid><pubDate>Wed, 30 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&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;本やノートに書いてあることをどうして憶えておかなくてはならないのかね？&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;全部覚えることが正義ではないこと、それを正当化する根拠を感じさせてくれるところがとても好きです。当たり前と思われていることに対してNOを言えるのって素敵なことだと思います。&lt;/p&gt;
&lt;p&gt;この本では「知的戦闘力を高める」ことを目標として捉えており、まずは知的戦闘力とは何か、なんの役に立つのかという説明から始まります。ざっくりその後の内容は、本の選び方・読み方というものです。ただ、読書以外にも応用はできると思います。&lt;/p&gt;
&lt;p&gt;読書するなりテレビを見るなり動画を見るなり、独学をする時間手増えているのではないかと思います。
速いうちにどうやって学べば効果的なのかを意識できると、上達が早まると思います。ただ、やればやる分何かしらの場面で訳には立つので、回り道でもとりあえずやってみるということは大切な心がけだと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4478103399/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4478103399&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ba07cbd9a4c02e3f6588b5a3790608d9&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4478103399&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4478103399&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&gt;本の概要&lt;/h2&gt;
&lt;p&gt;独学のシステムを「戦略」「インプット」「抽象化・構造化」「ストック」の4つのプロセスに捉えています。
単純な方法や手段のみでなく、学ぶ際の一通りの流れ全体について考えることで効果を高めることになります。&lt;/p&gt;
&lt;p&gt;本の内容は以下の構成です&lt;/p&gt;
&lt;ol start=&quot;0&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;/ol&gt;
&lt;h2&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;インターネットの普及と環境の整備によって、簡単にいろんな情報に触れることができるようになっています。更には学校に行かなくても様々な学習ツールやサービスが立ち上がっており、勉強するチャンスは拡大していると感じています。&lt;/p&gt;
&lt;p&gt;ただ、学習する機会はほぼ全員が平等です。同じものを見てどれだけのものを身に着けられるかというところで、個人で大きく差が出るのかなと思います。しっかり早いうちから勉強する方法を見直しながら進んでいくことで自分なりの勉強法が見つかり、効果的に応用できるようになりそうです。学び方を学ぶというのは一見前に進んでいなさそうですが、そこから学ぶスピードが大きく上がると思いますので、しっかり取り組みたい内容です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】GRIT やり抜く力]]></title><description><![CDATA[人生で何を成し遂げられるかは「才能」よりも「情熱」と「粘り強さ」によって決まる。
これらをまとめてGRIT…]]></description><link>https://honmushi.com/2019/01/29/grit/</link><guid isPermaLink="false">https://honmushi.com/2019/01/29/grit/</guid><pubDate>Tue, 29 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;人生で何を成し遂げられるかは「才能」よりも「情熱」と「粘り強さ」によって決まる。
これらをまとめてGRIT、すなわち「やり抜く力」として、紹介しています。&lt;/p&gt;
&lt;p&gt;それは一体何なのかというところから始まり、伸ばし方についての紹介までが内容です。才能以外の大切な素質に気づくことができると思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4478064806/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4478064806&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=8246d721f96a9be12b80a4033a4ca31b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4478064806&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&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;
&lt;h2&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;自らの意志で伸ばすのはもちろんですが、周りの人や家族などに対しても取り組むことができます。
例えば以下の4ステップが効果的です。このステップに沿って、やり抜く力の伸ばし方が構成されています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;興味&lt;/p&gt;
&lt;p&gt;自分がやっていることを心から楽しむ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;練習&lt;/p&gt;
&lt;p&gt;昨日より上手になるように日々の努力を怠らない&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;目的&lt;/p&gt;
&lt;p&gt;この仕事は重要なことで他人の役にも立つ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;希望&lt;/p&gt;
&lt;p&gt;不安になってもひたすら歩み続ける&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;グリットスコアのテスト、すなわちやり抜く力診断も途中で出てきますので一度やってみるといいです。
他にもいくつかの性格診断のようなものもあるので、取り組んで見ると面白いです。
それを伸ばす方法も紹介されているので、数カ月取り組んでみてからもう一度テストしてみると点数が変わっているかもしれません。&lt;/p&gt;
&lt;p&gt;外から伸ばす方法の章では、自分の子供のやり抜く力を伸ばすための方法に触れられています。子育てなどの指針ぎめにもいいと思います。内容を見る限りでは、小さなうちからしっかり取り組んでおくと、立派な大人になるだろうなあと感じました。&lt;/p&gt;
&lt;h2&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;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;こう考える
すごい人は才能があるからできる → 自分には才能がなかったのだからできなくて当然

でも、実際には
すごい人は努力をしたからできる → 自分は努力をしなかったせいでできない&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;確かにそうなのかもなと思いました。才能のせいにすれば傷つかずにすむから、そのように考えるのでしょうね。結構残酷ですがおもしろい視点です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】沈黙のWebマーケティング]]></title><description><![CDATA[SEOやWEBマーケティング関連の入門書としてよく見かける本です。 内容はかなり初心者向けになっており、文字よりもイラストや会話などが多く読みやすいです。
情報はそれほど多くありませんが、普段あまり読書しないという人でも簡単に読めるようになっています。 WEB…]]></description><link>https://honmushi.com/2019/01/29/webbone/</link><guid isPermaLink="false">https://honmushi.com/2019/01/29/webbone/</guid><pubDate>Tue, 29 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SEOやWEBマーケティング関連の入門書としてよく見かける本です。&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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/484436474X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=484436474X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=1e2a7e11e3eba7f6b75386dc5bc97f28&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=484436474X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=484436474X&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&gt;本の概要&lt;/h2&gt;
&lt;p&gt;フィクションのストーリーに沿ってWEBマーケティングのなんたるかを学ぶことができます。&lt;/p&gt;
&lt;p&gt;オーダー家具の企業の売れ行きが好調でない、どうやらWEBをつかったマーケティングがうまく言っていない様子。主人公が参上していくつかの問題を解決していく。というものです。&lt;/p&gt;
&lt;p&gt;企業サイトで起こりそうな問題や事件が取り上げられているので、身近な経験として持っている人も多いかもしれません。&lt;/p&gt;
&lt;p&gt;SEOペナルティやWEBデザイン、ライティングなど幅広い問題に触れています。オウンドメディアの運営やSNSでの広報なども行っています。
それぞれの問題については広く浅くといった印象で、深い掘り下げは無いです。その分理解しやすくまとめられているので、すぐに活かせることが見つかると思います。&lt;/p&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;WEBマーケティングのなんたるかの部分は概要的なものなので、ちゃんとやろうと思うとこの本の内容では足りないです。&lt;/p&gt;
&lt;p&gt;個人的にWEBサイトを立ち上げたとかであればある程度参考になると思いますが、ビジネスに取り入れるのであれば、もっと踏み込んだ知識の理解と習得が必要です。&lt;/p&gt;
&lt;p&gt;WEB関連の知識がなく単語の意味が全然わからなくて混乱している、とかの状況であれば取っ掛かりとなるのでおすすめです。&lt;/p&gt;
&lt;p&gt;会話形式の内容なので、漫画の様に読み進められます。登場人物も少なく、ストーリー仕立てになっているので興味を持ったまま最後まで一気に読めます。章と章の間には、出てきた内容の細かめな解説が乗っているので、そこもしっかり読み込んでおくべきです。サクッと読めることもあって書いてある情報は絞られていて、もっと詳細を学びたいと感じた場合は他の本や、ネットのドキュメントなどを探すのが良いです。&lt;/p&gt;
&lt;p&gt;SEO関連の内容もありますが、テクニック的なことについてはそれほど出てこないです。SEOの効果は絶大なのでしっかりやろう！といった意気込みを持つことができます。こんな落とし穴があるのか、といったことや今まで間違った先入観を持っていたのか、ということに気づくこともあります。&lt;/p&gt;
&lt;p&gt;SEO関連の知識やルールはどんどん更新されています。その変化についていくためにも基礎的な知識の理解は不可欠です。ぜひこういった入門書などを読み始めて基礎的な概念と知識、そして興味をもっていけると良いです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;自社の商品のことをよく知り、お客様の気持ちになって考えよう！という、当たり前のようで難しいことが書かれています。
小手先のテクニックではなく、心持ちや態度のような部分への言及があり、はっとさせられることもあると思います。&lt;/p&gt;
&lt;p&gt;SEOのテクニックももちろん紹介されていますが、本当に大切なことは何なのかといったことも書かれています。そういった概念や心持ちの部分についても学ぶことができるのはいいですね。&lt;/p&gt;
&lt;p&gt;さくっと読めるので普段あまり本を読まない人、WEBに触れた経験があまりない人、かつこれからWEBサイトを初めてみようと思った人は試してみるといいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】Linuxのしくみ]]></title><description><![CDATA[Linuxの動作の仕組みを実験と図解で学べます。 C言語を使ってカーネルの操作などを実験するので、実際にLinux…]]></description><link>https://honmushi.com/2019/01/28/linux-shikumi/</link><guid isPermaLink="false">https://honmushi.com/2019/01/28/linux-shikumi/</guid><pubDate>Mon, 28 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Linuxの動作の仕組みを実験と図解で学べます。&lt;/p&gt;
&lt;p&gt;C言語を使ってカーネルの操作などを実験するので、実際にLinuxの端末で真似しながら進めていくのがおすすめです。&lt;/p&gt;
&lt;p&gt;普段のプログラミングでは全く使わないようなコマンドや出力などに触れることができるので、結構おもしろいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/477419607X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=477419607X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=edf814198aca1e7ea03cf3e96817a9e4&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=477419607X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=477419607X&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&gt;本の概要&lt;/h2&gt;
&lt;p&gt;カーネルの操作についての情報から、プロセス管理やメモリの管理を学びます。
ファイルシステムやストレージデバイスについての知識も学ぶことができます。&lt;/p&gt;
&lt;p&gt;1つ1つ実験を行い、出力を確認しながら進めていきます。プログラムに触れながら読み進めていくのでおもしろいです。読者の環境と著者の環境は一致しないと思いますが、その差についてもある程度書いてくれているので、ログや出力を読むときの参考になります。&lt;/p&gt;
&lt;p&gt;ちなみに、PCの自作を行うときに必要な知識ではないです。OSの自作を行うのであれば知っておく必要があります。&lt;/p&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;実験と図解で基礎知識を学ぶことができます。
Linuxに限らず、SSDのことなども学べるのでおもしろいです。&lt;/p&gt;
&lt;p&gt;実験の際にはC言語を使っての簡単なプログラミングを行うので、つかったことない人はぜひやってほしいです。簡単な内容ですし、丁寧に手順やソースを書いてくれているので事故が起きることは無いです。安心して実験できます。&lt;/p&gt;
&lt;p&gt;図解もわかりやすいです。簡単な図で的確に概念を表現しており、すぐに理解できると思います。
分厚く大きな本ですが図とソースコードの占める割合が多いので、意外とすぐに読めると思います。&lt;/p&gt;
&lt;p&gt;大学の情報学部とかはこのような内容を学んでいました。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;Linuxの仕組みということなので、サーバなどに使われているOSの仕組みの部分を知ることができます。大切な知識なのでプログラミングするのであれば知っておきたい内容ですが、実際そのまま何かの役に立つことは少ないと思います。&lt;/p&gt;
&lt;p&gt;実行速度などに厳しい制限があるとかであれば、仕組みを知った上で最適化することがあると思いますが、カーネルなどの仕組みにまで踏み込むことはあまりないと思います。&lt;/p&gt;
&lt;p&gt;設定とかいじっていたときに見慣れないエラーが出たとか、そういった特殊な場合には何かしら役に立つと思います。OSのの性能や稼働状況を確認するコマンドや出力の見方を教えてくれるので、手持ちのパソコンで色々実験してみるとおもしろいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/477419607X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=477419607X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=5397260b20f363ec56ff979a4c1f3e3d&quot;&gt;[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=477419607X&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></item><item><title><![CDATA[【おすすめ読書】Graphic Recorder]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/28/graphicrecorder/</link><guid isPermaLink="false">https://honmushi.com/2019/01/28/graphicrecorder/</guid><pubDate>Mon, 28 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;グラフィックレコーディングに関する本です。
グラレコの作例もたくさん載っており、見ていて楽しいです。&lt;/p&gt;
&lt;p&gt;実際にイラストに起こすためのコツやサンプルに加えて、グラレコのあり方や目的なども学ぶことができます。
会議を有意義にすすめるための工夫としてもかなり役に立つので良かったです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4802510284/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4802510284&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=a1a848684097f6352b639addab79bb52&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4802510284&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4802510284&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;グラフィックレコーディングとは何か&lt;/p&gt;
&lt;p&gt;どういうものなのかということや、どんな効果があるのかということを学びます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;短い文章をグラフィックに変えてみよう&lt;/p&gt;
&lt;p&gt;グラフィックレコーディングの作り方です。小さなところから順番にやっていくので真似しながら実際に試すことができます。しっかり勘所を教えてくれるのですぐに役に立つ知識です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;話の全体をグラフィックで1枚の紙に整理してみよう&lt;/p&gt;
&lt;p&gt;伝えるためのコツの紹介です。情報を人に伝えるときの基本みたいなことも教えてくれるので、グラフィックレコーディングに限らず参考になります。&lt;/p&gt;
&lt;p&gt;グラフィックレコーディングならではの書き方もあるのでおもしろいです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;グラフィックレコーディングで課題解決をしよう&lt;/p&gt;
&lt;p&gt;実際の会議ではこんなことが起きるぞ！という例から、それを解決するにはこうだ、という紹介です。会議が終わってから、これは有意義な時間だったのだろうか、と思うことは誰でもあると思います。そんな気持ちを持ったときに、ぜひこの本の内容を用いて課題を解決できるようになるといいです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ただのグラレコの参考ではなく、会議そのものを良くするための考え方や取り組みと、その手段としてのグラレコの使い方が書かれており、参考になりました。&lt;/p&gt;
&lt;p&gt;会議の場でホワイトボードなどに整理を始めるのはなかなか勇気がいることですが、実際にやってみると場が整理されて役に立ちます。最初は難しいので挑戦して慣れていくのがいいです。できる人もあまりいないので貴重な能力だと思います。&lt;/p&gt;
&lt;p&gt;話し合った内容が文字やイラストで残っていくので、しっかりと前に進むことができ手戻りが少ないです。いろいろな場面でグラフィックレコーディングが取り入れられていったらいいなと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】実践Vim]]></title><description><![CDATA[Vimの標準機能について説明した本です。
インストールしたまんまの状態のVimでできることが書いてあります。 Vimの概念にしっかりと目を当て、Vim…]]></description><link>https://honmushi.com/2019/01/25/jissenvim/</link><guid isPermaLink="false">https://honmushi.com/2019/01/25/jissenvim/</guid><pubDate>Fri, 25 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Vimの標準機能について説明した本です。
インストールしたまんまの状態のVimでできることが書いてあります。&lt;/p&gt;
&lt;p&gt;Vimの概念にしっかりと目を当て、Vimを使ってテキスト編集やコーディングを効率化する方法を解説しています。&lt;/p&gt;
&lt;p&gt;プラグインを入れるとどんどん便利になっていきますが、まずはこの本を読んで基礎的な操作をできるようになっておくのがいいです。
基本的な操作から応用的な操作まで網羅的に体験することができますので、Vimに興味を持ち始めた人におすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/B00HWLJI3U/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B00HWLJI3U&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=fb1091a08dca3234302e67cefcf05868&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B00HWLJI3U&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&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;h2&gt;121個のTips&lt;/h2&gt;
&lt;p&gt;Viｍを使ってテキスト編集をする上で使える操作を121個のTipsとして紹介しています。&lt;/p&gt;
&lt;p&gt;各モードの説明もあれば、基本的なコマンドや組み合わせて使う際のコツや注意なども書いてあります。
そもそもVimのことがあまりわかってない、という人にもかなりおすすめです。とりあえずサーバの設定くらいは書き換えられるようになった、くらいの人であればとても学べることが多いです。実はいろいろなことができ、テキスト編集などでかなり機能を持っています。&lt;/p&gt;
&lt;h2&gt;Vimの標準機能を学べる&lt;/h2&gt;
&lt;p&gt;Vimの標準機能に注目している本です。ですのでプラグインは全然出てきません。vimrcの変更もほとんどなく、インストールしたまんまのVimでできる操作を解説しています。
Vimのコマンドの考え方や概念についても触れているので、Vimについての深い理解を得られると思います。正式な用語なども出てくるので、他のVimmerとの共通言語として覚えておくと良いです。Vimのうまい使い方や設定の方法は、先輩Vimmerの人に教えてもらうのがおすすめです。&lt;/p&gt;
&lt;p&gt;しかし、カスタマイズして使いたい、その例が知りたいという人には向いていません。
そんな人でも、見落としたり気づいていない標準機能や使い方があるかもしれませんので、一度手にとって見てほしいです。&lt;/p&gt;
&lt;p&gt;編集する例のテキストと操作したキーとその結果が書かれているので、わかりやすいです。本を読みながら1つずつ自分の環境でも試してみましょう。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;副題にもありますが、「思考のスピードで編集しよう」と言うことを考えると、編集操作はいろいろ工夫が必要になります。
Vimを使うことで、同じことの繰り返しを避けたり、複数の対象を選択して編集できたりします。使いこなせるようになれば、大きな成長ができると思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/B00HWLJI3U/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B00HWLJI3U&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=3595aaf02c386a617ccf473ef8c1de63&quot;&gt;実践Vim　思考のスピードで編集しよう！ (アスキー書籍)&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&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;h2&gt;覚えておきたいコマンド&lt;/h2&gt;
&lt;p&gt;以下に覚えておきたい操作をメモしてます。自分用です。
手元に印刷したりしておいて、覚えた・使いこなしたものは捨てていくと、コマンドを憶えるのに便利です。&lt;/p&gt;
&lt;h3&gt;行をコピー・移動&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;:t
:m

:3t7 3行目を7行目の下にコピー
:7m. 7行目を現在行の下に移動&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ビジュアルモードで選択してから使うことで、rangeを複数行にすることも可能&lt;/p&gt;
&lt;h3&gt;選択範囲にノーマルモードのコマンドを実行&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;: nomal .&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ビジュアルモードで選択したあと&lt;code&gt;nomal .&lt;/code&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;:%nomal A; ファイル全行に末尾にセミコロン&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;ウインドウ操作&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;&amp;lt;C-w&amp;gt;s 水平に分割 上下に別れる
&amp;lt;C-w&amp;gt;v 垂直に分割 左右に別れる

&amp;lt;C-w&amp;gt;c ウインドウを閉じる&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;:vsplit&lt;/code&gt;とか&lt;code&gt;:q&lt;/code&gt;でやっていましたが、この方法でもできたんですね。&lt;/p&gt;
&lt;h3&gt;アクティブなファイルのディレクトリの相対パス&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;:e %:h&amp;lt;Tab&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;%&lt;/code&gt;で現在のファイル、&lt;code&gt;:h&lt;/code&gt;でファイル名を除く、&lt;code&gt;タブ&lt;/code&gt;キーで展開するそうです。この操作をすれば現在編集中のファイルのディレクトリが展開されます。&lt;/p&gt;
&lt;h3&gt;キーバインドの&lt;Leader&gt;&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;&amp;lt;Leader&amp;gt;はユーザー定義用の名前空間として設定されているらしく、自由に使えそう。
nnoremap &amp;lt;Leader&amp;gt;n nzz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;デフォルトでは&lt;code&gt;&amp;#x3C;Leader&gt;&lt;/code&gt;は\ (逆スラッシュ)が割り当てられている。他のコマンドとバッティングしないか心配な場合はとりあえずこれで試すのが良さそう&lt;/p&gt;
&lt;h3&gt;マーク&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;mm mに場所をマーク
&amp;#39;m mにマークした場所に移動
`m mにマークした行の最初に移動

mM グローバルなMマーク
&amp;#39;M グローバルなMに移動&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;グローバルにすると編集セッション感で永続化されます。いつも&lt;code&gt;:e $MYVIMRC&lt;/code&gt;でVIMRCを開いてましたが、一度&lt;code&gt;mV&lt;/code&gt;でマークしておけば、&lt;code&gt;&apos;V&lt;/code&gt;ですぐに開けるようになりました。&lt;/p&gt;
&lt;h3&gt;ヤンクレジスタ&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;&amp;quot;Op ヤンクレジスタの中身を貼り付け&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Oはヤンクしたやつのみ記録されるレジスタ&lt;/p&gt;
&lt;h3&gt;マッチしたハイライトを一時的に消す&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;:noh 一時的にハイライトを消す&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;次検索したときにはハイライトがつくようになります。&lt;/p&gt;
&lt;h3&gt;自動補完&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;&amp;lt;C-n&amp;gt; 通常
&amp;lt;C-x&amp;gt;&amp;lt;C-n&amp;gt; 現在のバッファ
&amp;lt;C-x&amp;gt;&amp;lt;C-i&amp;gt; インクルードされているファイル
&amp;lt;C-x&amp;gt;&amp;lt;C-]&amp;gt; tagsのキーワード
&amp;lt;C-x&amp;gt;&amp;lt;C-k&amp;gt; 辞書
&amp;lt;C-x&amp;gt;&amp;lt;C-l&amp;gt; 行全体を補完
&amp;lt;C-x&amp;gt;&amp;lt;C-f&amp;gt; ファイル名
&amp;lt;C-x&amp;gt;&amp;lt;C-o&amp;gt; オムニ補完&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】プログラマのためのDocker教科書]]></title><description><![CDATA[Dockerの一通りの操作や使い方が把握できます。Dockerの仕組みについても説明があるので、仕組みの部分についても理解ができます。
DockerだけでなくネットワークやOSの基礎的な部分についての内容も結構充実しているので、まさに教科書といった感じです。 Docker…]]></description><link>https://honmushi.com/2019/01/25/cockersyo/</link><guid isPermaLink="false">https://honmushi.com/2019/01/25/cockersyo/</guid><pubDate>Fri, 25 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Dockerの一通りの操作や使い方が把握できます。Dockerの仕組みについても説明があるので、仕組みの部分についても理解ができます。
DockerだけでなくネットワークやOSの基礎的な部分についての内容も結構充実しているので、まさに教科書といった感じです。&lt;/p&gt;
&lt;p&gt;Docker周りの応用的なコマンドや技術も紹介されているので、とりあえず試しでDocker使ったことあるくらいの人なら学べることがたくさんあると思います。&lt;/p&gt;
&lt;p&gt;すでにわかっている人は復習になりますし、知らない人はここで必要な知識を身につけることができます。
実際にDockerを使ってローカルに環境を用意したりといったこともやるので、実務でDockerを使うことになりそうという方はぜひ一度読んで見るといいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4798153222/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4798153222&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=9610350bba2dd9c639efff4ebc6c00c1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4798153222&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4798153222&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&gt;本の概要&lt;/h2&gt;
&lt;p&gt;以下の構成になっています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;システムインフラの知識&lt;/p&gt;
&lt;p&gt;Dockerの理解に当たって必要な基礎知識です。
OSI基本参照モデルとか、OSのカーネルとか、オンプレミスかクラウドかといったような内容です。知っている人は飛ばしても大丈夫です。&lt;/p&gt;
&lt;p&gt;関連する単語ごとに説明してくれるので、基本情報の復習になると思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;コンテナ仮想化技術&lt;/p&gt;
&lt;p&gt;コンテナについての知識です。コンテナ技術ができる歴史的な観点から、実際の動作の説明まで紹介されます。
実務で使っている処理や動作の裏側や仕組みを知ることができるので、すでに使っている人も一読しておくといいです。もちろん知らなくても使えますが、何か起きたときに仕組みを知っていると対処がしやすくなります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dockerのインストール&lt;/p&gt;
&lt;p&gt;実際にDockerをインストールして動かします。基本的なコマンドの使い方を一通り経験します。
Docker Hubなども使うので、Docker周りの一通りのサービスに触れることができます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dockerfileを使ったサーバ構築&lt;/p&gt;
&lt;p&gt;Dockerfileを使ってサーバを構築します。諸々の設定をやって見る箇所なので丁寧に進めていくのがいいです。このへんまでできればローカルにDockerで環境を建てられるようになっているのではないかと思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dockerイメージの共有&lt;/p&gt;
&lt;p&gt;実務でDockerを使う場合、イメージ共有をすることになるのでここも重要だと思います。プライベートレジストリを作ってアップロード、ダウンロードを試すので、結構実用的な経験ができます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;複数コンテナの管理&lt;/p&gt;
&lt;p&gt;DockerComposeを使って複数のコンテナを管理します。実際にWordpressシステムを構築するので、割とすぐに応用できると思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;マルチホスト環境でのDocker&lt;/p&gt;
&lt;p&gt;Docker Machineコマンドなどを使って実行環境を構成します。Docker Swarmを使ったクラスタ構成も試して見るのでちょっとむずかしくなりますが、この辺も一緒に学んでおくと便利になります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;クラウドでのDocker&lt;/p&gt;
&lt;p&gt;クラウド環境で使うならこんな感じという情報です。さまざまなクラウド環境について,
Dockerで実装するという前提で紹介してくれます。実際にDockerで何らかのサービスをたちあげるつもりであれば、大いに参考になると思います。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Dockerの教科書&lt;/h2&gt;
&lt;p&gt;教科書となっているだけあり、基礎的な知識から知ることができます。実際に手を動かす部分も、実務で使えるような内容なので参考になりました。
DockerだけでなくネットワークやOSのカーネル関連の知識も同時に学ぶことができます。とてもいい教科書でした。ネットワークやOSの理解の手助けになると思います。&lt;/p&gt;
&lt;p&gt;Docker ComposeやCocker Machineなど周辺の便利な機能も一緒に使うことになります。Dockerの技術はどんどん成長していっている状況ですので、基礎の部分含めて学んでおくのはとても良いです。
これからの環境構築には手放せないものになる予感があります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;この本を読んで一通り試せば、Dockerについてほぼ困ることはないと思います。現場ごとの環境で躓くことは起きるかもしれませんが、基本的なことはわかっているので対応できるようになります。躓いたところは現場の先輩に質問しましょう、この本の内容が理解できていればわからないことはありません。勇気を持って質問すれば解決できると思います。&lt;/p&gt;
&lt;p&gt;業務でDockerを使っているところは増えていると思います。いわれるがまま再構築するのも良いのですが、一度ローカルで試してみることをおすすめしたいです。思ったよりも簡単に試すことができるので、個人開発や勉強用の環境としてもおすすめです。&lt;/p&gt;
&lt;p&gt;すでに第2版になっているくらいなので、結構技術の更新が盛んです。引き続きDocker関連の情報をキャッチアップしていきたいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】水平思考の世界]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/24/suiheishikou/</link><guid isPermaLink="false">https://honmushi.com/2019/01/24/suiheishikou/</guid><pubDate>Thu, 24 Jan 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4877713379/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4877713379&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ed86abf1e7947f06f6978914df76eaf1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4877713379&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4877713379&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&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;論理的思考が必要なことはもちろんのことだと思います。何か行き詰まったときなどには頭を切りかえて水平思考もできるようになるといいです。ミーティングでのアイデア出しであったり、何か企画の初めの段階などで必要になるかもしれません。両方の思考を使い分けることができると、マルチな才能で活躍できるのではないかと思います。&lt;/p&gt;
&lt;p&gt;昔の発明家などもこの水平思考を使うことで、これまでの歴史から大きく飛躍するような発見ができたといいます。他人が出したアイデアを簡単なことだと論理的に解釈することは容易です。しかし、そのアイデアを思いつくまでにはいくつかの飛躍などを行い、あとから理論や根拠をつくるような思考法があったのかもしれません。&lt;/p&gt;
&lt;p&gt;そうした思考の過程を体験することもでき、頭の体操にもなります。なにか考え尽くして行き詰まったときなどに、参考にしてみると新しい道が開けることもあるのではないかと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】ブレイクスルー JavaScript]]></title><description><![CDATA[初心者から次のステップへ進むために、オブジェクト指向やSPAのことが書かれています。
再利用性、保守性、拡張性を備えたプログラムを書くためのコツを学ぶことができます。 言語の基礎的なことはわかっている前提で、実務で使うような実装方法を紹介しています。 jQueryを使ってDOM…]]></description><link>https://honmushi.com/2019/01/23/koerujs/</link><guid isPermaLink="false">https://honmushi.com/2019/01/23/koerujs/</guid><pubDate>Wed, 23 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;初心者から次のステップへ進むために、オブジェクト指向やSPAのことが書かれています。
再利用性、保守性、拡張性を備えたプログラムを書くためのコツを学ぶことができます。&lt;/p&gt;
&lt;p&gt;言語の基礎的なことはわかっている前提で、実務で使うような実装方法を紹介しています。&lt;/p&gt;
&lt;p&gt;jQueryを使ってDOMの操作くらいならできるようになりました、くらいの人が次のステップへ進むために良さそうです。オブジェクト指向などについて知識がまったくないと、ちょっと難しいですが取っ掛かりとして読むのも良さそうです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/479813905X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=479813905X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=83abb008aca99921e014d2713e8ef40b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=479813905X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=479813905X&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&gt;本の概要&lt;/h2&gt;
&lt;p&gt;「フロントエンドエンジニアとして超えるべき5つの壁」として5つの章に別れています。保守性や拡張性、再利用性などを高めるための実装方法のコツなどを知ることができ、一つレベルアップできると思います。&lt;/p&gt;
&lt;p&gt;基本的にどのサンプルもソースコードの量はそれほど多くないです。書くのも読むのも比較的すぐにできると思います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;オブジェクト指向&lt;/p&gt;
&lt;p&gt;プロトタイプ、クロージャ、オブザーバ、thisの仕様と使い方を学ぶことができます。
すぐに使いこなせるものではないと思うので、できるとこから利用していくのがいいです。他の人のプログラミングを読むときの助けになることもあると思います。&lt;/p&gt;
&lt;p&gt;リアルタイムで文字数と必須入力のバリデーションを行うフォームを練習で作ります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UI・インタラクティブ表現&lt;/p&gt;
&lt;p&gt;イベント処理についての勉強です
画像をモーダルで表示するプログラムを作りながら、clickイベントなどの実装を行います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;グラフィック表現&lt;/p&gt;
&lt;p&gt;Canvasを使っての表現を練習します。あまり使う機会は無い？でしょうか。基本的な使い方を知っておくといざというときに困らないので、さくっと学んでおくのがいいです。パーティクルシステムという、ぼやっとした円が動き回って重なったりするやつを実装します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ajax・API連携・データ検索&lt;/p&gt;
&lt;p&gt;Ajaxでデータを取得して、取得したデータに対して加工を行い、表示します。
PromiseやDeferredなどを利用して、非同期通信を実装します。この辺はよく使うものなのでしっかり身につけたいです。&lt;/p&gt;
&lt;p&gt;Underscore.jsを利用します。何かよくわからず使っていることがあるので、この機会に概要だけでも確認していきたいです。&lt;/p&gt;
&lt;p&gt;フィルタ・ソート機能付きの表を作成します。
この章からサーバを用意しないとプログラムが正常に動作しません。XAMPPなどのローカルサーバを用意するとか、Github pagesを使ってもいいと思います。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;シングルページアプリケーション&lt;/p&gt;
&lt;p&gt;SPAのページを作成します。ライブラリなどは使わずに実装することで概念を学ぶことができます。
URLハンドリングや、ページ切替時のアニメーションなども実装します。&lt;/p&gt;
&lt;p&gt;主にルーターと呼ばれるようなURL管理を行う機能の実装です。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;入門書ではないので、ある程度理解している人向けです。JavaScript、jQueryを使ってDOMの操作ができるようになった！くらいの人なら、ちょうど得られる知見は多いと思います。&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;p&gt;ある程度フロントエンドの実装ができるようになった人で、一度立ち止まってオブジェクト指向の考え方を身に着けたい人などにおすすめです。自分の書いたソースは拡張性、保守性、再利用性が悪いなあと感じたら、一度読んでみるといいです。周りからも一目置かれるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;Ajaxによる非同期通信なども学べるので、WEBフロントエンドで必要になる知識の概要は知ることができます。より詳細な実装は、気に入ったWEBサイトなどを見て学ぶのがいいと思います。オブジェクト指向は意識的につかていかないと身につかないと思うので、初心者こど早めに知っておきたい情報かなと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】アイデアのつくり方]]></title><description><![CDATA[「アイデアとは既存の要素の新しい組み合わせ以外の何ものでもない」というやつです。
アイデアのつくりかたを5つの段階で説明しています。 調べて、観察して、一度放棄して、思いついて、チェックする。 何事にも技術を学ぶときは、第1に原理、第…]]></description><link>https://honmushi.com/2019/01/23/ideanotsukurikata/</link><guid isPermaLink="false">https://honmushi.com/2019/01/23/ideanotsukurikata/</guid><pubDate>Wed, 23 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「アイデアとは既存の要素の新しい組み合わせ以外の何ものでもない」というやつです。
アイデアのつくりかたを5つの段階で説明しています。&lt;/p&gt;
&lt;p&gt;調べて、観察して、一度放棄して、思いついて、チェックする。&lt;/p&gt;
&lt;p&gt;何事にも技術を学ぶときは、第1に原理、第2に方法です。これはアイデアについても同じで、その学び方をしっかり教えてくれます。
広告などを見て、おやっと心が動くことが少しでもあればだれでも何らかの想像力を持っている証拠だそうです。そこから懸命に努力することで、その才能を伸ばし想像力をいっそう高めることができます。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4484881047/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4484881047&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=0843fafae0e66fc2af36d163c29c88f1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4484881047&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;0//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4484881047&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&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;h3&gt;原理&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;アイデアとは既存の要素の新しい組み合わせ以外の何ものでもない&lt;/li&gt;
&lt;li&gt;新しい組み合わせに導く才能は、事物の関連性を導く才能に依存する&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;方法&lt;/h3&gt;
&lt;p&gt;アイデアを生み出す技術は以下の5つの段階に分かれています。それらを順番に通ることで、アイデアを生み出すことができます。ただし、前の段階が完全に完了するまでは次へ入ってはいけません。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;資料を収集する&lt;/p&gt;
&lt;p&gt;特殊資料と一般的資料を集めます。&lt;br&gt;
特殊資料とは、対象に関する知識です。広告で言えば商品の情報や消費者の情報になります。&lt;/p&gt;
&lt;p&gt;一般資料とは、人生とこの世の種々様々な出来事のことです。これは日々の生活の中で常に行うべきことでいろんなものに興味を持つことが大切です&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;資料を咀嚼する&lt;/p&gt;
&lt;p&gt;資料の一つ一つを取り上げ触ってみたり、角度を変えてみたりします。いくつか並べてみたり重ねてみたり、いろいろいじってみます。何か思いつくことがあれば紙などに書き出します。
ごちゃごちゃになって何も思いつかなくなるまでやります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;問題を放棄する&lt;/p&gt;
&lt;p&gt;一旦考えるのをやめて心の外に放り出します。無意識な領域においてそこで働いてくれるのを待ちます
なにか想像力や感情を刺激するものに心を移します。音楽とか映画とか本を読んだりとかです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;アイデアが訪れる&lt;/p&gt;
&lt;p&gt;全く何も出てこないのですが、ふとした時に急に頭の中に降りてきます。厠上・馬上・枕上と言うやつですね。アイデアを探す心の緊張を説いたときに降りてきます。
無意識の領域や深層心理みたいなところからふっと湧いてくるような感じですね。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;具体化する&lt;/p&gt;
&lt;p&gt;出てきたアイデアを具体的に形にします。すぐに作ることができない場合でもそのまましまいこんだりしないで、書き出したり人に聞いてもらったり批評してもらったりしましょう。この段階で消えてしまうアイデアは多いですがそれでも勇気を持って行う必要があります。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;アイデアの作り方について明確な方法を示してくれる本です。実際にやろうと思うとかなり頭を使いますし、ラクをしようと次へ次へと進んでしまったりします。
一つ一つの段階を突き詰めて行い、しっかり終わらせていくことが大切です。&lt;/p&gt;
&lt;p&gt;何度も読んだ本ですが、読むたびにこういうことだったなあと感心させられることがあります。
何か新しいアイデアの発案などに行き詰まったときには、この本を読んでゆっくり時間を取って考えてみるのもいいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Emmet 操作メモ]]></title><description><![CDATA[HTML、CSSを省略して書くことができる「Emmet」の使い方を書こうと思います。 フロントエンドの実装などでHTMLやCSSを書く際に、Emmet…]]></description><link>https://honmushi.com/2019/01/22/emmet/</link><guid isPermaLink="false">https://honmushi.com/2019/01/22/emmet/</guid><pubDate>Tue, 22 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HTML、CSSを省略して書くことができる「Emmet」の使い方を書こうと思います。&lt;/p&gt;
&lt;p&gt;フロントエンドの実装などでHTMLやCSSを書く際に、Emmetを使えばかなり作業効率を上げられます。
一度使うと手放せなくなるツールです。慣れると何倍もの速さで記述ができるようになります。&lt;/p&gt;
&lt;p&gt;省略形をなかなか覚えられないので、都度この記事に書いて覚えようと思います。
とりあえずよく使うものからメモしておいて、どんどん継ぎ足しながら整理していく方針です。&lt;/p&gt;
&lt;p&gt;ちなみに私はvimで利用しています。他のエディタやIDEでも使えますので調べて使ってみてください。Vimでは&lt;c-e&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;.vimrcに以下を記述  

NeoBundle &amp;#39;mattn/emmet-vim&amp;#39;  
let g:user_emmet_leader_key=&amp;#39;&amp;lt;c-e&amp;gt;&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下に公式のチートシートがあるのでこれを印刷して手元においておくのがおすすめです。&lt;br&gt;
&lt;a href=&quot;https://docs.emmet.io/cheat-sheet/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;公式のチートシート&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;HTML&lt;/h2&gt;
&lt;p&gt;HTMLのalias&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;html:5  
!&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;ul&amp;gt;li*3&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;div+div+div&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;div&amp;gt;p&amp;gt;span+em^bq&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;div&amp;gt;(header&amp;gt;ul&amp;gt;li*2&amp;gt;a)+footer&amp;gt;p&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;id class&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;div#idname+div.classname&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;div[data-index=index data-name=name]&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;img[src=photo$$.jpg]*3&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;div{hello world}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;CSS&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;w100p+m10

width: 100%;
margin: 10px;&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;p %
e em
x ex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;important&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;m10e! margin: 10em !important;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;vender prefixes&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;-bdrs

-webkit-border-radius: ;
-moz-border-radius: ;
border-radius: ;


w webkit
m moz
s ms
o o&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;pos:a position:absolute;

d:b display:block;
d:f display:flex;
d:if display:inline-flex;
d:i display:inline;&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;c:ra color:rgba(0, 0, 0, .5);&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;m margin:;
m:a margin:auto;
mt margin-top:;&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;w width:;
w:a width:auto;
h height:;
maw max-width:;
maw:n max-width:none;
mih min-height:;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;border&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;bd border:;
bd+ border:1px solid #000;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;text&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;va:t vertical-align:top;
ta:c text-align:center;
td:n text-decoration:none;
td:u text-decoration:underline;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;ざっくり個人的に使いそうなもの、忘れそうなものを記載しています。とても入力が簡単になるので便利です。引き続きこれは便利というものが合ったら更新・整理します。&lt;/p&gt;
&lt;p&gt;初心者のうちは写経などでコーディングをする機会は多いと思います。早めにこのような便利なツールの使い方を覚えておきましょう。今時写経なんてしないんでしょうか。動画教材みて完了なのかもしれませんが、このようなツールに触れつつHTML/CSSを書いてみるのも理解が深まるのでおすすめです。&lt;/p&gt;
&lt;p&gt;上にも書いてますが、チートシートを印刷して手元に置きながら使ってみるのが便利です。Vimやtmuxのショートカットなども私はそうやって覚えました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】漫画 君たちはどう生きるか]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/21/douikiruka/</link><guid isPermaLink="false">https://honmushi.com/2019/01/21/douikiruka/</guid><pubDate>Mon, 21 Jan 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4838729472/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4838729472&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=6837c162f9cd30813f4d0b00072ac2c9&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4838729472&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4838729472&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&gt;ざっくり紹介&lt;/h2&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;p&gt;漫画なので簡単に読めます。より深く読みたいと思った場合は原作を手にとって見るといいと思います。&lt;/p&gt;
&lt;p&gt;道徳や倫理を学ぶというのは意識的にしていたのかよくわからないですね。なんとなく気がついたら身につけていたのか、誰かに教えられていたのか、よくわからないです。学校には道徳のテストもなかったように思います。道徳などを学ぶ手段としてこの本を読むことは、とても効果がありそうです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[xkbでキーバインドを変更する（Ubuntu）]]></title><description><![CDATA[Ubuntuにおけるキーバインド変更の方法です。「xkb」を使って設定します。 以前業務でWindowsを使っていたときはAutoHotKeyでキーバインドを変更していました。
とても便利だったのでUbuntuでもやりたいと思っていたのですが、Ubuntu…]]></description><link>https://honmushi.com/2019/01/18/ubuntu-xkb/</link><guid isPermaLink="false">https://honmushi.com/2019/01/18/ubuntu-xkb/</guid><pubDate>Fri, 18 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ubuntuにおけるキーバインド変更の方法です。「xkb」を使って設定します。&lt;/p&gt;
&lt;p&gt;以前業務でWindowsを使っていたときはAutoHotKeyでキーバインドを変更していました。
とても便利だったのでUbuntuでもやりたいと思っていたのですが、Ubuntuで設定しないまま結構たっていました。&lt;/p&gt;
&lt;p&gt;AutoHotKeyほどテクニカルのことはできなさそうですが、別のキーに割り当てるくらいはできそうなのでxkbを使って対応しようと思います。&lt;/p&gt;
&lt;p&gt;作業の効率、特にVimの効率が上がるのでやっておきます。以下に手順とxkbの詳細を残しておくので何かの参考になればと思います。&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;~/.xkb/symbols/myswap  &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;partial modifier_keys
xkb_symbols &amp;quot;swapkeys&amp;quot; {
    key &amp;lt;AB11&amp;gt; { [ underscore, backslash ] };
    key &amp;lt;MUHE&amp;gt;  { [ Escape, Escape ] };
    key &amp;lt;HENK&amp;gt;  { [ BackSpace, BackSpace] };
    key &amp;lt;HKTG&amp;gt;  { [ Return, Return] };
    key &amp;lt;LALT&amp;gt;  { [ Control_L, Control_L] };
    key &amp;lt;LCTL&amp;gt;  { [ Alt_L, Alt_L] };
};&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下に設定ファイルの呼び出しを定義します。&lt;br&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;~/.xkb/keymap/myxkb&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;xkb_keymap {
    xkb_keycodes  { include &amp;quot;evdev+aliases(qwerty)&amp;quot; };
    xkb_types     { include &amp;quot;complete&amp;quot;  };
    xkb_compat    { include &amp;quot;complete&amp;quot;  };
    xkb_symbols   { include &amp;quot;pc+jp+us:2+inet(evdev)+myswap(swapkeys)&amp;quot;   };
    xkb_geometry  { include &amp;quot;pc(pc105)&amp;quot; };
};&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下のコマンドを実行して設定を反映させます。
コマンドはbash起動時などに実行されるようにするのがおすすめです。&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;xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2&amp;gt; /dev/null  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;ざっくり以下の手順です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;xkbの設定を確認する&lt;/li&gt;
&lt;li&gt;キーコード・キーシンボルを探す&lt;/li&gt;
&lt;li&gt;キーバインド設定ファイルを作成&lt;/li&gt;
&lt;li&gt;xkb設定ファイルを作成&lt;/li&gt;
&lt;li&gt;設定を反映させるコマンドを実行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下詳細な手順を記載しています。各環境に合わせて設定してください。&lt;/p&gt;
&lt;h2&gt;xkbの設定を確認する&lt;/h2&gt;
&lt;p&gt;以下のコマンドを実行してxkbの設定を確認します。&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;setxkbmap -print&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下のような出力を得られます。現在有効なxkbの設定です。&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;xkb_keymap {
    xkb_keycodes  { include &amp;quot;evdev+aliases(qwerty)&amp;quot; };
    xkb_types     { include &amp;quot;complete&amp;quot;      };
    xkb_compat    { include &amp;quot;complete&amp;quot;      };
    xkb_symbols   { include &amp;quot;pc+jp+us:2+inet(evdev)&amp;quot;        };
    xkb_geometry  { include &amp;quot;pc(pc105)&amp;quot;     };
};&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;出力内容の意味&lt;/h3&gt;
&lt;p&gt;以下の順に設定されます。&lt;br&gt;
今回変更するのはsymbolsの設定です。設定したキーバインドのルールを作成してsymbolsの定義に追加します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;geometry&lt;/p&gt;
&lt;p&gt;物理キーボードの規格を指定指定します。英字キーボードか日本語キーボードかです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;type&lt;/p&gt;
&lt;p&gt;キー配置のレベル と グループ を定義します。  &lt;/p&gt;
&lt;p&gt;レベルとは、修飾キーで1つのキーに複数の機能をもたせるための設定です。aとAとかのことです。
キーのレベル1に通常入力（a）、レベル2に Shift キー押下状態での機能（A）が例です。レベルは2より多く設定できるそうです。&lt;/p&gt;
&lt;p&gt;グループとは、キーボード全体の配置を入れ替えるための設定です。英数入力と日本語入力の切り替えのことです。詳細はよくわかりません。グループは 8個まで設定できるそうです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;compat&lt;/p&gt;
&lt;p&gt;type に対応するキーマップの設定です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;keycodes&lt;/p&gt;
&lt;p&gt;キーコードとキーシンボルの対応関係を設定します。物理キーボードのキーに割り当てられた1~3桁の数字がキーコードです。キーシンボルはキーコードに対して分かりやすい名称を対応させたものになります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;symbols&lt;/p&gt;
&lt;p&gt;キーシンボルに「a/A を入力する」「shift キーの機能をもたせる」といった役割を割り当てます。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;キーコード・キーシンボルを探す&lt;/h2&gt;
&lt;h3&gt;xev を使ってキーコードを調べます&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;xev &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コマンドを実行すると入力待ちになるので、キーを入力します。
すると入力したキーに対応するキーコード（1~3桁の数字）が出力されます。
それをメモしておきます。以下の出力のkeycode ..のところです。&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;KeyRelease event, serial 37, synthetic NO, window 0x3e00001,
    root 0x190, subw 0x0, time 872427349, (569,389), root:(1940,496),
    state 0x0, keycode 54 (keysym 0x63, c), same_screen YES,
    XLookupString gives 1 bytes: (63) &amp;quot;c&amp;quot;
    XFilterEvent returns: False&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例えば無変換は102、変換は100、ひらがなカタカナは101でした。&lt;/p&gt;
&lt;h3&gt;キーコードを使ってキーシンボルを探します&lt;/h3&gt;
&lt;p&gt;以下のファイルに対応が書かれています。開いて検索しましょう。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/usr/share/X11/xkb/keycodes/&lt;/code&gt;の evdevとaliasesに書かれているものが有効なものです。
aliasesの方はキーシンボルのエイリアスが書かれているものなので、ここでは必要ないです。evdevの方のみ確認しましょう。
上記でメモしたキーコードを探して対応するキーシンボルをメモします。&lt;/p&gt;
&lt;p&gt;例えば102は「MUHE」、100は「HENK」、101は「HKTG」でした。
これで変更したいキーのキーシンボルがわかりました。&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;mkdir  ~/.xkb/keymap &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;~/.xkb/keymap/myswap&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;partial modifier_keys
xkb_symbols &amp;quot;swapkeys&amp;quot; {
  key &amp;lt;MUHE&amp;gt;  { [ Escape,Escape ] };
  key &amp;lt;HENK&amp;gt;  { [ Return ] };
  key &amp;lt;HKTG&amp;gt;  { [ BackSpace,Delete ] };
  replace key &amp;lt;LCTL&amp;gt;  { [ Caps_Lock ] };
  replace key &amp;lt;CAPS&amp;gt; { [ Control_L ] };
};&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;変換・無変換をそれぞれReturn・Escに割り当てること、カタカナキーをバックスペースとデリート、ctrlとcaps lockの入れ替えをしています。
カンマ区切りの箇所はレベルを指定しています。&lt;code&gt;BackSpace,Delete&lt;/code&gt;なので通常はバックスペースで、シフト押しながらでデリートです。
swapkeysのところは任意のルール名を定義しています。あとで設定を反映するときに使います。&lt;/p&gt;
&lt;h2&gt;xkb設定ファイルを作成&lt;/h2&gt;
&lt;p&gt;ディレクトリを作成
mkdir ~/.xkb/symbols&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;~/.xkb/keymap/mykbd&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;xkb_keymap {
    xkb_keycodes  { include &amp;quot;evdev+aliases(qwerty)&amp;quot; };
    xkb_types     { include &amp;quot;complete&amp;quot;  };
    xkb_compat    { include &amp;quot;complete&amp;quot;  };
    xkb_symbols   { include &amp;quot;pc+us+inet(evdev)+myswap(swapkeys)&amp;quot;    };
    xkb_geometry  { include &amp;quot;pc(pc105)&amp;quot; };
};&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;xkb_symbols の箇所に追記しています。先程定義したルールのルール名を追加します。&lt;/p&gt;
&lt;p&gt;パソコンによって定義内容が違うかもしれませんので、上記をまるごとコピペはしないほうがよいです。自身の環境の設定内容を一度確認した上で追加分のルールを足しましょう。&lt;/p&gt;
&lt;h2&gt;設定を反映させるコマンドを実行&lt;/h2&gt;
&lt;p&gt;以下のコマンドを実行することで上記の設定ファイルが有効になり、キーバインドの変更が反映されます。
出力をnullに送っているのは、アラートメッセージが出るためです。こうしないと設定が反映されない様子でしたので、追加しておきます。 &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;xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2&amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ログインのたびにコマンドを実行することになるので、.bashrcなどに記述して自動で実行されるようにするのがおすすめです。&lt;/p&gt;
&lt;p&gt;これでキーバインドが変更されました。特に親指の位置にある「変換」「無変換」は仕事してない、かつ邪魔なので、早いうちに何か他のものに変えるのがおすすめです。caps lockも邪魔なので変えてしまいましょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「話のおもしろい人」の法則]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/17/omoshiroihousoku/</link><guid isPermaLink="false">https://honmushi.com/2019/01/17/omoshiroihousoku/</guid><pubDate>Thu, 17 Jan 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4776208210/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4776208210&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=67b3754646499e80734f2c841283f758&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4776208210&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4776208210&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;おもしろい人の法則を48の法則にして紹介しています。面白い人はこう、つまらない人はこう、と対比させながら紹介していくので、自分が当てはまっていないかチエックすることもできます。具体的な話しの内容も書いてあって参考になります。&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;p&gt;具体的な立ち居振る舞いやテクニックが紹介されており、とても参考になります。仕事の場面でも日常的な友人との場面でも使えそうなものばかりでした。次に人と合うときには試してみようかなと思いました。&lt;/p&gt;
&lt;p&gt;印象に残れば記憶にも残りやすいので、覚えてもらうコツにもなります。採用面接であったり、次の仕事につなげるような営業であったり、様々な場面で使えるテクニックが満載です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】最速の仕事術はプログラマーが知っている]]></title><description><![CDATA[仕事を速くすすめるための方法や考え方を紹介しています。
著者がプログラマーとして働いた中で得た経験をもとに身に着けた仕事術です。 プログラマーやIT…]]></description><link>https://honmushi.com/2019/01/17/speed-programmer/</link><guid isPermaLink="false">https://honmushi.com/2019/01/17/speed-programmer/</guid><pubDate>Thu, 17 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;仕事を速くすすめるための方法や考え方を紹介しています。
著者がプログラマーとして働いた中で得た経験をもとに身に着けた仕事術です。&lt;/p&gt;
&lt;p&gt;プログラマーやITエンジニアの人はもちろんですし、プログラマー以外の方にもおすすめです。&lt;/p&gt;
&lt;p&gt;時代が進むにあたり情報を取り扱う仕事が増えています。
そんな中でずっと情報を取り扱ってきたプログラマーという職業は、他の職業よりもそのことに触れており身近なものとして捉えています。そんなプログラマーこそが最速の仕事術を身に着けているのではないかという前提で考えています。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/B011UFDIZM/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B011UFDIZM&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=8bd350394db74f243e00868c0db50425&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B011UFDIZM&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=B011UFDIZM&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&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;プログラマーが知っている、どんな業種・職種でも役立つようなテクニックが紹介されています。
逆に、ずばりプログラミングそのもののコツなどはありません。プログラミングに関する知識ではなく、それ以外の業務に関するコツといったところでしょうか。&lt;/p&gt;
&lt;p&gt;大きく分けて以下の5点で紹介しています&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;「DRY」などのプログラミングでも使われるような原則を用いて、それを一般的な仕事に当てはめて工夫しています。
個人のタスクのみでなく、チームの動かし方やビジネス的な目線を持つことなども紹介されており、読む前と後ではなんとなく視野の高さや広さが変わるのではないかと思います。
いつかはマネージャーとして活躍したいとか、後輩ができて上司になったという場面においても役立つことがあります。&lt;/p&gt;
&lt;p&gt;段取り術やマネジメント術なんかもIT業界ではどんどん更新されていきますが、他の業種ではどうでしょうかね？&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;p&gt;確かにプログラミングする上で効率化というのはとても大切なことかと思います。
何でも効率化すればいいというものではありませんが、できるところはどんどんやっていくのがいいですね。&lt;/p&gt;
&lt;p&gt;プログラマーに聞いてみればいろいろなコツや独自の考え方を持っていると思います。ですので、プログラマーの友達と仲良くなることをおすすめします。
便利なツールとかアプリとか紹介してくれると思います。考え方なんかもいろいろあるのでたまに変な人もいると思いますが、それも面白いところだと思ってください。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ブログをNetlifyに移動しました]]></title><description><![CDATA[このブログはGatsbyで生成した静的なファイルを、Firebaseでホスティングしていました。
このたび、Netlifyへ移行しこちらで発信するようにしました。かなり便利です。 このような便利なサービスがどんどん出てきますね。使ってみてよかったです。
Netlify…]]></description><link>https://honmushi.com/2019/01/16/move-to-netlify/</link><guid isPermaLink="false">https://honmushi.com/2019/01/16/move-to-netlify/</guid><pubDate>Wed, 16 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このブログはGatsbyで生成した静的なファイルを、Firebaseでホスティングしていました。
このたび、Netlifyへ移行しこちらで発信するようにしました。かなり便利です。&lt;/p&gt;
&lt;p&gt;このような便利なサービスがどんどん出てきますね。使ってみてよかったです。
Netlifyでブログを発信することにした経緯と基本的な情報を書いておきます。&lt;/p&gt;
&lt;p&gt;手順については以下の記事で記録しておきます、合わせて参考にしていただければと思います。&lt;br&gt;
&lt;a href=&quot;/2019/01/16/how-to-netlify/&quot;&gt;NetlifyでGatsbyブログを発信する手順&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;なぜFirebaseをやめるか&lt;/h2&gt;
&lt;p&gt;無料枠のアカウントを使っていたのですが、ファイルアップロードの容量制限に到達してしまいました。
これ以上は有料なプランにしないと運用できなくなってしまいました。&lt;/p&gt;
&lt;p&gt;詳細には以下の記事に書いていますが、容量計算の考え方が「これまでのデプロイでアップロードした累計のファイルサイズ」となっているため、実際のコンテンツのサイズよりも何倍も容量を消費していました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/2019/01/14/firebase-gb/&quot;&gt;Firebaseでブログをつくるのはおすすめできない&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;容量が1GBまでというのも原因としてあります。有料のアカウントを使うことで10GBまたは従量課金にすることができますが、あっという間にそれもいっぱいになる可能性があるので諦めました。&lt;/p&gt;
&lt;h2&gt;Netlifyとは&lt;/h2&gt;
&lt;p&gt;ホスティングサービスです。GitHub pagesやFirebase Hostingと同じです。ほかにも結構いろいろなことに使えるようです。静的コンテンツをホスティングできます。&lt;/p&gt;
&lt;h3&gt;特徴&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ビルドやデプロイを自動で行う&lt;br&gt;
あんまり信じてなかったんですが簡単にできました。とても便利です。&lt;/p&gt;
&lt;p&gt;FirebaseやGitHub Pagesでは、ローカルで&lt;code&gt;gatsby build&lt;/code&gt;して、public/以下に生成される静的なソースをデプロイする必要がありました。しかし、Netlifyではビルドを代わりにやってくれます。&lt;/p&gt;
&lt;p&gt;ですので、src/以下のファイルとgatsby-config.jsやgatsby-node.js、package.json などの設定ファイルのみをアップロードしておくだけでよいです。srcへの変更を察知して、Netlifyが&lt;code&gt;gatsby build&lt;/code&gt;を実行して、public/以下に出力されるファイルを自動でデプロイして公開してくれます。&lt;/p&gt;
&lt;p&gt;もちろんGatsby pagesのようなイメージで、public/以下のみをアップロードしておいて、ローカルで&lt;code&gt;gatsby build&lt;/code&gt;をおこなってpublic/以下をアップロードして更新する方法も可能です。&lt;/p&gt;
&lt;p&gt;Gatsby以外のブログ生成アプリにも対応しています。以下は対応してそうです。他にも使えるものがあるかもしれません&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;+ Jekyll
+ Grunt
+ Middleman
+ Hexo
+ Hugo
+ Gatsby
+ VuePress&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;GitHubなどと連携できる&lt;br&gt;
GitHub・Gitlab・Bitbucketと連携できます。リポジトリからソースを持ってきてビルドできます。
リポジトリにプッシュされたことをトリガーに、自動ビルド→自動デプロイができます。&lt;/li&gt;
&lt;li&gt;HTTP/2とCDN利用によって高速&lt;br&gt;
HTTP/2対応していることと、CDNを使わせてもらえるので速いはずです。
これらも勝手に設定してくれます。逆に詳細に設定変えることはできなさそうです。&lt;/li&gt;
&lt;li&gt;カスタムドメイン&lt;br&gt;
独自ドメインを設定できます。お名前ドットコムなどで取得したドメインを使ってサイトを発信することができます。&lt;/li&gt;
&lt;li&gt;SSLにも対応&lt;br&gt;
無料でSSL証明書を用意してくれます。ですのでHTTPSでの配信も無料で行なえます。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;アカウント作成&lt;br&gt;
無料枠はメールアドレスやGitHubなどのアカウントを使って利用できます。クレジットカードの登録は必要ありませんでした。&lt;/p&gt;
&lt;p&gt;フリープランだととりあえず以下の制限になっています。(2019/01/16時点）&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;ネットワーク転送量：100GB/月  
容量：100GB  
デプロイ時のAPIリクエスト: 500リクエスト/分、3デプロイ/分&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;チーム向けのプランもあるので、通常の無料枠では複数人での管理はできないと思います。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;詳細は以下（英語です、そのうち訳してみます）&lt;br&gt;
&lt;a href=&quot;https://www.netlify.com/tos/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.netlify.com/tos/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;つかっているもの&lt;/h2&gt;
&lt;h3&gt;Gatsby&lt;/h3&gt;
&lt;p&gt;node.jsとReactによる静的ブログ生成ができます。
詳細なことはここには書きませんが、SPAもPWAも対応できるのでおすすめです。&lt;/p&gt;
&lt;p&gt;記事はマークダウン形式で書いています。&lt;/p&gt;
&lt;h3&gt;GitHub&lt;/h3&gt;
&lt;p&gt;ソースの管理はGitHubを使っています。最近プライベートリポジトリが無料枠でも使えるようになったので利用しています。&lt;/p&gt;
&lt;h3&gt;Netlify&lt;/h3&gt;
&lt;p&gt;上記で説明している静的コンテンツのホスティングサービスです。&lt;/p&gt;
&lt;h2&gt;やってみた感想&lt;/h2&gt;
&lt;p&gt;便利でした。実際のサイトの発信もいまのところ問題なさそうです。&lt;/p&gt;
&lt;p&gt;ローカルでsrc/以下のマークダウンファイルを作成・編集して、gitでコミット、GitHubへプッシュを行えば、
Netlifyが感知してbuild、deployをやってくれます。&lt;/p&gt;
&lt;p&gt;簡単にサイトを公開できました。これからはローカルでのビルドが必要なくなるのでとても快適です。
手順は以下の記事に書いてます。参考になれば。&lt;br&gt;
&lt;a href=&quot;/2019/01/16/how-to-netlify/&quot;&gt;NetlifyでGatsbyブログを発信する手順&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;懸念&lt;/h3&gt;
&lt;p&gt;1点、使っている容量等を確認できる画面が無い？ので心配です。
容量使いすぎたりすると、何らかの形でお知らせされるのだと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[NetlifyでGatsbyブログを発信する手順]]></title><description><![CDATA[Netlifyを利用してGatsbyで生成したブログを発信する手順です。
これまではFirebaseを利用していましたが、Netlifyに移動したのでその時の手順を記載しています。 HTTPS…]]></description><link>https://honmushi.com/2019/01/16/how-to-netlify/</link><guid isPermaLink="false">https://honmushi.com/2019/01/16/how-to-netlify/</guid><pubDate>Wed, 16 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Netlifyを利用してGatsbyで生成したブログを発信する手順です。
これまではFirebaseを利用していましたが、Netlifyに移動したのでその時の手順を記載しています。&lt;/p&gt;
&lt;p&gt;HTTPSにも対応してくれますし、ビルド・デプロイも変わりにやってくれるので快適です。&lt;/p&gt;
&lt;p&gt;以下の記事にてNetlifyで発信する経緯を書いてます。&lt;br&gt;
&lt;a href=&quot;/2019/01/16/move-to-netlify/&quot;&gt;ブログをNetlifyに移動しました&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;すでにGatsbyでサイトをビルドするとこまではやってある前提です。&lt;br&gt;
そのへんの情報も知りたい方はこちらへ&lt;br&gt;
&lt;a href=&quot;/2018/11/26/createblog&quot;&gt;Gatsby+Firebaseを利用したブログの作り方&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;localで用意したGatsbyのソースと設定ファイルをGitHubにコミットします。&lt;br&gt;
NetlifyでGitHubとの連携をおこない、コミットしたソースコードを取得します。&lt;br&gt;
Netlifyでビルド・デプロイを行いサイトを発信します。&lt;br&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;+ GitHub
    + GitHubにリポジトリ作成
+ Netlify
    + Netlifyでアカウント作成
    + 新しいサイトを作成
    + リポジトリを選択
    + buildコマンドと出力ディレクトリを設定
    + 初回のビルド
    + アクセスして確認
+ GitHubへプッシュ
+ 独自ドメインの接続
    + ドメインの入力
    + DNSのレコード設定
    + SSL証明書の発行を待つ
+ 完了&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;詳細&lt;/h2&gt;
&lt;h2&gt;GitHub&lt;/h2&gt;
&lt;h3&gt;GitHubにリポジトリを作成&lt;/h3&gt;
&lt;p&gt;ローカルのGatsbyで利用するソースコードをコミットしてプッシュします。&lt;br&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;src/
    +…
static/
    +…
gatsby-config.js
gatsby-node.js
package.json
README.md&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ビルド時に生成されるpublic/以下の実際の静的コンテンツは不要です。
src/以下とその他設定ファイルが必要になります。&lt;/p&gt;
&lt;p&gt;プライベートリポジトリにしても問題ないです。&lt;br&gt;
変更方法はこちらを参考にしてみてください。&lt;br&gt;
&lt;a href=&quot;/2019/01/08/Github-private/&quot;&gt;GitHubのプライベートリポジトリが無料枠でも使えるようになった&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Netlify&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.netlify.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Netlifyのサイト&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Netlifyでアカウント作成&lt;/h3&gt;
&lt;p&gt;GitHubのアカウントを使って連携します。メールアドレス等使ってアカウントを作成することもできますが、いずれかのソース管理サービスを連携することになりますので、最初から連携してしまえばいいと思います。&lt;/p&gt;
&lt;p&gt;GitHub側で許可するかどうか質問されるので許可しましょう。&lt;/p&gt;
&lt;h3&gt;新しいサイトを作成&lt;/h3&gt;
&lt;p&gt;もろもろの入力をすませると、管理画面に移動します。
New site from Git を選択し、GitHubを選択します。&lt;/p&gt;
&lt;h3&gt;リポジトリを選択&lt;/h3&gt;
&lt;p&gt;GitHubと連携できていればリポジトリ選択ができますので、先程GitHubに作成したリポジトリを選択します。
該当のリポジトリが選択できない場合は、リポジトリごとにNetlifyとの連携を確認するようになっています。
GitHub側でリポジトリ単位で連携を許可する必要があります。&lt;/p&gt;
&lt;p&gt;下の方に「Configure the Netlify app on GitHub.」というリンクがあるのでそこからアクセスして設定の変更をしましょう。&lt;/p&gt;
&lt;h3&gt;build コマンドと出力ディレクトリを設定&lt;/h3&gt;
&lt;p&gt;デプロイに利用するブランチやビルドの設定を行います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブランチは実際に利用するものを選んでください。私は特に変更の必要はないのでmasterにしています。&lt;/li&gt;
&lt;li&gt;Build commandには&lt;code&gt;gatsby build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Publish directoryには&lt;code&gt;public&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を設定します。Gatsbyの方でデフォルトの設定で利用していればこれで問題ないです。出力先を別のディレクトリにしているとか、ビルド時に何らかのオプションを設定しているとかであれば、ここに入力しておけば反映されます。&lt;/p&gt;
&lt;p&gt;ちなみに両方空にしておくと、リポジトリのソースがまるごとデプロイされるようです。もしも、ビルドをローカルで行って、生成されたファイルのみを直接デプロイしたい場合はこれらを空にします。&lt;/p&gt;
&lt;h3&gt;初回のビルド&lt;/h3&gt;
&lt;p&gt;下部の「Deploy site」を選択すると、デプロイが行われます。&lt;/p&gt;
&lt;p&gt;自動的にビルドコマンド（&lt;code&gt;gatsby build&lt;/code&gt;）が実行され、&lt;code&gt;public&lt;/code&gt;以下に出力されるファイルがデプロイして公開されます。
ログが表示されるので何かあればそこに出力されます。うまく行かなかった場合などはこのログを見て対応しましょう。&lt;/p&gt;
&lt;p&gt;package.jsonにプラグインの記載が足りない場合や時間がかかりすぎた場合などあるかと思います。
どうやらビルドに15分以上かかると失敗するそうです。サイトが大きい場合は注意してください。&lt;/p&gt;
&lt;h3&gt;アクセスして確認する&lt;/h3&gt;
&lt;p&gt;ビルドが正常完了して入れば、ビルド履歴のところが「PUBLISHED」になっています。
デプロイしたサイトのURLが与えられています。画面上のリンクからアクセスしてブログが発信されていることが確認できます。&lt;/p&gt;
&lt;p&gt;サイト名が最初は長い文字列になっています。設定から名前を変更できるのでやっておくと良いです。URLも変わります。&lt;/p&gt;
&lt;h2&gt;GitHubへプッシュ&lt;/h2&gt;
&lt;p&gt;ここまででとりあえずサイトは公開されました。&lt;/p&gt;
&lt;p&gt;以降の更新はGitHubにプッシュすると自動でビルド・デプロイが行われます。設定を変更すれば自動で行うかどうかを変更できます。&lt;/p&gt;
&lt;p&gt;GitHubの該当するリポジトリにpushすると、自動的にNetlifyが感知してビルドを行います。
正常にビルドが完了すれば&lt;code&gt;public/&lt;/code&gt;以下のファイルがデプロイされて公開されます。
したがって、ローカルで&lt;code&gt;gatsby build&lt;/code&gt;コマンドを実行する必要はなくなりました。ローカルの&lt;code&gt;public/&lt;/code&gt;以下のファイルも必要ありません。&lt;/p&gt;
&lt;h2&gt;独自ドメインの接続&lt;/h2&gt;
&lt;p&gt;サイトの管理画面に「Domain Setting」のリンクがあります。
クリックすると設定画面に遷移します。（Settingタブからもアクセスできます。）&lt;/p&gt;
&lt;h3&gt;ドメインの入力&lt;/h3&gt;
&lt;p&gt;「Custom domains」 の項目内の「Add custom domain」を選択するとドメインを入力するフォームが表示されます。そこに自分の持っているドメインを入力します。&lt;/p&gt;
&lt;p&gt;「Custom domains」の項目に入力したドメインが追加されます。ただし、この時点では権限を持っているか怪しいので、「Check DNS configuration」と表示されます。まだドメインにアクセスしてもブログは表示されません&lt;/p&gt;
&lt;h3&gt;DNSのレコード設定&lt;/h3&gt;
&lt;p&gt;「Check DNS configuration」をクリックすると、設定方法が表示されます。
設定すべきAレコードのIPが表示されますので、その内容をメモしてDNSに設定します。&lt;/p&gt;
&lt;p&gt;私の場合は独自ドメインをお名前ドットコムで取得しているので、お名前ドットコムの管理画面で設定しました。設定変更後しばらく待つと反映されます。&lt;/p&gt;
&lt;p&gt;「Check DNS configuration」の文字が消えてドメインが緑色の文字になったら完了です。権限が認められました。&lt;/p&gt;
&lt;h3&gt;SSL証明書の発行を待つ&lt;/h3&gt;
&lt;p&gt;自動的にSSL証明書が作られます。しばらく時間がかかりますが、1晩たったら反映されていました。
「Your site has HTTPS enabled」と表示されるようになります。これでHTTPSでのアクセスもできるようになっています。&lt;/p&gt;
&lt;h2&gt;完了&lt;/h2&gt;
&lt;p&gt;以上でNetlifyでGatsbyブログを発信する手順は完了です。他にもフォームを作ったりできる？だったり、気になる情報が満載なので、引き続き色々触ってみようと思います。&lt;/p&gt;
&lt;p&gt;使ってみてかなり便利だったので、とりあえずはNetlifyでGatsbyブログをホスティングしようと思います。これでもなにかうまく行かないようだったら、AWSでしょうかね。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Firebaseでブログつくるのはおすすめできない]]></title><description><![CDATA[このブログはFirebaseのHostingで発信しているのですが、あっというまに容量の上限に近づいてしまいました。
無料枠の上限なので有料枠に移行すれば解決できますが、それもすぐにいっぱいになりそうなので移動を考え中です。 静的なLP…]]></description><link>https://honmushi.com/2019/01/14/firebase-gb/</link><guid isPermaLink="false">https://honmushi.com/2019/01/14/firebase-gb/</guid><pubDate>Mon, 14 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このブログはFirebaseのHostingで発信しているのですが、あっというまに容量の上限に近づいてしまいました。
無料枠の上限なので有料枠に移行すれば解決できますが、それもすぐにいっぱいになりそうなので移動を考え中です。&lt;/p&gt;
&lt;p&gt;静的なLPなどであればかなりおすすめですが、継続的にコンテンツを増やしいていくブログを書くとなったら別のサービスを利用したほうが良さそうです。&lt;/p&gt;
&lt;h2&gt;Firebase Hosting&lt;/h2&gt;
&lt;p&gt;Firebaseに用意されている機能の一つで静的なコンテンツを発信できます。HTML・JS・CSSを発信することができます。RubyやJavaなどを使ってサーバサイドで動的な処理をすることはできません。&lt;/p&gt;
&lt;p&gt;ただしFirebase のFunctionsを使えば、動的な処理を定義することができるようです。こちらはまだ使ってないので詳細はわかりません。&lt;/p&gt;
&lt;h2&gt;いいところ&lt;/h2&gt;
&lt;p&gt;いいところを先に書いておきます。&lt;/p&gt;
&lt;h3&gt;HTTPS&lt;/h3&gt;
&lt;p&gt;Firebaseによって自動でSSL証明書が発行されるので、ドメインを接続すれば自動でHTTPSでの発信ができます。&lt;/p&gt;
&lt;h3&gt;CDNでの配信&lt;/h3&gt;
&lt;p&gt;CDNが用意されているようでコンテンツが勝手にCDNを通して配信されます。自分で用意する必要はありません。たまにブログの更新などがすぐに反映されなくて困ることはありますが、高速でレスポンスが帰ってくるはずなのでかなりいいと思います。&lt;/p&gt;
&lt;h3&gt;デプロイが簡単&lt;/h3&gt;
&lt;p&gt;FirebaseのCLIツールをインストールして、コマンドでデプロイができます。初期設定なんかも簡単にやってくれるので簡単に始めることができました。&lt;/p&gt;
&lt;p&gt;デプロイしたソースのロールバックも行うことができます。こちらはWEB上の管理画面から操作します。&lt;/p&gt;
&lt;h3&gt;リダイレクトやリライト、ヘッダーの内容を設定できる&lt;/h3&gt;
&lt;p&gt;設定ファイルがあり、それの内容を書き換えることでリダイレクトの設定などヘッダー情報を書き換えることができます。キャッシュの生存期限など変更していました。&lt;/p&gt;
&lt;h3&gt;色んな機能がある&lt;/h3&gt;
&lt;p&gt;今回はHostingしか利用していないのですが色んな機能があります。DatabaseやStorageなんかも使えます。ただし、無料枠ではそれなりに制限がされています。&lt;/p&gt;
&lt;p&gt;どちらかといえばスマホのアプリの開発に使うのがいい様子です。クラッシュログの監視ツールやパフォーマンス測定ツールなどが用意されていました。&lt;/p&gt;
&lt;h3&gt;無料である程度使える&lt;/h3&gt;
&lt;p&gt;私は無料枠で利用していました。特にカードの登録とかは必要なくメールアドレスで利用が初められます。
Hositing以外の機能ももちろん無料である程度使えます。&lt;/p&gt;
&lt;h2&gt;見つかった問題&lt;/h2&gt;
&lt;p&gt;Hostingするコンテンツの容量制限に届きそうです。&lt;/p&gt;
&lt;p&gt;無料枠では「1GB」の容量が用意されており、いつかは容量に届いてしまうなと思っていました。
このサイトはGatsbyで生成したHTML・JS・CSSでできており、まだ数カ月しか運用していないこともあり、まだまだ1GBには届かないはずです。&lt;/p&gt;
&lt;p&gt;しかし、デプロイするたびにガンガン容量が増えてしまいました。
ずばりFirebase Hostingの容量の計算方法が、「これまでのデプロイでアップロードした累計のファイルサイズの合計」となっているため、容量を食いつぶしてしまいました。&lt;/p&gt;
&lt;p&gt;ブログ自体は1GBには到底届きませんが、これまでのデプロイのファイルサイズをすべてカウントして合計しているため、累計で1GBに届きそうということです。悲しい。&lt;/p&gt;
&lt;p&gt;GatsbyではJS・CSSファイルにはファイル名にランダム？な英数字がふられており、build するたびに別名のJS・ファイルが生成されます。ブラウザキャッシュの対策とかでしょうか。それらを毎回アップしていたためにあっという間に容量の制限に到達したようです。&lt;/p&gt;
&lt;p&gt;ブログの不要なファイルなどを削除して容量を小さくしても、今までのアップロードの累計となっているため容量の空きは作られません。&lt;/p&gt;
&lt;p&gt;有料枠にすれば容量の枠が「10GB」に拡張されますが、すぐいっぱいになるかなと考えています。
従量課金のプランもあるのですが、どうなのでしょうか。ちょっと不安です。&lt;/p&gt;
&lt;h2&gt;すなわち&lt;/h2&gt;
&lt;p&gt;ブログなどの継続的にデプロイが必要なものはFirebase Hostingで運用するのはあまり向いていないです。
アプリのLPなど、作りっぱなしで良いもの、頻繁に更新しないものなどであれば良いと思います。&lt;/p&gt;
&lt;h2&gt;別のHostingサービスに移動しようか&lt;/h2&gt;
&lt;p&gt;容量いっぱいになってしまうので移動しようかと思っています。今のところはGithub Pageを候補に考えています。独自ドメイン取得して運用していたので、簡単に移行はできそうです。CDNとか結構嬉しかったのですが仕方ないです。
Netlifyも面白そうなのでどちらか試してみます。&lt;/p&gt;
&lt;p&gt;Firebaseは新しくて面白かったので、WEBアプリなど別の目的で引き続き利用してみようかと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】バナナを逆からむいてみたら]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/11/banana/</link><guid isPermaLink="false">https://honmushi.com/2019/01/11/banana/</guid><pubDate>Fri, 11 Jan 2019 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;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;バナナを逆から向いてみたら&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;アーチャン・ブラーム&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;畔上 司&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;主婦の友社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4074249294/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4074249294&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=5af7eb5ad50159eae788cf38848d5d25&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4074249294&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4074249294&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;人生の視点を返るようなお話が32個紹介されています。&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;著者の経験であったり、昔話として有名なお話であったりを参考にわかりやすく書かれています。
自分ではこう思っていたけど客観的にみると逆の見方もできた、というものや、このように考えれば嫌なことも向き合うことができるといった考え方のコツが書かれています。&lt;/p&gt;
&lt;h2&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 target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4074249294/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4074249294&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=d07cd05771ff1f7cf2a3b57f1750db63&quot;&gt;バナナを逆からむいてみたら ー 人生の視点を変えるレッスン&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4074249294&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></item><item><title><![CDATA[【おすすめ読書】情熱プログラマー]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/11/jyonetsu-programmer/</link><guid isPermaLink="false">https://honmushi.com/2019/01/11/jyonetsu-programmer/</guid><pubDate>Fri, 11 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ソフトウェア開発者が幸せな生き方を目指すための目指すべき指針を学べる本です。&lt;/p&gt;
&lt;p&gt;開発者として幸福感を得られるような、退屈しない人生とはどういうものか、どうすればそれを目指せるのかといったことが書かれています。&lt;/p&gt;
&lt;p&gt;プログラムのテクニックと言うよりはキャリアの考え方の本です。
筆者の実際の経験をもとに、そこから学んだ教訓が53個紹介されています。
エンジニアと下のキャリアについて全く検討もつかない人とか読んでみるといいと思います。&lt;/p&gt;
&lt;p&gt;根本的な考え方が多く、ハッとさせられます。3年後・5年後・10年後といったより細かく具体的なキャリアステップについて考えている場合は別の本を参考にするといいです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4274067939/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274067939&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=3d2835d0fe6920c02f027ef31306674e&quot;&gt;情熱プログラマー ソフトウェア開発者の幸せな生き方&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4274067939&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;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Chad Fowler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;でびあんぐる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;オーム社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4274067939/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274067939&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=4b29196098a11b37e9117959aa6d0743&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4274067939&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4274067939&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;なぜこの本を読んだのか&lt;/h2&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;p&gt;プログラマ・エンジニアとして退屈しないようなキャリアを進むために重要になる考え方を紹介しています。&lt;/p&gt;
&lt;p&gt;著者の経験や意見から繰り出される53個のキーワードと、そのストーリー・学びが書かれています。「今すぐ始めよう！」のコーナーもついていて実践に移すこともできます。ただ、「今すぐ始めよう！」の箇所に関しては結構難しくハードルが高いものもありますので、機会をみてやるのがいいかなと思います。
必ずしもすぐできないとだめとは思いません。&lt;/p&gt;
&lt;p&gt;著者は、以前ミュージシャンをやっていたので、その時のエピソードもあるのですが、なかなか参考になりました。エンジニアや画家、音楽家など似ている部分があるのでしょうね。&lt;/p&gt;
&lt;h2&gt;印象に残ったこと&lt;/h2&gt;
&lt;p&gt;印象に残った箇所をいくつか書いておきます。他の本とかで引用されているのもあるので見たことあるやつもあるかもしれません。&lt;/p&gt;
&lt;h3&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&gt;失敗する方法を学ぶ&lt;/h3&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;h3&gt;あわてるな&lt;/h3&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;p&gt;アジャイル的な計画にしましょう。ズバリ時代の変化は速くキャリア計画も変更が必要になることは多々あります。それに備えて変化を受け入れるような反復的な手法を取り入れるべきです。&lt;/p&gt;
&lt;p&gt;キャリアの変更は可能であるだけでなく、必要な時代になっているという考え方でした。&lt;/p&gt;
&lt;h3&gt;昨日より良く&lt;/h3&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;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 target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4274067939/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274067939&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=3d2835d0fe6920c02f027ef31306674e&quot;&gt;情熱プログラマー ソフトウェア開発者の幸せな生き方&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4274067939&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></item><item><title><![CDATA[【おすすめ読書】判断のデザイン]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/11/handan/</link><guid isPermaLink="false">https://honmushi.com/2019/01/11/handan/</guid><pubDate>Fri, 11 Jan 2019 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;TEDトークで発表された内容の追記のようなものです。
本でも紹介されているTEDトークも一緒に見ると結構学びが増えて良いです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;判断のデザイン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;チップ・キッド&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;坪野 圭介&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;朝日出版社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4255010099/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4255010099&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=72908d633be29c992cace1bfd015949d&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4255010099&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4255010099&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;世の中には様々なメッセージがありますが、たまにその伝え方にこれでいいのだろうかと感じるときがあると思います。
人間は情報を判断する時に、明瞭（クリア）なのか不可解（ミステリアス）なのかという部分を敏感に感じるそうです。&lt;/p&gt;
&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;p&gt;わかりにくくなる要素の一例として、明瞭なのか不可解なのかという考え方を知ることができます。こういう考え方を頭の片隅においておくだけでも、日常生活から得られるものは増えていくと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4255010099/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4255010099&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=cf052afaa00512691916eceb2eae4055&quot;&gt;判断のデザイン (TEDブックス)&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4255010099&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></item><item><title><![CDATA[【おすすめ読書】ラクガキマスター]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/11/rakugaki-master/</link><guid isPermaLink="false">https://honmushi.com/2019/01/11/rakugaki-master/</guid><pubDate>Fri, 11 Jan 2019 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;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4568504058/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4568504058&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=842aa45b4f2dd82fa09b3b88ba17a577&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4568504058&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4568504058&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&gt;なぜこの本を手に取ったか&lt;/h2&gt;
&lt;p&gt;数年前に発売された本ですが、この頃結構「手書きで書いてみよう」という本が多かったと思います。脳トレブームと関連しているのだと思いますが。その中で、「大人タバコ養成講座」などで目にする機会が多かった寄藤文平さんの本を見つけたので、たまたま手にとりました。&lt;/p&gt;
&lt;p&gt;この本以外にも、独特な面白いイラストを使った本がいくつかあるのでそちらもおすすめです。
結構勉強になる本もあるので、イラストに興味ない人にもおすすめです。&lt;/p&gt;
&lt;h2&gt;本の概要&lt;/h2&gt;
&lt;p&gt;著者である寄藤文平さんのラクガキに対する思いや、ラクガキのコツが主なコンテンツになっています。&lt;/p&gt;
&lt;p&gt;ラクガキっていうのは固く考えなくていんだ。ということを始めとして、自身がラクガキに見出した面白いポイントなどを紹介してくれます。モヤモヤしたときこそラクガキとしてアウトプットすることで整理されることもあるらしく、普段の生活にも活かせるかもしれません。&lt;/p&gt;
&lt;p&gt;他にもラクガキのコツとして、すぐにできそうなサンプル（木とか山とか人とか）であったり、身近なものをキャラクター化した例などを紹介しています。ポイントとなる部分を歯科k理示してくれているので絵の先生としてとても親切だと思いました。&lt;/p&gt;
&lt;h2&gt;本の特徴&lt;/h2&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;p&gt;普段の仕事や生活では全然イラストなんて書かないという人に読んでほしいです。
結構絵を書くことはハードル高く感じている人は多いと思います。この本では結構脱力的というか、ゆるーく捉えており、ラクガキは楽しいものだよということを教えてくれます。&lt;/p&gt;
&lt;p&gt;上記にも書いてますが、いくつかの素材的なものも紹介されているので、いざっと言うときに役に立つと思います。真似して書いてみると、思ったよりも簡単でうまく書けたような気になります。&lt;/p&gt;
&lt;p&gt;寄藤文平さんのイラストが好きな人は見ているだけでも楽しいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【実践技術書】スラスラ読める JavaScript ふりがなプログラミング]]></title><description><![CDATA[201…]]></description><link>https://honmushi.com/2019/01/10/surasurajs/</link><guid isPermaLink="false">https://honmushi.com/2019/01/10/surasurajs/</guid><pubDate>Thu, 10 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2018年に出版された本です。見るからに入門書なのですが、プログラムにふりがなをつけることで究極の優しさを目指したという、他に見ない着眼だったので手にとりました。&lt;/p&gt;
&lt;p&gt;プログラミングをこれから始めるという人にはいいと思います。超入門として親切だと思います。&lt;/p&gt;
&lt;p&gt;この本を読めばとりあえずプログラムは動かせるようになります。四則演算と条件分岐、繰り返し、関数の定義、配列への代入、ぐらいができます。あとはエラーメッセージの読み方も身につくと思います。
終盤にはHTMLと連携して、DOMの書き換えをやりましたがほんとにさわりの部分だけです。
WEBサイトを作ったり、アプリに応用したりすることは難しいです。&lt;/p&gt;
&lt;p&gt;プログラミングはやったことあるけどJavaScriptはこれから、という人は他の本を見たほうがいいと思います。&lt;/p&gt;
&lt;p&gt;実務ですでに使っているという人には特に参考になる箇所は無いと思います。プログラミング歴0ヶ月のような人におすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4295003859/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4295003859&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=37717a89e36441d6a633405815309e3a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4295003859&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4295003859&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&gt;なぜこの本を読んだか&lt;/h2&gt;
&lt;p&gt;プログラミングの入門書として紹介されていたので、特に必要ないかと思いました。しかし、ソースコードにふりがなをつけるという着眼が新しかったので手にとリました。&lt;/p&gt;
&lt;p&gt;同じシリーズでPythonなどもあるので、自分の勉強したい言語に合ったものを選ぶと良いです。
JavaScriptなら簡単に実行環境が用意できるのでおすすめです。&lt;/p&gt;
&lt;h2&gt;本の概要&lt;/h2&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;li&gt;関数の定義・利用&lt;/li&gt;
&lt;li&gt;WEBページのDOM操作&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;タイトル通りですが、プログラムにふりがなと読み下し文がついています。
これがあることで、全く触ったことがない人や、プログラム言語に何故か抵抗がある人にもわかりやすくなっています。基本の説明が多いので、紹介されている要素はあまり多くなく、この本だけでは実際にWEBサイトを作ったりアプリを作ったりするのは難しいです。&lt;/p&gt;
&lt;p&gt;実行環境にGoogleChromeを、エディタとしてAtomを使っています。とくにそれでないと困ることはないので、メモ帳とかでも全然大丈夫です。&lt;/p&gt;
&lt;p&gt;サンプルコードのダウンロードも可能です。実際コードの量は大した量ではなく、全然自分で入力しても苦にならないくらいです。ただどうしても動かない場合に、正しいものと比較できるように用意しているくらいの印象です。差分とったりする方法も紹介されていました。&lt;/p&gt;
&lt;h2&gt;印象に残ったこと&lt;/h2&gt;
&lt;h3&gt;最初に触るプログラムにJavaScriptはいいかも&lt;/h3&gt;
&lt;p&gt;ブラウザを立ち上げればすぐに実行環境が起動できることや、コンパイル不要な点など、JavaScriptはプログラミング初学者にはいいと思います。簡単に動かせますし実行環境を用意する段階でのつまずきなどが無いです。&lt;/p&gt;
&lt;p&gt;プログラミング以外の箇所で不明なことや躓くことが少ないので、プログラミングに触れてみる段階ではJavaScriptを選択することは良いかもしれないと思いました。WEBでも使われますしサンプルもあちこちで手にに入ります。&lt;/p&gt;
&lt;h3&gt;ふりがなと読み下し文&lt;/h3&gt;
&lt;p&gt;ふりがなはプログラムを単語ごとに日本語へ変換したものです。読み下し文はプログラムを行ごとにどういう意味かを日本語に訳しています。
ざっくり授業で英語や古文の授業でやったようなアプローチです。確かに、機械に命令を伝える言語と捉えて、英語や古文などと似たように扱うアプローチは良い印象でした。&lt;/p&gt;
&lt;h3&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;JavaScriptの入門というより、プログラミングの入門くらいの親切さでした。
関数やオブジェクトがどのように扱われるかなど、難しい仕組みの説明などはありません。
実際に動かすことが目的です。&lt;/p&gt;
&lt;p&gt;初学者というかプログラミングをこれから始めようと思っている人に良いと思います。お子さんにもいいと思います。この本で楽しさに気づいて夢中になってくれるといいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】2階から卵を割らずに落とす方法]]></title><description><![CDATA[科学や物理の発明の歴史を紹介する本です。
結構分厚い本ですが、紹介している発明も3…]]></description><link>https://honmushi.com/2019/01/09/tamagowowarazuni/</link><guid isPermaLink="false">https://honmushi.com/2019/01/09/tamagowowarazuni/</guid><pubDate>Wed, 09 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;科学や物理の発明の歴史を紹介する本です。
結構分厚い本ですが、紹介している発明も35個くらいでそんなに多くありません。イラストや図も多いです。&lt;/p&gt;
&lt;p&gt;副題にあるとおり、科学の歴史を「実験」で振り返るということなので、テーマごとに実験が用意されています。どれも家庭でちょっと準備すればできそうなものばかりなので、お子さんの夏休みの自由研究とかには良さそうです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;2階から卵を割らずに落とす方法&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;ショーン・コノリー&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;古谷 美央&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;ディスカヴァー・トゥエンティ・ワン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4799315951/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4799315951&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=154bfef993c62ef13b47e436feabc639&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4799315951&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4799315951&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&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;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;科学や物理の本って難しそうに見えますが、こういう入門的なものはとても簡単です。この本は特に難しいことは書いておらず、小中学生にもおすすめです。&lt;/p&gt;
&lt;p&gt;テーマの順番は時系列に並んでいるので、この発明はこの発明よりも前だったのか！という発見はあるかもしれません。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4799315951/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4799315951&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=17c80d5e7e6645d8e032b8975c2d5b7c&quot;&gt;2階から卵を割らずに落とす方法 科学の歴史を実験で振り返る本&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4799315951&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></item><item><title><![CDATA[aliasコマンドの使い方メモ]]></title><description><![CDATA[ちょっと便利にするためにalias…]]></description><link>https://honmushi.com/2019/01/08/command-alias/</link><guid isPermaLink="false">https://honmushi.com/2019/01/08/command-alias/</guid><pubDate>Tue, 08 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ちょっと便利にするためにaliasコマンドを使おうと思いました。
改めて使い方を調べたので忘れないようにメモしておきます。&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;alias&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;alias l=&amp;#39;ls -CF&amp;#39;
alias la=&amp;#39;ls -A&amp;#39;
alias ll=&amp;#39;ls -alF&amp;#39;
alias ls=&amp;#39;ls --color=auto&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;「~/.bashrc」ファイルに予め用意されている別名が定義されています。内容を確認する際は以下のコマンドを用います。&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;cat ~/.bashrc | grep alias&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;コマンドの別名を登録する&lt;/h2&gt;
&lt;p&gt;上記の「~/.bashrc」にコマンドを定義することで別名を登録します。
その後ログインし直せば反映されます。&lt;/p&gt;
&lt;p&gt;今回は別のファイル「~/.bash_aliases」を用意して、こちらにコマンドを定義するようにしました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[GitHubのプライベートリポジトリが無料枠でも使えるようになった]]></title><description><![CDATA[GitHubのプライベートリポジトリ設定が無料枠でも使えるようになったそうです。 いままではGitHubにコミットするとpublic…]]></description><link>https://honmushi.com/2019/01/08/github-private/</link><guid isPermaLink="false">https://honmushi.com/2019/01/08/github-private/</guid><pubDate>Tue, 08 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;GitHubのプライベートリポジトリ設定が無料枠でも使えるようになったそうです。&lt;/p&gt;
&lt;p&gt;いままではGitHubにコミットするとpublicな状態になり、全世界に公開されていました。
有料のアカウントになればプライベートリポジトリにできるので本当は特に問題ではないのですが、クレジットカードとかむやみに登録したくない消極的な私は無料アカウントのまま利用していました。&lt;/p&gt;
&lt;p&gt;しかし！この度、無料アカウントでもプライベートレポジトリを利用できるようになったということなので、早速やってみました。&lt;/p&gt;
&lt;h2&gt;プライベートリポジトリにすると&lt;/h2&gt;
&lt;p&gt;自分（所有者になっているアカウント）しか見れない状態にできます。他の人からはぱっと消滅したように見えるようです。&lt;/p&gt;
&lt;p&gt;プライベート化するリポジトリの数に上限は無いそうです。ただし、プライベート化したリポジトリを共有して開発できるようにする場合、3人までしか共有できないそうです。&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;以下消えます。
+ starやwatching
+ リポジトリで公開していたpages

以下もなくなります。回避したい場合planをアップグレードが必要。
+ コード所有者機能
+ これまでに作成されていたWiki
+ Insightsタブの中の各メニューが無効化される？または初期化？  
  活動状況、コントリビューター（プルリクエストしてくれた人とか）、GitHubの標準に沿って作られているかのチェック機能、アクセス数、コミット情報、最近のコードの行数の増減、各ブランチのコミット状況など
+ 共同開発は3人までに制限
+ branch保護設定&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;プライベート設定してみる&lt;/h2&gt;
&lt;p&gt;今まで公開状態になっていたリポジトリについて、プライベート設定をやってみました。&lt;/p&gt;
&lt;h3&gt;GitHubのリポジトリ&lt;/h3&gt;
&lt;p&gt;「Settings」タブを選択
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e34bdc6ad00fa03a7a2e377d5d018a9c/1b19f/setting.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 17.567567567567565%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlUlEQVQY03WOSw7DIAxEc/8bdtNtIVUJIXwCGKYYFZRW6kgPGNuMvPgQsekdPpywzkObA86H5gNeSvca+8P62d+fD4j7Dac1SFQQU54spXAhgYiQcoaQEnJdkT41hmeIae+cm69AbgfftdYvlhALWGz4g7UOuzE9ZIh7V3X/EzQDiYZBD+TthFyh1NZCa9+sXKh/ggZvhd05sW1O2IMAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Settingタブ&quot;
        title=&quot;Settingタブ&quot;
        src=&quot;/static/e34bdc6ad00fa03a7a2e377d5d018a9c/fcda8/setting.png&quot;
        srcset=&quot;/static/e34bdc6ad00fa03a7a2e377d5d018a9c/12f09/setting.png 148w,
/static/e34bdc6ad00fa03a7a2e377d5d018a9c/e4a3f/setting.png 295w,
/static/e34bdc6ad00fa03a7a2e377d5d018a9c/fcda8/setting.png 590w,
/static/e34bdc6ad00fa03a7a2e377d5d018a9c/efc66/setting.png 885w,
/static/e34bdc6ad00fa03a7a2e377d5d018a9c/1b19f/setting.png 991w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;settingsタブ&lt;/h3&gt;
&lt;p&gt;options（最初に選択されている画面）の一番下の「Danger Zone」内に該当の設定、「Make this repository private」があります。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/64b32698af53713cfc1db364457629d0/41d3b/danger.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.4054054054054%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABeklEQVQoz41S7W6DMAzk/R+w3Y91HbQQylcIEAiEcLMDrGrVqYt0ciDx5Xx2UEuJ89cZIk6QXGOMxoCXm2cs/8DvWhYsbkFghwGZSKEqCVmUPnaqWROsfYMZg6yhs9xHN00IJiIMwwgXUhdGEaLLBd8UO63Xh/H34jNNRG1WQNcNEVoEbhyhKbnvezRNi3krwzlHVSzvQXftOMGa8a7wcDjicPzA5+mENL1Bkq+SXlZKQdY18qJARVYw+JtjQfbwvbbTUOIGleZwdlM4EKmhePf3UcVLtS8scKQ0sNTVsiy9ojxflTDBjldl8jK6R8fekdLulkNX9eqhHQyEEBBpiiRJfMllVflyKorDYJ46sRKO9L+XCj1NRE9ihqbbCEkhJyo6YBLu7l6m2+MT+Hwmv0zbYSQPPaipa1N6HpsQUUTjQvEax5BeYe0fYPN9M/y+gNkGfyTfuRlNmkHFAm1eroQ8oPTsCi5nJgXTNriTve93UBKb/5DH2O7/AC2iVrzwqw+VAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;dangerzoneの内容&quot;
        title=&quot;dangerzoneの内容&quot;
        src=&quot;/static/64b32698af53713cfc1db364457629d0/fcda8/danger.png&quot;
        srcset=&quot;/static/64b32698af53713cfc1db364457629d0/12f09/danger.png 148w,
/static/64b32698af53713cfc1db364457629d0/e4a3f/danger.png 295w,
/static/64b32698af53713cfc1db364457629d0/fcda8/danger.png 590w,
/static/64b32698af53713cfc1db364457629d0/41d3b/danger.png 774w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;これを選択すると以下のアラートが表示されます。
下部のフォームにリポジトリの名前を入力すれば変更が完了です。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 464px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1852f2ac915648d9d64a2d484b5acb98/69096/warnig.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 130.40540540540542%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEB0lEQVRIx5VVW3PaVhDm//+DzjR96lubXpLYxthJXmrHYKeOjQ02IARIAgndbyCB0NfdFRAyaWfcM/PN7rlo9e3tnNoPr35G6+YzLq9auGy20Ly+wVWLcb2VN7J3cdUk+e+4+NSUc8f1BmpH9TOMdROdZwWD4RjKSMNDd4CeMsZwpKNL61Gag8fmAOUWG1RjmZfybe3d0RtsNimiyEaSuIhjh2CLTBICycXCR5YFWC4rsL5YeEhTV8DneK0/6KB2Wv8FsX0Bd/oXQruF2LlG4t4g9T4jspsIrCuEc0ZTwHu++Ql53AbWAyDvo8x7RHcITb1E7eT4V2ThHRLvHmnQRhZ1kMUdkcvwAanflj0B6TyP3TvkyRMZUrHJhygyhXwfY6K2UKuf1iUGSRKRGzG5HhB8hKFH8MnFBGW5phNFhbKoIkdr5WYl2BS5RHQyGRFDygwPe27Ddlzo+hSGYWA01kjO4PkBGcR343Btp2u6wQwrg1EUYjqbYTYzYVoWySnGE43WTMxp7rguLGsOYzpFFMdbQ6Vgs6lyrWn6V4OmaeLpuYd2+4HYjdHr9dDrD6CqKiaaJlDVEQbKkDKb7g0eSk0/MLhYLOD7PmzbIQaJIE0XSAQplVEsCKMIq9Vqz2yHPcNdDE3TQhSGsKMSulfCjktYpFthCT8IxdX5fI4ZndOIrW5MCQam0xmWWXZgcB/DSNy2KDlzZhnFCMjQnOYcM2ZUFMU3rL5jqB8YnBGD/mCAbrdLUhFdpwO7ELxkbJNyJhPHccQdZsnp73SfhN0uvklSxZR1ZpyRm+zVDlmWV2Xz+vc/t9Y13N5+wXOvL9l+eHzE3zTvPj3jnjLfpR/c3d1LFdzetcUTrgKDYsh163ANk6y9fXskBoMggKIoUIajfbDZbWWoiuvswWg8IeZdkY+djhQ9M+Xsr9Zr6hTta9nYti2x4w/69OcnYsYJCinzXE6sc6bZMLPh8yYV+mQyIaZ92eMf7ZPiug6xGUpBs8EhFfFyuUSe53jp+KawXWotjofneVKT3IIWtRyzKP6jVHbgcuIx4Swf10/xfwd32r6PD3qZ21MYcowURYU6GlM9zuhCsESXbqA5H+QQjCe6XBbsGpfIal3IM1BsDXLyakcnZHBBdRhm8OKVwI/XcKOtnqxF7uaH8JMCQUqgMxF1X7c/pjeFDHp0ecTLAklWgt+jdPUyJAz6JlluZP7Y4yxTDBN6sTQ7wtSJYcw8ou6Quw4liXTDFV2fuhX0Sje2unxDsMnDoUoMG2fn4n+WryQmObVXFiUVkpTeFwbri0oe7tEFkq/WAo6lQTGvvfrxJ3xsnOHspI4PlKBzus7eU3+/p7VKb4gua1t8aByA9+ncx8Y53vz2B/4BlYCTRfoB9AkAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;アラートの内容&quot;
        title=&quot;アラートの内容&quot;
        src=&quot;/static/1852f2ac915648d9d64a2d484b5acb98/69096/warnig.png&quot;
        srcset=&quot;/static/1852f2ac915648d9d64a2d484b5acb98/12f09/warnig.png 148w,
/static/1852f2ac915648d9d64a2d484b5acb98/e4a3f/warnig.png 295w,
/static/1852f2ac915648d9d64a2d484b5acb98/69096/warnig.png 464w&quot;
        sizes=&quot;(max-width: 464px) 100vw, 464px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&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;You will permanently lose:
+ All stars and watchers of this repository.
+ All pages published from this repository.

You can upgrade your plan to also avoid losing access to:
+ Codeowners functionality.
+ Any existing wikis.
+ Pulse, Contributors, Community, Traffic, Commits, Code Frequency and Network on the Insights page.
+ Unlimited collaborators. This repository will now be limited to 3 collaborators.
+ Branch protection rules.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;永久になくなるもの&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;starやwatching&lt;/li&gt;
&lt;li&gt;リポジトリで公開していたpages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下もなくなる。回避したい場合planをアップグレード。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;コード所有者機能&lt;/li&gt;
&lt;li&gt;これまでに作成されていたWiki&lt;/li&gt;
&lt;li&gt;Insightsタブの中の各メニューが無効化される？または初期化？&lt;br&gt;
活動状況、コントリビューター（プルリクエストしてくれた人とか）、gitHubの仕様に沿って作られているかのチェック機能、アクセス数、コミット情報、最近のコードの行数の増減、各ブランチのコミット状況など&lt;/li&gt;
&lt;li&gt;共同開発は3人までに制限&lt;/li&gt;
&lt;li&gt;branch保護設定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;プライベートになった&lt;/h2&gt;
&lt;p&gt;確かに所有者以外のアカウントではアクセスできなくなりました。リポジトリのページは404エラーでリポジトリの一覧にも表示されません。もちろん所有者であればアクセスできました。&lt;/p&gt;
&lt;h3&gt;insightsタブがの一部が無効化されている&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/3c538050d22c947a0bb8400741061170/00d43/insights.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.432432432432435%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABmUlEQVQoz3VSSXKkQAzk/+d5wXzA97nNfQ72wQ7POHqDXqDZl6KoBXIkAY622yYiu0RJZKeUCtpOQQ8Gqtfo9QBNSJIrsrxATkizDMY6qXHeS96PI8ZxIoyfMCFI8xJF3aIfLJQ2GIxBXhTIshxVVaEoSyn8/EzTxD/vkHd6hLBuFakz6PphVqM1Ke5hKe4pds7D+3HBbfwRrDJIiwp52YhCJhyMhSUCY72Q34LvZ7i73JoPrkmC+Jqiqpu7Dxz9K787P0ncKY266WSefpzv1hqpF8KsRtN2UEqJZG5pJhnFKP44jmNstju8bbZ4+fsP2/0B+0NI5K3UcFcrMbXcyvz4QlNilc7F0fGM6HTB5nDBLopxDC+4hDGi8CTku32IQxjhHCdCzBzBYLwomxanOGbSsmrIYXKZziRvcUpb/Anf8Hv7iNdzRGOqcaVNKKuatqKkLpUYEyxL8G47r4hd5reCx2CcxcPuF348/8RT9iq11s+jWecpLa/Kbgm/cpABzwV0uAnDdy5/WNTlZLe+grjvnJz3OS+d/AdC5VWv0xDOWwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;プライベート設定後のinsightsタブ&quot;
        title=&quot;プライベート設定後のinsightsタブ&quot;
        src=&quot;/static/3c538050d22c947a0bb8400741061170/fcda8/insights.png&quot;
        srcset=&quot;/static/3c538050d22c947a0bb8400741061170/12f09/insights.png 148w,
/static/3c538050d22c947a0bb8400741061170/e4a3f/insights.png 295w,
/static/3c538050d22c947a0bb8400741061170/fcda8/insights.png 590w,
/static/3c538050d22c947a0bb8400741061170/efc66/insights.png 885w,
/static/3c538050d22c947a0bb8400741061170/00d43/insights.png 1000w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;こんな感じでいくつかのメニューがグレーになって選択できなくなります。&lt;/p&gt;
&lt;h3&gt;publicに戻すこともできる&lt;/h3&gt;
&lt;p&gt;Settingsからpublicに戻すこともできます。privateの設定した場所と同じところで戻すことができます。
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/85bbd811fbd6c4a78e111193183395af/3c051/public.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.75675675675676%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABeUlEQVQoz51Si26DMBDj//9v0rTS8uqLtYKSAAmB4PlCX5s6aVokK8md4vP5EqmqxnG3R1NVqE9n+MEB4wRME7xz4R72V2Bu6g3RB/hhQKQvF2ySFFmeI00zrOIY+8MBxhh47zHP8+8AoLY7nN/eUSc5nG4ROVboyN51gg497wIh/Mvy7GRyIxtiR5YKe6Ww3iTI8wJxvEbTqEAmRfp+KaK0hibk3AraNtxlNyTRtKopTxilZcNEmuUoy/LxSB4Qz4QSk/ONVLM9iVmSjCQdjA2eRhMDN0/+s+Sdv/q5DKWuQ8sZVX6sViiK7b0d2R2n+XMYsnqlUXEQl2LHgWRo9mVQGo1GBmDvvllrQ6v9dVDT5F+r8ouyO54VJvwuaZYhXm9wpJfiiyGxIPh19bRtOyoeA6kor7OCyo5Bpfo8LwqdmEz5umkIBcV/KedOJhvuS/yWdyxCefwqDpaDGVgk7NINc5EkqVn6+I5XMQH/2zyOmLkvbx+Yac8X2JhWKD3mnAMAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;publicに戻す時&quot;
        title=&quot;publicに戻す時&quot;
        src=&quot;/static/85bbd811fbd6c4a78e111193183395af/fcda8/public.png&quot;
        srcset=&quot;/static/85bbd811fbd6c4a78e111193183395af/12f09/public.png 148w,
/static/85bbd811fbd6c4a78e111193183395af/e4a3f/public.png 295w,
/static/85bbd811fbd6c4a78e111193183395af/fcda8/public.png 590w,
/static/85bbd811fbd6c4a78e111193183395af/3c051/public.png 760w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】何をしてもうまくいく人のシンプルな習慣]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/07/umakuikusyukan/</link><guid isPermaLink="false">https://honmushi.com/2019/01/07/umakuikusyukan/</guid><pubDate>Mon, 07 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「何をしてもうまくいっているように見える人」で身の回りで思い当たる人はいますか。
そんな人が普段どのように考えているのかが書かれた本です。&lt;/p&gt;
&lt;p&gt;全部当たっているというわけではないと思いますが、逆を取れば「うまくいく」とはこういうことなのだろうと考えることもできます。&lt;/p&gt;
&lt;p&gt;うまくいっている感やうまくいきそう感を自分の中で育むための習慣や考え方が81項目載っています。
すぐにでも取り入れられるような簡単なものもありますので、さくっと読んでさくっと初められます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;何をしてもうまくいく人のシンプルな習慣&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;ジム・ドノヴァン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;弓場隆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;ディスカヴァー・トゥエンティワン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4799320092/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4799320092&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=1c78b7e00f982e12bf0315a5b286168b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4799320092&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4799320092&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&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&gt;こんな人におすすめ&lt;/h2&gt;
&lt;p&gt;習慣化することによって物事をうまくすすめるために取り入れるべき考え方が載っています。&lt;/p&gt;
&lt;p&gt;いくら頑張ってもうまく行っている感や幸福感が得られないような行き詰まりを感じている人にいいかもしれません。言い換えれば、何をしてもうまくいっている感を得られるようになるシンプルな習慣が81個紹介されています。&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;/p&gt;
&lt;p&gt;新しいことを始める時や、時間がかかる取り組みなどを行うときには、ムダにならないか見当違いのことをやっていないかと不安になります。この本を読んでうまくいく状態に自分をコントロールできれば、それらのモチベーションをコントロールできるようになり、続けられるのではないかと思います。&lt;/p&gt;
&lt;p&gt;そのような自分自身のモチベーションコントロールのコツが書かれていますので、参考になればと思います。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4799320092/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4799320092&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=73106ba7cf854e22e31299a3e7bbf5c4&quot;&gt;何をしてもうまくいく人のシンプルな習慣 (ディスカヴァー携書)&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4799320092&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></item><item><title><![CDATA[【おすすめ読書】機械学習入門]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2019/01/07/kikaigakusyunyumon/</link><guid isPermaLink="false">https://honmushi.com/2019/01/07/kikaigakusyunyumon/</guid><pubDate>Mon, 07 Jan 2019 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;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;機械学習入門 ボルツマン機械学習から深層学習まで&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;大関 真之&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;オーム社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4274219984/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274219984&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=204ba92c823dd2e4b5abb62f178a68c9&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4274219984&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4274219984&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;ざっくり紹介&lt;/h2&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;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;/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 target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4274219984/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274219984&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=10a5a203006a97755ba3cf0f4873dfdc&quot;&gt;機械学習入門 ボルツマン機械学習から深層学習まで&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4274219984&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></item><item><title><![CDATA[GoogleSearchConsoleの「クロール済み-インデックス未登録」状態の対処]]></title><description><![CDATA[GoogleSearchConsoleを確認していて気づいたのですが、インデックス項目のカバレッジで「除外」となっているURLが多く存在してました。「エラー」や「警告あり」は0件です。 意図的に「noindex…]]></description><link>https://honmushi.com/2019/01/07/googleindex/</link><guid isPermaLink="false">https://honmushi.com/2019/01/07/googleindex/</guid><pubDate>Mon, 07 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;GoogleSearchConsoleを確認していて気づいたのですが、インデックス項目のカバレッジで「除外」となっているURLが多く存在してました。「エラー」や「警告あり」は0件です。&lt;/p&gt;
&lt;p&gt;意図的に「noindex」の指定をしている箇所が「除外」になっているのであれば問題ないですが、件数的にそうではないようです。このままだと「除外」になっているページがgoogleの検索結果に表示されないので確認してみました。&lt;/p&gt;
&lt;h2&gt;結論を最初に言うと&lt;/h2&gt;
&lt;p&gt;推測になりますが、「インデックスして検索結果に表示するほどでないページ」とGoogleに判断されたため無視されたのではないかと考えられます。
コンテンツを書き直したり追記した後でもう一度クロールしてもらい「除外」状態が解決され、インデックスに登録されることを目指します。&lt;/p&gt;
&lt;p&gt;対応方法としては、文字数を増やす、h2+h3などの見出しをしっかりつける、検索ワードを意識して増やす、といったことが簡単にできます。他にもサイト全体のコンテンツ量が増えれば、一つ一つの記事の価値も高く評価されます。諦めずにコンテンツの量と質を目指すことにしました。&lt;/p&gt;
&lt;p&gt;【追記】上記の対応を行った後、2ヶ月後確認したところ「除外」状態が大きく減っていました。これらの対応の効果がありました。&lt;br&gt;
&lt;a href=&quot;/2019/03/15/googleindex2/&quot;&gt;「クロール済み-インデックス未登録」を解消する&lt;/a&gt;に記載しています。参考にどうぞ。&lt;/p&gt;
&lt;p&gt;以下詳細な調査の内容です。&lt;/p&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot;
    style=&quot;display:block;text-align:center;&quot;
    data-ad-client=&quot;ca-pub-8068277400499023&quot;
    data-ad-slot=&quot;5690578369&quot;
    data-ad-format=&quot;fluid&quot;
    data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;h2&gt;SearchConsoleを確認する&lt;/h2&gt;
&lt;p&gt;「有効」と同じくらい「除外」のページがありました。
除外になっているものは、Googleによってクロールされたが検索結果には出てこない状態です。望ましい状態ではありません。
意図的にnoindexをしている場合も「除外」に入るのですが、今回はnoindexの指定をしていないURLでも「除外」になっていました。&lt;/p&gt;
&lt;p&gt;詳細の箇所には以下の2つの状態が表示されており、URLがどちらの状態なのか確認できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;noindexタグによって除外されました&lt;br&gt;
noindexタグを設定しており意図的に除外している&lt;/li&gt;
&lt;li&gt;クロール済み - インデックス未登録&lt;br&gt;
意図的ではなく除外されてしまった&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;クロール済み - インデックス未登録 の理由を調べる&lt;/h2&gt;
&lt;p&gt;上記の「クロール済み - インデックス未登録」の状態は意図した状態ではないので解決したいです。
インデックス未登録とされた原因を公式のドキュメントで調べてみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://support.google.com/webmasters/answer/9012289#url_not_on_google&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;SeachConsoleヘルプ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ヘルプによると「除外」になる理由は以下でした。山盛りな上にイマイチピンとこないです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;noindexタグを設定している&lt;/li&gt;
&lt;li&gt;ページ削除ツールによってブロックされている&lt;br&gt;
URL削除ツールを使ってURLのindexを削除した場合に該当します。今回私は行っていないので関係なかったです。&lt;/li&gt;
&lt;li&gt;robots.txtによりブロック  &lt;/li&gt;
&lt;li&gt;未承認のリクエストが原因&lt;br&gt;
401エラーが発生した場合です。ベーシック認証などが必要な画面で、クローラが認証を通れなかった場合に発生する状態です。&lt;/li&gt;
&lt;li&gt;クロールエラー&lt;br&gt;
URL取得時に4xxまたは5xxのエラーが発生した場合です。&lt;/li&gt;
&lt;li&gt;クロール済み - index未登録&lt;br&gt;
クロールはされたがインデックスには登録されていません。今後インデックスに登録される可能性がありますが、されない可能性もあります。&lt;/li&gt;
&lt;li&gt;検出 - インデックス未登録&lt;br&gt;
検出はされたが、クロールされていない状態です。サイトが高負荷だったなどの理由で、クロールの再スケジュールを行った場合です。&lt;/li&gt;
&lt;li&gt;代替ページ&lt;br&gt;
他のURLと内容が重複しており、すでに代替となるページがインデックス済みです。&lt;/li&gt;
&lt;li&gt;ページが重複しています&lt;br&gt;
他のURLと内容が重複しており、どのページも正しいページと指定されていない状態です。&lt;/li&gt;
&lt;li&gt;非HTMLページの重複&lt;br&gt;
HTML以外のコンテンツ（PDFファイルなど）が別のページと重複しています。&lt;/li&gt;
&lt;li&gt;ユーザーがマークしたページとは異なるページが正規ページとして選択されました&lt;br&gt;
別のページを正規ページとして判断しています。&lt;/li&gt;
&lt;li&gt;見つかりませんでした&lt;br&gt;
404エラーが返された場合です。&lt;/li&gt;
&lt;li&gt;法的申し立てによりページが削除されました  &lt;/li&gt;
&lt;li&gt;ページにリダイレクトがあります&lt;br&gt;
リダイレクトが発生したため、このURLはインデックスに登録されません。&lt;/li&gt;
&lt;li&gt;クロールのキューに追加されました&lt;br&gt;
数日後にクロールされます。&lt;/li&gt;
&lt;li&gt;ソフト404  &lt;/li&gt;
&lt;li&gt;送信されたURLは削除済みです&lt;br&gt;
以前インデックスに登録されていたが、何らかの理由で削除されたものです。&lt;/li&gt;
&lt;li&gt;送信されたURLがcanonicalとして選択されていません&lt;br&gt;
他のURLと内容が重複していたため、他のページが正しいページとしてindexされています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;対応方法は情報の質を磨くこと&lt;/h2&gt;
&lt;p&gt;「クロール済み - index未登録」というズバリな項目があるのでこれが該当します。しかし、どう対処すればいいのかはわかりませんでした。放っておいたらいい、でもindexするかしないかはわからないという状態です。&lt;/p&gt;
&lt;p&gt;いろいろ調べてみたところ、コンテンツが「indexするほどの情報ではない」と判断されて除外されているようです。ヘルプに書かれていないことなので確証はありませんが、それなら納得です。
対処法としては、記事のリライトや追記などをすることでインデックスしてくれるかもしれません。
または、サイト全体の評価が上がることでインデックスされやすくなります。&lt;/p&gt;
&lt;p&gt;Googleの立場で考えてみれば、検索結果に有意義でない情報は表示したくないはずです。これを信じて自分の記事の情報のクオリティを磨くのが良さそうです。&lt;/p&gt;
&lt;p&gt;「クロール済み - index未登録」になっているコンテンツについて、リライトしたり追記を行ったりしてインデックスされないか見守ろうと思います。&lt;/p&gt;
&lt;h2&gt;追記&lt;/h2&gt;
&lt;p&gt;後日確認したところ、「除外」状態が大きく減っていました。これらの対応の効果のようです。&lt;br&gt;
&lt;a href=&quot;/2019/03/15/googleindex2/&quot;&gt;「クロール済み-インデックス未登録」を解消する&lt;/a&gt;に記載しています。参考にどうぞ。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】ブレイン・プログラミング]]></title><description><![CDATA[夢や目標を叶えるためにやるべきことが書かれています。
大きな特徴としては脳の機能である「RAS…]]></description><link>https://honmushi.com/2018/12/25/brainprograming/</link><guid isPermaLink="false">https://honmushi.com/2018/12/25/brainprograming/</guid><pubDate>Tue, 25 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;夢や目標を叶えるためにやるべきことが書かれています。
大きな特徴としては脳の機能である「RAS」というものに注目した内容となっています。
ざっくり紹介すると以下。&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;IT技術的なプログラミングは全く関係ありません。
人間の脳をコンピュータに例えることができるよ、という考え方から「プログラミング」という言葉が使われています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;自動的に夢がかなっていく ブレイン・プログラミング&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;アラン・ピーズ&lt;br&gt;バーバラ・ピーズ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;市中芳江&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;サンマーク出版&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/476313552X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=476313552X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=c7e2a57958371935fb2654e63a9e8955&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=476313552X&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=476313552X&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;ざっくり紹介&lt;/h2&gt;
&lt;h3&gt;RAS&lt;/h3&gt;
&lt;p&gt;網様体賦活系（RAS）という脳の仕組みがある。入ってくる情報をふるい分けして、何に注意を向けさせるかどれくらい関心を呼び起こすか、それともシャットアウトするかを判断している。&lt;br&gt;
これを意識して書き換える（プログラミング）することによって、夢や目標の実現を目指します。&lt;/p&gt;
&lt;p&gt;大半の情報はRASによって捨てられているので、本当に必要な情報のみを見つけられるようにプログラミングし直します。&lt;/p&gt;
&lt;p&gt;ざっくりとは、何度も目標を目にすること、何をやりたいかを紙に書き出すことなどが方法として挙げられていました。&lt;/p&gt;
&lt;h3&gt;まず何をしたいかを考える&lt;/h3&gt;
&lt;p&gt;目標を立てるときにはどうすればいいかは一旦おいておいて、何をしたいのかのみをまず考えます。
どうすればいいかを考えると萎縮してしまうため、まずが何をしたいのかに集中するといいそうです。&lt;/p&gt;
&lt;p&gt;リストにして手書きで書き出すことにより、やりたいことに関する情報が目に止まりやすくなります。RASの効果によるものです。&lt;/p&gt;
&lt;h3&gt;アフォメーション&lt;/h3&gt;
&lt;p&gt;自己暗示のことです。
ポジティブなことをイメージすることでそこに向かっていけるというものです。&lt;/p&gt;
&lt;p&gt;ネガティブな習慣などは一度書き出すことで向き合います。
その上でポジティブな習慣を書き出して、RASに刷り込ませることで書き換えを行います。&lt;/p&gt;
&lt;p&gt;これを行うことでポジティブな考え方や習慣が自然と見につき、目標達成に近づくことができるという考え方です。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;今までに見たことあるような目標の掲げ方や設定方法でしたが、こんな根拠があるよと示されていた印象です。
そんなに新しい情報があるわけではないですが、著者の経験から書かれているのでその体験を追いかけることができます。様々なことを経験している様子でこんな人もいるのかと驚かされます。エネルギッシュに挑戦し続ける人生はとても面白そうです。&lt;/p&gt;
&lt;p&gt;自分で自分の意識や傾向を書き換えることができれば、自分のやりたいことに向けて集中でき、そのほうがいい結果にたどり着けるでしょう。
目標や夢などを手書きで紙に書き出すことで、見える世界が変わり始めるというのは確かに納得です。&lt;/p&gt;
&lt;p&gt;小学生の時などに教室に張ってあった「今月の目標」みたいなやつは、本当は結構効果的だったんですね。
大人になってなくしたものの1つですね。&lt;/p&gt;
&lt;p&gt;結構内容も盛り沢山なので読み切るのは大変ですが、かいつまんで読むのも効率的です。
例えば、途中で格言みたいなものが挟まれているのでその付近をよむとかおすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/476313552X/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=476313552X&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=c2e7636e8e31bd04e003395ccee0ab48&quot;&gt;自動的に夢がかなっていく ブレイン・プログラミング&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=476313552X&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></item><item><title><![CDATA[【おすすめ読書】ブランド人になれ！]]></title><description><![CDATA[雇われ人ではなく、ブランド人になって活躍するための心構えが5…]]></description><link>https://honmushi.com/2018/12/21/burandojin/</link><guid isPermaLink="false">https://honmushi.com/2018/12/21/burandojin/</guid><pubDate>Fri, 21 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;雇われ人ではなく、ブランド人になって活躍するための心構えが50個書かれています。
会社の自分ではなく、私自身がブランドなんだ！という意識を教えてもらえます。
具体的な「やってみよう」も盛り沢山なので、行動力さえあればすぐにでも初められます。&lt;/p&gt;
&lt;p&gt;とてもためになる本なのでおすすめです。新しいプロジェクトとか始める前に読むことをおすすめします。
今がプロジェクトの途中でもとりあえず読んでおくと良いです。&lt;/p&gt;
&lt;p&gt;コンサルタントとかを目指す人にちょうど良い本です。クライアントとの関わり方であったり目指すものが書いてある印象でした。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;トム・ピーターズのサラリーマン大逆襲作戦〈1〉ブランド人になれ!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;トム・ピーターズ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;仁平 和夫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;CCCメディアハウス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4484003074/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4484003074&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=7db80f3b8a0829e1aa52a4e228882865&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4484003074&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4484003074&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;雇われ人からブランド人になる時代が来たといいます。ブランド人になるためにはどうすればいいのか、自分をどのように売り出せばいいのかということを50の項目で教えられます。&lt;/p&gt;
&lt;h3&gt;世の中を変えたいなら、まず自分から変われ&lt;/h3&gt;
&lt;p&gt;自分をブランドにできるかどうかはすなわち、署名入りのすごいプロジェクトをやり遂げられるかどうかにかかっています。
そのためには、気が散るものを排除してそのプロジェクトに全力を注がなければなりません。一点集中を目指しましょう。&lt;/p&gt;
&lt;p&gt;なかなか難しいことだと言う実感がありますが、そうしないと成功は得られないというのも実感として持っています。
なにかうまい集中の仕方はないものでしょうか。目の前の作業に対する一時的な集中の方法は山ほど情報がありますが、もっと長い目で見たときの集中法というか、そういうものが知りたいです。俗世を離れて山で過ごすとかでしょうか。&lt;/p&gt;
&lt;h3&gt;金が積もれば心が萎える&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;冒険に旅立つのに、たいしてカネはいらない。
志と執念と、心の支えになる何人かの友と、次の一歩を踏み出そうという熱い思いさえあればいい。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;資金を集めすぎると、出資者への恩義や、失うことへの恐怖で思い切ったことができなくなります。
あれもないから、これもないからという言い訳は許されません。
金よりも時間をともにしてくれる同士を探しましょう。&lt;/p&gt;
&lt;h3&gt;お客さんとともに生きる&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;/ul&gt;
&lt;p&gt;お客さまあってのブランド人ということですね。ただ何でも尽くしてあげればいいというわけではなく、どう思われるか、どのような振る舞いをするかしっかり考えて行動することが必要です。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;プロジェクト始まる前とか、区切りのタイミングで読み直したい本の1つです。
自分をブランド化するということについてやるべきことはもちろんですが、こんな大変なこともあるよといった負の部分も書かれています。それを覚悟できているかという問いかけもあり、とても好感が持てます。&lt;/p&gt;
&lt;p&gt;章の中に、自分をリニューアルするためにやるべきことをまとめた「実践・リニューアル50」というリストがあります。かなり具体的な行動が書かれているので、やってみると良さそうです。とても疲れそうですが、効果は間違いないです。&lt;/p&gt;
&lt;p&gt;同じシリーズの本も紹介したいです。あと、本の中に何度か出てくるジョージ・レナードの「達人のサイエンス」も紹介したいです。
これらもとても面白い本ですので。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4484003074/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4484003074&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=5536db22e9b3e2ba115be8375c22e37e&quot;&gt;トム・ピーターズのサラリーマン大逆襲作戦〈1〉ブランド人になれ!&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4484003074&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></item><item><title><![CDATA[【おすすめ読書】自分の時間]]></title><description><![CDATA[時間の使い方に関する自己啓発本です。時短テクニックとかではなく、時間の捉え方というか考え方を教えてくれます。
時間があれば金は稼げるが、金があっても時間は買えない。という考えのもとで、2…]]></description><link>https://honmushi.com/2018/12/20/jibunjikan/</link><guid isPermaLink="false">https://honmushi.com/2018/12/20/jibunjikan/</guid><pubDate>Thu, 20 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;時間の使い方に関する自己啓発本です。時短テクニックとかではなく、時間の捉え方というか考え方を教えてくれます。
時間があれば金は稼げるが、金があっても時間は買えない。という考えのもとで、24時間という決まった時間を有意義に過ごすための考え方を教えてくれます。&lt;/p&gt;
&lt;p&gt;スキマ時間をしっかり使うんだぞということと、常にこれやこれを意識しておくことで知的好奇心や集中する力なんかを身につけられます。という内容です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;自分の時間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;アーノルド・ベネット&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;渡部昇一&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;三笠書房&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4837957641/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4837957641&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=89034a57510eb5cbfe4d23e688a790c4&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4837957641&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4837957641&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;本の特徴&lt;/h2&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;h3&gt;考え方&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;時間があれば金は稼げるが、金があっても時間は買えない。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最近ではお金を払って家事などを代行してもらうことで時間を捻出できるのですが、それでも1日24時間を増やすことはできないということです。&lt;/p&gt;
&lt;p&gt;朝起きるとまっさらな24時間が財布に入っている。この24時間は平等に与えられており、明日・明後日も厳格に24時間が与えられる。前借り等もできません。考え方次第では理想的な民主主義の形とも捉えることができます。&lt;/p&gt;
&lt;h3&gt;内なる1日&lt;/h3&gt;
&lt;p&gt;24時間のうち、一般的に働いている8時間以外の16時間を「内なる1日」として、自分を成長させることに使うべきだそうです。&lt;/p&gt;
&lt;p&gt;例えば、通勤などの数十分は何か1つのことを考えてみます。途中で他のことによそ見、寄り道してしまうが頑張ってもとの思考に戻り考えきります。
この取り組みを行うことで、集中力や思考の支配力・コントロール力が身につき、生活を豊かにできるはずです。&lt;/p&gt;
&lt;h3&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;幸福とは、肉体的・精神的快楽を得ることにあるのではない。理性を豊かにし、自らの生活心情にかなった生き方をすることにある。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;で、「自らの生活心情」とはなにか？となるのですが、これを知ることが大切だといいます。
すなわち、自分を知ること。そのために内省する時間を設けることが必要になります。&lt;/p&gt;
&lt;h3&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;物事の原因と結果を絶えず頭に入れておくこと  
世の中の有為転変の姿を認識すること  
物事が継起するその実相を知ること  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;時短テクニックなどではなく、平等に与えられる24時間をどのよう考えるかというような本です。
小手先のテクニックというわけではないので、すぐに効果が出るような類のものではありません。でも、こういう時間の捉え方から見直すというのは大切なことだとです。&lt;/p&gt;
&lt;p&gt;常日頃から意識しながら時間を過ごしていくことで、同じ時間でも得られることの密度が違ったりします。一度立ち止まって考え方を改めて見るのがいいですね。&lt;/p&gt;
&lt;p&gt;テレビで紹介されているような時短テクニックを使って時間をつくるけど、結局スマホとかで時間を浪費してしまうような経験がある人におすすめです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4837957641/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4837957641&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=54b9131a880604551a825325a02ecc30&quot;&gt;自分の時間 (単行本)&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4837957641&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></item><item><title><![CDATA[【おすすめ読書】「筋トレが最強のソリューションである。」]]></title><description><![CDATA[ある界隈で人気のTestosterone…]]></description><link>https://honmushi.com/2018/12/19/kintoresol/</link><guid isPermaLink="false">https://honmushi.com/2018/12/19/kintoresol/</guid><pubDate>Wed, 19 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ある界隈で人気の&lt;a href=&quot;https://twitter.com/badassceo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Testosterone&lt;/a&gt;さんのつぶやきをまとめた本です。
タイトルの通り、筋トレのことばかり書いてあります。&lt;/p&gt;
&lt;p&gt;トレーニングの内容とかではなく、筋肉を鍛えれば気分がよくなる！なんでもできる気がする！といったようなポジティブな考え方が主な内容です。結構冗談も入っているので見ていて面白いです。&lt;/p&gt;
&lt;p&gt;2018年の流行語にもノミネートされおり筋トレがブームです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;筋トレが最強のソリューションである。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Testosterone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;ユーキャン自由国民社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4426608376/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4426608376&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=7f940b422e85ccf6ac9644391fd23f3f&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4426608376&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4426608376&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;著者の&lt;a href=&quot;https://twitter.com/badassceo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Testosterone&lt;/a&gt; は 「テストステロン」と呼びます。
筋トレなどによって生成される男性ホルモンの 1つらしいです。詳しいことはわからないので気になる方は調べてみてください。
ズバリ、筋トレしてテストステロンを生成することで気分が上がり、いろんな問題を乗り越えられるぞ！ということです。&lt;/p&gt;
&lt;p&gt;世の中の99%の問題は筋トレとプロテインで解決します。というとんでもないことを言ってます。
しかし、最初はもちろんそんなはずないですが、読んでいくうちにキントレこそ最強のソリューションだと思わせるような力があります。&lt;/p&gt;
&lt;h2&gt;ざっくり紹介&lt;/h2&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;p&gt;読み終えると、筋トレやってみようかなと言う気持ちになります。すでに習慣化している人も、こんな効果があったのかと発見があるのではないでしょうか。&lt;/p&gt;
&lt;p&gt;筋トレ続けるためには習慣化するための意志力が必要なので、結構すごいことだと思っています。やった分自分の体が強くなっていくので、成果もわかりやすくていい努力ですよね。体力つけて困ることってないですし得することばかりです。&lt;/p&gt;
&lt;p&gt;最近寒くてサボってましたが、筋トレ始めたくなってしまいました。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4426608376/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4426608376&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=55627b3fee9e861257dd0ba0b65417a4&quot;&gt;筋トレが最強のソリューションである マッチョ社長が教える究極の悩み解決法&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4426608376&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></item><item><title><![CDATA[自分の長所を知る『ストレングス・ファインダー2.0』]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2018/12/19/finder/</link><guid isPermaLink="false">https://honmushi.com/2018/12/19/finder/</guid><pubDate>Wed, 19 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;外国で作られた「ストレングス・ファインダー」という適正テストを受けて、自分の長所や考え方の傾向を客観的に知ることができます。
短所を補うのではなく、長所を伸ばそうという考え方になっており、ビジネスの場でも参考になりそうです。&lt;/p&gt;
&lt;p&gt;本についているシリアルコードを入力することで、ネットで適正テストを受けることができます。自分が強く持っている5つの資質を知ることになります。
本ではそれらの資質についての説明や活かし方などが載っています。結構分厚い本ですが、上記の内容なので実際に目を通すところは結構少ないとも言えます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;さあ、才能(じぶん)に目覚めよう 新版 ストレングス・ファインダー2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;トム・ラス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;古屋 博子&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;日本経済新聞 出版社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4532321433/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4532321433&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ddc6c6811fe816fa9279e00d23e1adae&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4532321433&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4532321433&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;適正テストを受ける&lt;/h2&gt;
&lt;h3&gt;シリアルコードを大切に&lt;/h3&gt;
&lt;p&gt;本についているシリアルコードが必要です。
古本とかで買うと、シリアルコードが利用済みになっていることがあるので注意です。&lt;/p&gt;
&lt;p&gt;該当のページに行くとちょっと不安な翻訳ですが、テストを受けることができます。結果を受け取ったり追加のサービスの情報を受け取るためにメールアドレスなどを登録して会員登録を行う必要があります。&lt;/p&gt;
&lt;p&gt;特に変な勧誘とかのメールが来ることもないので問題ないです。登録しないとテスト受けられないので、ここは我慢して登録しましょう。&lt;/p&gt;
&lt;h3&gt;質問は177個&lt;/h3&gt;
&lt;p&gt;適性テストでは大量の質問に答えていきます。たしか177問くらいあるので結構長いです。ゆっくり落ち着ける場所・時間にやりましょう。
回答が終わるとすぐ結果が表示されます。全部で34種類ある資質のうち、自分が強く持っている5個の資質を挙げられます。これらの特長を知ることで、自分の長所やその活かし方がわかるというものです。&lt;/p&gt;
&lt;h2&gt;テストの結果&lt;/h2&gt;
&lt;p&gt;私もやってみたところ、以下の5つの資質が挙げられました。なんとなく自分でもあっている気がします。
客観的に強みとなる資質を教えてもらえるので、大いに参考になり事故PRのなどでも頼りになります。&lt;/p&gt;
&lt;h3&gt;信念&lt;/h3&gt;
&lt;p&gt;揺るぎない核となる価値観を持っている。&lt;/p&gt;
&lt;h3&gt;包含&lt;/h3&gt;
&lt;p&gt;人々をグループの中に包含したい。&lt;/p&gt;
&lt;h3&gt;分析思考&lt;/h3&gt;
&lt;p&gt;データを好み、客観的で公平なことを求める。&lt;/p&gt;
&lt;h3&gt;学習欲&lt;/h3&gt;
&lt;p&gt;学ぶことが大好きで、結果や内容よりもプロセスに重きを置く。&lt;/p&gt;
&lt;h3&gt;内省&lt;/h3&gt;
&lt;p&gt;考えることが好き。&lt;/p&gt;
&lt;h2&gt;本を読む&lt;/h2&gt;
&lt;p&gt;上記の結果をもって本に戻り、該当する資質の部分を読んでいきます。
正直テストの結果ページにも結構情報があるので満足できるくらいなのですが、せっかくなので本の方も見ておきましょう。&lt;/p&gt;
&lt;h3&gt;5つの項目しか読まないのか&lt;/h3&gt;
&lt;p&gt;自分に当てはまった5つ以外のところは、ほぼ興味ないですかね。
ただ、他の人と一緒に受けたりしてお互いの資質を共有し合ったりすると効果的です。そんなとき手元にあると便利です。
この資質が高い人の行動アイデア、この資質が高い人との付き合い方などが書かれています。興味あるなら読んでみるのもいいです。&lt;/p&gt;
&lt;p&gt;資質の紹介の他にも、ストレングスファインダーについての説明や、長所を伸ばそう！という意気込みが書かれているのでそこは読んでおくと良いです。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;意外な資質が挙げられた場合も新しい発見があっていいですね。
追加の料金を払えば6つ目以降の資質のランキングも見れるそうです。私は別にいらないかなと思っていますが。
資質のワースト5なんかも短所としてみてみると役に立ちそうです。&lt;/p&gt;
&lt;p&gt;研修に取り入れて、チーム全員でやってみて結果を共有するとかどうでしょうか。
お互いの長所や傾向がわかりますし、どんな接し方をすればいいかの参考になることもあります。
チームやグループで一緒に仕事する上で役に立つでしょう。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「職場の問題地図」]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2018/12/19/mondaimap/</link><guid isPermaLink="false">https://honmushi.com/2018/12/19/mondaimap/</guid><pubDate>Wed, 19 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;少し前話題になっていた本です。働き方改革が世の中へ広まり注目されるようになりました。&lt;/p&gt;
&lt;p&gt;どこにでもあるような、仕事や組織がうまく回らない問題の原因や解決方法が書かれています。
道具や技術がいるものはそれほどないので、どのジャンルの職場でも活用できます。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;職場の問題地図&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;沢渡あまね&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;技術評論社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4774183687/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774183687&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=e57c86bed863784b46eb098249f58704&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4774183687&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774183687&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;ざっくり紹介&lt;/h2&gt;
&lt;p&gt;職場でよく起こる問題が紹介されており、その原因と解決方法が紹介されています。
問題が起こる状況の例なども書かれているので、自分の環境に当てはめやすいのです。
文字もそれほど多くなく、イラストが結構あるのでさくっと読めます。&lt;/p&gt;
&lt;p&gt;例えば、手戻りがよく発生するとか属人化しているとか、そういう問題が取り上げられています。
この本が人気ということは、日本中の色んな場所で同じ問題に悩んでいる人がいるということでしょう。
内容的には作業をする部下と管理する上司、両方に対する改善策が半々くらいで載っています。どの立場の人からでも結構参考になる情報があります。&lt;/p&gt;
&lt;p&gt;制度と個人のスキルの2軸で解決しようとするのが悪いやり方で、制度・個人スキルにプロセスと場を足した4軸で解決を考える必要があります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;さっくり読めて分かりやすかったです。このような情報が積極的に取り入れられ、働き方改革がうまく回ってくれるといいですね。&lt;/p&gt;
&lt;p&gt;1つだけ、「職場の問題地図」というタイトルですが、あまり地図にする意味は感じませんでした。最初の見開きで様々な問題を地図にして表現しています。問題が複雑に絡み合っていることを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;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4774183687/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774183687&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=e87c342e0a04f3c90a8aacda99a461ea&quot;&gt;職場の問題地図 ~「で、どこから変える?」残業だらけ・休めない働き方&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774183687&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></item><item><title><![CDATA[【実践技術書】「Vim テクニックバイブル」]]></title><description><![CDATA[私は文字を打つときにはVimを使ってます。
文字書くときだけでなく、プログラミングするときもVimを使います。 今時便利なIDEはいくつもありますが、テキストエディタであるVim…]]></description><link>https://honmushi.com/2018/12/18/vimtec/</link><guid isPermaLink="false">https://honmushi.com/2018/12/18/vimtec/</guid><pubDate>Tue, 18 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;私は文字を打つときにはVimを使ってます。
文字書くときだけでなく、プログラミングするときもVimを使います。&lt;/p&gt;
&lt;p&gt;今時便利なIDEはいくつもありますが、テキストエディタであるVimが一番のお気に入りです。
なれるまではかなり不便ですが、なれるとやめられなくなります。拡張性も高くいろんな環境で使えるのでとても頼れるやつです。&lt;/p&gt;
&lt;p&gt;久しぶりにVimのテクニック本を読みました。便利なプラグインの情報が山盛りです。
Uniteとかの使い方や概念が書かれているので、その辺のプラグインをガンガン使いたい人におすすめです。
ただし、結構前の本なので古い情報もあります。&lt;/p&gt;
&lt;p&gt;サーバの管理をやるときにも設定ファイル触るのにテキストエディタとして Vim を使うことがあります。Dockerとかの環境構築も増えてくるのでぜひVim使ってほしいです。
別に他の方法もあるのですが、お客様管理のインフラだと勝手にソフトをインストールすると問題になるので気をつけたほうが良いです。
気づかれることのほうが少ないですが、何か合った時に不要に責任を取らないためにも重要です。
VimとかシェルとかCUIに慣れておくことは結構大切だと思っています。&lt;/p&gt;
&lt;p&gt;今回は本の中でVimの基本的なコマンドで使えるかもと思ったものを紹介します。
プラグインに関しての内容のほうが充実しているので、Uniteを始めとする便利なプラグインについては機会があれば紹介します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Vimテクニックバイブル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Vimサポーターズ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;技術評論社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4774147958/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774147958&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=cbb1aa4be492886e3044bbea38eab8d2&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4774147958&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774147958&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;なぜこの本を読んだのか&lt;/h2&gt;
&lt;p&gt;自宅にあったものを久しぶりに見つけて読みました。もう一冊、「実践Vim」という本もあるはずですが、引っ越しの片付け中なので見つかっていません。
見つけたらまた読みたいです。&lt;/p&gt;
&lt;p&gt;この手のよく使うソフトのテクニック本は、なかなか読む機会が無いでしょうか。
しかし、定期的に読み返すと新しい発見があり、作業の効率化につながります。&lt;/p&gt;
&lt;p&gt;すぐにでも使えそうなテクニックもあったので、また思い出せるように記事にしました。&lt;/p&gt;
&lt;h2&gt;本の概要&lt;/h2&gt;
&lt;p&gt;基本的にはVimをある程度使ったことのある人向けに、より便利になるプラグインやテクニックを150のTipsとして紹介しています。
Vimの基本的な入門書ではない印象です。チュートリアルくらいは終わらせてちょっと使い込んだくらいで読むことをおすすめします。&lt;/p&gt;
&lt;p&gt;プラグインのインストール方法や使い方・おすすめの設定なども載っています。プラグインの作者による解説等も載っています。&lt;/p&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;ジャンルごとに分けて書いてあり、やりたいことや気になるところから読み始められます。
巻末には索引もあるので、気になるプラグインの情報などを調べることができます。&lt;/p&gt;
&lt;p&gt;コマンドなどは詳細に書かれており、実際にやってみるのには苦労しないです。ただ画面のスクリーンショットなどは全く無いのでイメージはしにくいです。プラグインの見た目の情報とかは一切ないです、カラースキームも載ってないです。&lt;/p&gt;
&lt;h2&gt;おすすめのVimテクニック&lt;/h2&gt;
&lt;p&gt;ここではVimの基本機能でできるテクニックのみ記載してます。プラグイン使うやつは別の機会に紹介します。&lt;/p&gt;
&lt;h3&gt;autocmdによるテンプレートファイルの読み込み&lt;/h3&gt;
&lt;p&gt;以下のような記述をvimrcに書いておけば、vimで新しいファイルを作成した際に拡張子で判断され、テンプレートファイルが読み込まれます。私はマークダウンファイルのfrontmatter部分をテンプレートにしました。&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;augroup templateload
    autocmd!
    autocmd BufNewFile *.md 0r ~/.vim/template/template.md
    autocmd BufNewFile *.html 0r ~/.vim/template/template.html
augroup END&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;最後に開いていたファイルを開く&lt;/h3&gt;
&lt;p&gt;Vimを起動したあと、&lt;code&gt;CTRL-o&lt;/code&gt; を実行することで最後に開いたファイルへジャンプできます。
もともと&lt;code&gt;CTRL-o&lt;/code&gt;は古いカーソル位置へ戻れるコマンドですが、それを使えば前回最後に開いたファイルへジャンプできます。&lt;/p&gt;
&lt;p&gt;他の方法もありそうですが、とりあえずお手軽です。&lt;/p&gt;
&lt;h3&gt;複数のVimでヤンクやレジスタ・コマンド履歴を共有する&lt;/h3&gt;
&lt;p&gt;Vimを複数立ち上げているときに使えるテクニックです。私はtmuxを使っていくつもVimを立ち上げたりするのでちょっと便利そうと思いました。&lt;/p&gt;
&lt;p&gt;Vimエディタ終了時、.viminfoファイルにコマンドや検索の履歴・レジスタなどの情報を格納するそうです。
これをコマンドで起動中に出力して、別のVimからコマンドを使って読み込むことで、これらの情報を共有できます。&lt;/p&gt;
&lt;p&gt;.viminfoの書き出し。&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;:wv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;.viminfoの読み込み。&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;:rv!&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;読み込んだ側のvimで、書き出しを行ったvimの履歴などが利用できます。&lt;/p&gt;
&lt;h3&gt;文字数を数える&lt;/h3&gt;
&lt;p&gt;Linuxのコマンド&lt;code&gt;wc -m&lt;/code&gt;を使ったほうがスッキリですが、Vimで編集しながらやる場合のテクニックです。&lt;/p&gt;
&lt;p&gt;標準コマンド&lt;code&gt;g Ctrl-g&lt;/code&gt;で文字数や単語数を確認できます。
ただし、改行文字を含んだ文字数なので、ファイルを作成したOSをによって結果が異なるようです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:%s/.//gn&lt;/code&gt;
とすると、純粋な文字数がカウントできます。覚えておくと良さそうです。&lt;/p&gt;
&lt;h3&gt;マクロを利用した編集処理&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;qa&lt;/code&gt;で操作の記録を開始してレジスタaに記録、 &lt;code&gt;q&lt;/code&gt;で操作の記録を終了、&lt;code&gt;@a&lt;/code&gt;でレジスタaの中身を実行となります。
マクロの実行は&lt;code&gt;5@a&lt;/code&gt;の形式で回数を指定できるので、それも組み合わせると便利です。&lt;/p&gt;
&lt;p&gt;実際に操作を行わなくても、コマンドの内容をテキストで入力してレジスタに保存することでも操作を登録できます。
&lt;code&gt;^&quot;byy&quot;bp&lt;/code&gt;この文字列をヤンクすればマクロとして実行できます。
（bレジスタにヤンクしてbレジスタの中身をペーストするコマンド）&lt;/p&gt;
&lt;p&gt;マクロがうまく行かなかったときにコマンドを編集して再実行したり、よく使うものをメモしておいたりできそうです。 コマンドをテキスト化できると、複数人での指差し確認にも使えますね。&lt;/p&gt;
&lt;p&gt;ちなみに、ヤンクの際に&lt;code&gt;&quot;Ayy&lt;/code&gt;と大文字にすると、aレジスタの末尾へ追記の操作となります。上書きではなく追記なので、コマンドを継ぎ足していけます。&lt;/p&gt;
&lt;h3&gt;ユーザー定義コマンド&lt;/h3&gt;
&lt;p&gt;vimrcに以下のような形式でユーザー定義のコマンドを設定できます。
コマンド名はアルファベット大文字で始まる必要があります。&lt;/p&gt;
&lt;p&gt;さっきの文字数カウントのコマンドを登録してみます。&lt;code&gt;:CountChar&lt;/code&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;:command! [属性] {コマンド名} {実行したい処理}
:command! CountChar :%s/.//gn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;他にもファンクションを定義してそれを実行させたり、範囲指定を可能にしたり、引数を取ったりもできます。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Vimは奥が深いです。
この本にもまだまだいろんなことが書かれています。気になる人は一度手にとって見てほしいです。&lt;/p&gt;
&lt;p&gt;初めてVimを使ったときは、サーバにリモートアクセスして設定変更したときだった記憶がありますが、かなり混乱した気がします。
今となってはいろいろ自由に触れるので重宝しています。何よりもノーマルモードとインサートモードという状態を使い分けるという発想が好きです。ホームポジションを意識することでキーボードのみで不自由なく様々なことができ快適です。&lt;/p&gt;
&lt;p&gt;個人的には、キー数が少なくてコンパクトなキーボードと組み合わせて使うのがおすすめです。&lt;/p&gt;
&lt;p&gt;他にもプラグインを開発したりとか結構プログラム要素もあるのでとても拡張性もあります。カンファレンスが開かれるくらいコミュニティも存在していますので、興味があればぜひ使ってみてほしいです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4774147958/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774147958&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=a9087c4e9ac68606339ded42b0fdbf7d&quot;&gt;Vimテクニックバイブル　～作業効率をカイゼンする150の技&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4774147958&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></item><item><title><![CDATA[【おすすめ読書】「やめる勇気」]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2018/12/17/yameruyuki/</link><guid isPermaLink="false">https://honmushi.com/2018/12/17/yameruyuki/</guid><pubDate>Mon, 17 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;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;やめる勇気&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;見波 利幸&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;朝日新聞出版&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4023315885/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4023315885&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=17d1b3b8d4a7488fb855e95c795e3614&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4023315885&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4023315885&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;なぜ読んだか&lt;/h2&gt;
&lt;p&gt;タイトルが面白そうだったので手に取りました。あえて逆のことをする、という天邪鬼な人のことが結構好きです。迷惑だなあと感じることのほうが多いですが、多数の人とは逆の方に張って来る人は面白いと思っています。&lt;/p&gt;
&lt;p&gt;あえて、ここで勇気をだしてやめる！みたいな雰囲気を感じたので読んでみました。&lt;/p&gt;
&lt;h2&gt;本の概要&lt;/h2&gt;
&lt;p&gt;結論はストレスに対してどのように対処していくかということです。
社会では当たり前として認識されている、ストレスフルな行いやマナーなどに対して、本当に自分にとって必要か改めて考えよう。といったことが書かれています。&lt;/p&gt;
&lt;p&gt;自分にとって必要でないことならやめてしまい、他のことにエネルギーを使いましょう。その考えるきっかけや後押しをしてくれます。&lt;/p&gt;
&lt;h2&gt;本の特徴&lt;/h2&gt;
&lt;p&gt;それほど特徴的なことはありませんが、わかりやすいです。難しい言葉とかは全然なく、この手のストレスとの付き合い方ジャンルの入門によいです。簡単に読めるのでちょっと空いた時間にちょうどいいです。&lt;/p&gt;
&lt;h2&gt;印象に残ったこと&lt;/h2&gt;
&lt;h3&gt;レジリエンスを高める&lt;/h3&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;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;些細なことでも何かの役に立つのではないかとアンテナが敏感になります。同じことを経験しても、経験値が10でも100にもなります。&lt;/p&gt;
&lt;h3&gt;ストレスが発生したら&lt;/h3&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;p&gt;内容は3章まであるのですが、最初の1章に作者がおすすめのやめるべきこと21選が書かれてます。「二次会に行くのをやめる」とか、「成功者の真似をやめる」とかです。&lt;/p&gt;
&lt;p&gt;とりあえず、この21選を自分に取って必要なことなのか見直してみるのがいいです。当たり前のようにやっていることばかりなので勇気が入りますが、やめてみると大したことなかったりします。やめる代わりにこういうことをしたらどうか、ということも書いてあるので親切でした。&lt;/p&gt;
&lt;p&gt;実際にやめたら何を初めたいかということを思い描いておくと、やめるモチベーションになります。
嫌だからやめると言うよりは、 これがやりたいから時間確保のためにこれはやめる。ちょうど好きじゃなかったしラッキーと言う考えです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4023315885/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4023315885&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=8410302a80c3bd247ceb5b944607ad19&quot;&gt;やめる勇気 「やらねば! 」をミニマムにして心を強くする21の習慣&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4023315885&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></item><item><title><![CDATA[Gatsbyの記事一覧の抜粋を修正]]></title><description><![CDATA[前から気になったまま放置していたもので、Gatsby を用いたブログ記事一覧ページにおける記事の抜粋がうまく表示されていませんでした。 デフォルトではマークダウンのコンテンツの最初140文字？くらいが抜粋として表示されるようです。しかし、…]]></description><link>https://honmushi.com/2018/12/14/excerpt/</link><guid isPermaLink="false">https://honmushi.com/2018/12/14/excerpt/</guid><pubDate>Fri, 14 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前から気になったまま放置していたもので、Gatsby を用いたブログ記事一覧ページにおける記事の抜粋がうまく表示されていませんでした。&lt;/p&gt;
&lt;p&gt;デフォルトではマークダウンのコンテンツの最初140文字？くらいが抜粋として表示されるようです。しかし、1文字も表示されず、いきなり「&lt;code&gt;・・・&lt;/code&gt;」になっていました。&lt;/p&gt;
&lt;p&gt;今回ここを修正しました。Gatsbyのプラグインであるgatsby-transformer-remarkの使用方法の設定でした。
非ラテン文字を扱う場合はクエリにパラメータが必要だったという、簡単な原因でした。同じ現象にあっている人がいれば参考にしてください。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2e16c7a9f3958a591d02805d4016d9ba/31198/image01.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 64.1891891891892%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA+UlEQVQ4y6VTy26DMBD0/38Tp+ZAouYAhxgaOMQ0TkooUQyGioc9MS2pIqSWxl1pNfIexruzs4TSDRzHwXK1QhAEGEJrbZ0kSRJ4ngdKA3B++Ca0DTIt9EpBGUI1oMl+RDXWZzt8tINZwrfjEdRox3Y7LBZPeF6vwYwMYRgijmO4rmuk4GCMIT+fZyUhl0Lg9J5BGOQHjlOWoShL5HkOIQTSNEVVVZBSGqxnuyS9Vg+P/OtS7tmV0l8LGVPf4Z9tM/3x9rb24X7/Ct/38bLdIooiDL5s29baj0R+1LiUBWRdo2kadF336TnbLon6cSl210KGqf5zu9O8Aj9V/IOOc530AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;抜粋がうまく表示されていない画像&quot;
        title=&quot;抜粋がうまく表示されていない画像&quot;
        src=&quot;/static/2e16c7a9f3958a591d02805d4016d9ba/fcda8/image01.png&quot;
        srcset=&quot;/static/2e16c7a9f3958a591d02805d4016d9ba/12f09/image01.png 148w,
/static/2e16c7a9f3958a591d02805d4016d9ba/e4a3f/image01.png 295w,
/static/2e16c7a9f3958a591d02805d4016d9ba/fcda8/image01.png 590w,
/static/2e16c7a9f3958a591d02805d4016d9ba/31198/image01.png 694w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;抜粋はgraphQLで取得している&lt;/h2&gt;
&lt;p&gt;抜粋の部分は記事一覧ページにてgraphQlで取得しています。
「excerpt」が該当します。ここで特に設定等なければ冒頭の140文字が取得できるはずですが、今回は取得できていない場合がありました。&lt;/p&gt;
&lt;p&gt;この抜粋部分はGatsbyのプラグインの「gatsby-transformer-remark」が生成しているようです。mdファイルの中から最初の方の文字を抜粋としてフィールドにしている様子です。&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;  query {
    allMarkdownRemark(
		limit: 20 
	) {
      edges {
        node {
          frontmatter {
            title
            date(formatString: &amp;quot;YYYY/MM/DD&amp;quot;)
          }
		  excerpt
        }
      }
    }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;修正&lt;/h2&gt;
&lt;p&gt;以下のページのトラブルシューティングに記載がありました。&lt;br&gt;
&lt;a href=&quot;https://www.gatsbyjs.org/packages/gatsby-transformer-remark/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Gatsbyのプラグインのドキュメント&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gatsbyのプラグインである、gatsby-transformer-remarkを利用する際の設定です。
非ラテン文字を扱う場合はクエリにオプションを設定すると解決できます。&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;  query {
    allMarkdownRemark(
		limit: 20 
	) {
      edges {
        node {
          frontmatter {
            title
            date(formatString: &amp;quot;YYYY/MM/DD&amp;quot;)
          }
		  excerpt(truncate: true)
        }
      }
    }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下のようにいい感じに治りました。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6a1ab503e4dbeca056847490d2086191/295bd/image02.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 88.51351351351352%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB40lEQVQ4y51U23LaUAz0//9R+thM2nwA13gCBtsYfMH4hi+At1qZeBwmJS1nRnMkoRGrPSsbT08/8PP5Gb9eXlCWFXjatn3YjNFojNlsBtM00ZxOfcNHjzEM2OhyuYjJ3fuXLv+vCP8XwbcNl5YFe73GdDrB79dXrFYrLBYLrCX3Np9jNB4jikI4jiMcl3eb6sjebosgDGDbNubSIAxDuK6L7XarNxsXRQHfD/pHu4feiNME+3iPJE1RVRWaplHezuczTvJIzEVRhDzP9bckkfq91Ccp8ixT/3A44Hg8dgiJavH+LkhsLJdLHS0IuxEZu64DS2hhzJtqIC2s32w2mucUnEwbctQgCJAKQo4W+D7iONaYRURUFDkyQUMkjOkfpTaK9lrHHCfRhqU4HIfjtV/ygk+k3+q0vakzHpHGXdlwLJKeppmO+p007pmObJpvmEymSjRJ52s/ehRhUZWoT02/apQGUfImr7xp1ZXruu7ydV1rjsZ6xoqQm+LK0+92OxUvUXJTXLeTBI3yoBooI8taSZ0vwvdULrYtJhLyg6tsWMwCchkG3BhHOQ2vWuw2x4HneeJHuj2RiJl8c5tC2TLeWZZ3DXvJ3Hxdhnab+4iHX6j+UT60pMVDX22Q//Qnf4//AFWNcsUt334ZAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;抜粋が正常に表示されるようになった画像&quot;
        title=&quot;抜粋が正常に表示されるようになった画像&quot;
        src=&quot;/static/6a1ab503e4dbeca056847490d2086191/fcda8/image02.png&quot;
        srcset=&quot;/static/6a1ab503e4dbeca056847490d2086191/12f09/image02.png 148w,
/static/6a1ab503e4dbeca056847490d2086191/e4a3f/image02.png 295w,
/static/6a1ab503e4dbeca056847490d2086191/fcda8/image02.png 590w,
/static/6a1ab503e4dbeca056847490d2086191/295bd/image02.png 667w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;タグごとの一覧画面などでも同様の記述になっているのでまとめて修正しておきました。&lt;/p&gt;
&lt;p&gt;他にも言語の違いなどによる不具合はあるのでしょうか。気づいたら修正して情報を共有していきます。頑張ってGatsbyのこと勉強します！&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「自分の仕事をつくる」]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2018/12/13/jibunnoshigoto/</link><guid isPermaLink="false">https://honmushi.com/2018/12/13/jibunnoshigoto/</guid><pubDate>Thu, 13 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;働き方研究家の著者による、ワークスタイルの探検報告です。
仕事や働き方に対する固定化された概念が揺さぶられます。&lt;/p&gt;
&lt;p&gt;イマイチ自分のやっていることに意味が見いだせないという方や、このまま続けていていいのか漠然とした不安を持っている人におすすめしたいです。働くことのモチベーションや会社にもやもやすることがある人にもおすすめです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;自分の仕事をつくる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;西村 佳哲&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;ちくま文庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4480425578/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4480425578&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=50ab23c16f8f95004cb26b690b7fdb20&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4480425578&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4480425578&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;なぜ読んだか&lt;/h2&gt;
&lt;p&gt;昔会社で支給されて読んだことがありました。「主体的に仕事をする」とはどういうことなのかということで読んだのだと記憶しています。
あれから結構時間もたったので、もう一度読み直してみようと思いました。&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&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;p&gt;色んなジャンルの人に対して行うインタビューの形式です。都度、似た事例や参考になりそうな情報や逸話などを紹介しており、読みやすくなっています。&lt;/p&gt;
&lt;p&gt;文字は少なめで、数値とか用語とか難しいものはあまりないのでさくっと読めます。&lt;/p&gt;
&lt;h2&gt;印象に残ったこと&lt;/h2&gt;
&lt;h3&gt;仕事を「自分の仕事」にする&lt;/h3&gt;
&lt;p&gt;やっぱりクリエイティブな人はどこか違うんだなーという感想もあります。ただ、いつかどこかで誰でもが感じたことがあるような疑問などに突き動かされているのかもな、という印象も同時に抱きました。&lt;/p&gt;
&lt;p&gt;それを突き詰めて考えるか、それともある程度で蓋をして周りに合わせるか、といった違いの様に感じました。
自分がしっくりこないことを疑問に感じること。素通りせずに意識し続けること。なかなか普通の人にはできないことだなーと学びました。&lt;/p&gt;
&lt;h3&gt;主体は働く人&lt;/h3&gt;
&lt;p&gt;働くに当たって主体は「働く人」なはずなのに、仕事が主体になっており本人はまるで他人事の様な構造になっています。言われたことをやるとか、これでいいのだろうかと疑問を持ちながらこなすなどの状態です。&lt;/p&gt;
&lt;p&gt;自分を大切にする、自分らしさを模索し続けることが大切なようです。簡単そうに言いましたが、難しいです。&lt;/p&gt;
&lt;h3&gt;要素還元&lt;/h3&gt;
&lt;p&gt;「要素還元」という方法が紹介されていました。
魅力的な物事に共通する法則を見出そうとするとき、好きだけど理由がわからないものをいくつか並べてみるのだそうです。&lt;/p&gt;
&lt;p&gt;自分が心地よく感じ安心できる場所はどんな場所・物なのか、価値観のゼロ地点を探します。
このような判断をできる判断力をもってないと、他人が使って気持ちいいものも生み出すことはできません。
情報に埋もれる現代においてなくしてしまった能力です。&lt;/p&gt;
&lt;h3&gt;豊かさの実感が満たされない理由&lt;/h3&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;h2&gt;まとめ&lt;/h2&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;消耗している人も今はそうでない人も、今一度色んな仕事のあり方に触れて仕事との向き合いかたを考えてみるのはどうでしょうか。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4480425578/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4480425578&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=71c1308c23ae81a712e4bc55bb355738&quot;&gt;自分の仕事をつくる (ちくま文庫)&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4480425578&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></item><item><title><![CDATA[引っ越ししました]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2018/12/11/move/</link><guid isPermaLink="false">https://honmushi.com/2018/12/11/move/</guid><pubDate>Tue, 11 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;引っ越しました。&lt;br&gt;
これまで京都に住んでいましたが、会社を退職したこともあって地元の石川県に引っ越しをしました。&lt;/p&gt;
&lt;h2&gt;石川県 野々市市&lt;/h2&gt;
&lt;p&gt;石川県でも住みよさ人気が高いらしい野々市市「&lt;code&gt;ののいちし&lt;/code&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;引き続きWEBのことや本のことを書いていきますが、機会があれば野々市市の素敵なところや情報を伝えられたらいいなと考えています。&lt;/p&gt;
&lt;p&gt;野々市市でのプログラミングやエンジニアの情報。WEB関連の情報なんかもあれば紹介したいですし、何かイベント等もできたらいいなと考えています。&lt;/p&gt;
&lt;p&gt;とりあえずは野々市市に関連するアプリとかを作りたいです。&lt;/p&gt;
&lt;p&gt;「のってぃ」というコミュニティバスが100円で乗れるのですが、乗り継ぎを調べるのがちょっと不便なんです。
近所の大学でコミュニティに関わるシステムの開発をやっているようなので興味があります。応援したいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「測って描く旅」]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2018/11/30/hakarutabi/</link><guid isPermaLink="false">https://honmushi.com/2018/11/30/hakarutabi/</guid><pubDate>Fri, 30 Nov 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;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;測って描く旅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;浦 一也&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;彰国社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4395021034/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4395021034&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ead51c69260261fcdb98d80ee216a17b&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4395021034&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4395021034&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&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&gt;測って描く&lt;/h2&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;p&gt;自分の体の色んな所の長さを測っておいて、マイスケールとして使うことも推奨されています。&lt;/p&gt;
&lt;p&gt;指や手、肘までの長さや1歩の歩幅など、様々なものです。「1m」といった企画よりも、「1歩」のほうが自分にとって意味のある数字になり、より空間を把握しやすいです。部屋の間取りや家具などは、人間が使いやすいように設計されているべきなので、こういった尺度が大切になります。&lt;/p&gt;
&lt;p&gt;ヒューマンスケール（人間的尺度）という、人間の身体的な特徴であったり運動の大きさなどからわかる尺度を用いたものが、やはり使っていて気持ちいいようです。&lt;/p&gt;
&lt;p&gt;現代ではいろんな尺度が混ざってしまって、純粋なものはほぼなくなってしまっているようですが、測定を繰り返す中で見つかっていきます。人間の生活似合ったものを作るのであれば、このようなヒューマンスケールが大切であり、ただ便利なことを突き詰めればいいというわけではないそうです。&lt;/p&gt;
&lt;p&gt;このようなスケール感を身につけるのは難しそうですが、自分のお気に入りのもの、机とかコップとかはどんな大きさになっているのか測ってみて、他のものと比較してみたいなと思いました。&lt;/p&gt;
&lt;h2&gt;WEBでも測る&lt;/h2&gt;
&lt;p&gt;旅行先で測るという本でしたが、訪れたWEBサイトを測るという応用もできそうです。ブラウザのアドオンなどで様々な要素を測ったりできるので、それらのツールを利用して訪れたサイトを測ってみるのは面白そうです。&lt;/p&gt;
&lt;p&gt;デザインの勉強として、要素を真似することは結構重要なことなので、同じようにやってみるといいです。今度気になったサイトの様々な部分を測って見たいです。デザインもそうですが、UIなどについても勉強になりそうです。&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4395021034/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4395021034&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=58f3d073719e8724bbdc294193302b89&quot;&gt;測って描く旅&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4395021034&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></item><item><title><![CDATA[Amazonのアフィリエイトのリンクを設置する]]></title><description><![CDATA[以前の記事でAmazonアソシエイトの審査に合格した旨を記載しました。 Amazon アソシエイトの審査に合格しました せっかくなのでアマゾンへのリンクを生成してサイト内に設置します。
いくつか記録していた読書感想の記事内に、関連書籍のリンクを設置します。 Gatsby…]]></description><link>https://honmushi.com/2018/11/27/amazonlink/</link><guid isPermaLink="false">https://honmushi.com/2018/11/27/amazonlink/</guid><pubDate>Tue, 27 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前の記事でAmazonアソシエイトの審査に合格した旨を記載しました。&lt;br&gt;
&lt;a href=&quot;/2018/11/21/amazon2/&quot;&gt;Amazon アソシエイトの審査に合格しました&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;せっかくなのでアマゾンへのリンクを生成してサイト内に設置します。
いくつか記録していた読書感想の記事内に、関連書籍のリンクを設置します。&lt;/p&gt;
&lt;p&gt;Gatsbyを用いてブログを生成してますので、記事のマークダウンファイルへ直接貼り付けられるようにしたいと考えています。&lt;/p&gt;
&lt;h2&gt;やること&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;アマゾンアソシエイトの管理画面でリンクを生成
    商品を検索
    商品を決定
    リンクを作成

記事マークダウン内にリンク挿入&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とりあえず以下の記事でやってみます。&lt;br&gt;
&lt;a href=&quot;/2018/11/21/principles/&quot;&gt;【おすすめ読書】「プリンシプル オブ プログラミング」&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;アマゾンアソシエイトの管理画面でリンクを生成&lt;/h3&gt;
&lt;h4&gt;商品を検索&lt;/h4&gt;
&lt;p&gt;「商品リンク」のメニューを選び検索窓で商品の名前を検索します。
ここでは「プリンシプルオブプログラミング」と入力したところ出てきました。&lt;/p&gt;
&lt;h4&gt;商品を決定&lt;/h4&gt;
&lt;p&gt;該当する商品を選択します。一旦Kindle版の書籍を選択しました。&lt;/p&gt;
&lt;h4&gt;リンクを作成&lt;/h4&gt;
&lt;p&gt;リンクの形式を選択できます。それぞれ実際に触ってみればわかりますが、テキスト/画像のみ・テキストと画像など選択できます。&lt;/p&gt;
&lt;p&gt;選択して下部に出力されるHTMLをコピーして、自分のブログに貼り付ければ完了です。&lt;/p&gt;
&lt;h3&gt;記事内に挿入&lt;/h3&gt;
&lt;p&gt;生成されたHTMLをマークダウンの中に貼り付けてみました。特に問題なく表示されています。&lt;br&gt;
紹介者のIDなど大切な情報もしっかりURLについたままですので、この設置方法で問題なさそうです。&lt;/p&gt;
&lt;p&gt;一旦画像のみの形式で設置してます。もっといい感じの設置方法がありそうですが、HTMLの変更等やっても問題ないのでしょうか。
あまりHTMLを勝手に変更しすぎると、Amazonから怒られたりするだろうか。疑問なのでちょっと調べてみます。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Amazonアソシエイトを利用して簡単にアフィリエイトのリンクが生成できました。&lt;br&gt;
Gatsbyで作っている静的ブログでも、そのまま貼り付けるだけでリンクが設置できました。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Gatsby+Firebaseを利用したブログの作り方]]></title><description><![CDATA[Gatsbyで作成したブログをFirebaseで公開するまでの手順です。最初は躓くこともありますがなれると簡単です。お手軽にブログを公開できます。日頃から書き溜めているであろうマークダウンファイルが息を吹き返します。 Firebase…]]></description><link>https://honmushi.com/2018/11/26/createblog/</link><guid isPermaLink="false">https://honmushi.com/2018/11/26/createblog/</guid><pubDate>Mon, 26 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Gatsbyで作成したブログをFirebaseで公開するまでの手順です。最初は躓くこともありますがなれると簡単です。お手軽にブログを公開できます。日頃から書き溜めているであろうマークダウンファイルが息を吹き返します。&lt;/p&gt;
&lt;p&gt;Firebaseに無料で使える枠があるので、独自ドメインを使わない限りは無料でできます。でも、ドメインはあったほうが良いです。1年で1000円位支払えば十分それらしいものが取得できます。&lt;/p&gt;
&lt;p&gt;Gatsbyでローカルにコンテンツを生成します。SPAのブログができます。
要素は静的なHTMLとjsなので、ホスティングするのは静的な要素のみです。データベース等は不要です。
ですので、フォームとかは設置できません。広告とかは設置できます。&lt;/p&gt;
&lt;p&gt;Firebaseのホスティングで上記を満たすので、そこにコンテンツをアップロードして公開します。
ドメインの設定方法は後日追記します。&lt;/p&gt;
&lt;h2&gt;やること&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;Gatsbyを使ってサイトをローカルに生成する
    Gastbyのインストール
    Gatsbyでブログテンプレートを使ってプロジェクトを作成
    開発サーバー開始
    ローカルで確認
    設定を変更
    コンテンツを作成
    ビルド

生成したサイトをFirebaseで公開する
    Firebaseでプロジェクトを作成
    Hostingの設定
    Firebaseにデプロイ

Firebaseに独自ドメインを連携
    独自ドメインを取得
    Firebaseの管理画面からドメイン接続を行う
    ドメインにTXTレコードを追加
    Firebaseからドメイン所有権の確認
    ドメインに対応するIPの設定
    証明書の反映&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ざっくりこんな流れです。必要なプラグイン等は都度インストールしましょう。&lt;br&gt;
以下に詳細な手順を記載します。&lt;/p&gt;
&lt;h3&gt;Gatsbyを使ってサイトをローカルに生成する&lt;/h3&gt;
&lt;p&gt;ローカル上でサイトを生成します。&lt;/p&gt;
&lt;h4&gt;Gastbyのインストール&lt;/h4&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 -g gatsby&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;事前にnode.jsとnpmはインストールしておきましょう。&lt;/p&gt;
&lt;h4&gt;Gatsbyでブログテンプレートを使ってプロジェクトを作成&lt;/h4&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;gatsby new sub_blog https://github.com/gatsbyjs/gatsby-starter-blog&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;sub_blog の部分は好きなディレクトリ名を指定、そこに必要なファイルやスクリプトが生成されます。&lt;br&gt;
後半のURLはスターターというテンプレートみたいなものを指定しています。いくつか公開されているものがあるので以下の中から好きなのを探せば良いです。&lt;br&gt;
&lt;a href=&quot;https://www.gatsbyjs.org/starters/?v=2&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Gatsbyのスターター&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;開発サーバー開始&lt;/h4&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;cd sub_blog
gatsby develop&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;ローカルで確認&lt;/h4&gt;
&lt;p&gt;ブラウザで「localhost:8000」にアクセスすると、サイトが表示されます。&lt;/p&gt;
&lt;h4&gt;設定を変更&lt;/h4&gt;
&lt;p&gt;gatsby-config.jsの中身を修正します。&lt;/p&gt;
&lt;p&gt;とりあえずデフォルトでも動きますが、サイトのtitleとか変えておきましょう。
GoogleAnaliticsとかtwitterアカウントとか用意してあれば、設定しておくのが良いです。&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;    {
      resolve: `gatsby-plugin-google-analytics`    ,
      options: {
       //trackingId: `ADD YOUR TRACKING ID HERE`,
      },
    },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;コンテンツを作成&lt;/h4&gt;
&lt;p&gt;src/pages 以下に記事を作成します。デフォルトでは記事ごとにディレクトリを作って書いている様子です。&lt;/p&gt;
&lt;p&gt;固定のページ作るときは.jsでファイルを作成。記事書く際は.mdでファイルを作れば自動的にHTML化されます。&lt;br&gt;
基本的な記事は.mdで作りましょう。一覧ページやタグごとのページなど特殊な処理が必要な場合は.jsで作ることになります。&lt;/p&gt;
&lt;p&gt;.mdファイルの書き方や書式はデフォルトであるファイルを参考に真似すれば問題ないです。
基本的に「frontmatter」と呼ばれるファイルのアタマの部分の書式を真似して、本文はマークダウンで自由に書けば良いです。
私は以下のようにしています。&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;---
title : &amp;#39;Gatsby+Firebaseを利用したブログの作り方&amp;#39;
date : &amp;#39;2018-11-26&amp;#39;
tags : [&amp;quot;ブログ&amp;quot;,&amp;quot;Gatsby&amp;quot;,&amp;quot;Firebase&amp;quot;] 
category : &amp;#39;blog&amp;#39;
---

本文をここに書く&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;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;gatsby build&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記コマンドを実行するとコンテンツが生成されます。
public以下にファイルが生成されるので、それらをサーバに設置することで公開となります。&lt;/p&gt;
&lt;br&gt;
&lt;h3&gt;生成したサイトをFirebaseで公開する&lt;/h3&gt;
&lt;p&gt;先程生成したコンテンツをサーバに設置します。&lt;/p&gt;
&lt;h4&gt;Firebaseでプロジェクトを作成&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://console.firebase.google.com/u/0/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Firebaseへようこそ&lt;/a&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;プロジェクトの名前を設定
場所を日本に設定&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;あとはデフォルトで大丈夫です。&lt;/p&gt;
&lt;h4&gt;Hostingの設定&lt;/h4&gt;
&lt;p&gt;画面左側のHostingを選択して、使ってみるを選択します。
以降は基本画面に出る内容をそのまま実行していけば問題ないです。&lt;/p&gt;
&lt;p&gt;Firebase ツールをインストール。&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 -g firebase-tools&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;cd sub_blog&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Google にログインします。firebaseを利用しているGoogleアカウントの情報を入力します。&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;firebase login&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;firebase init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;とりあえずHostingをチェック、他は今のところ不要です。&lt;/p&gt;
&lt;p&gt;projectはさっきFirebaseで作ったやつを選択、あとで変更も可能です。&lt;/p&gt;
&lt;p&gt;publicディレクトリとして使うのはデフォルトのまま「public」。&lt;/p&gt;
&lt;p&gt;SPA用の設定にするかというところは「yes」。&lt;/p&gt;
&lt;p&gt;public/index.htmlは上書きしない「no」。&lt;/p&gt;
&lt;p&gt;publicがデプロイディレクトリになっているので、この中身がFirebaseへデプロイされる対象になります。&lt;/p&gt;
&lt;h4&gt;Firebaseにデプロイ&lt;/h4&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;firebase deploy&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで先程のサイトが公開されているはずです。Firebaseの管理画面のHostingからURLを選択してアクセスして確認します。&lt;/p&gt;
&lt;h3&gt;Firebaseに独自ドメインを連携&lt;/h3&gt;
&lt;p&gt;以前、以下の記事にてドメインの設定はまとめました。より詳細に見たい場合はこちらもご確認下さい。&lt;br&gt;
&lt;a href=&quot;/2018/10/10/domain/&quot;&gt;ドメインの取得・Firebaseへの設定&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;独自ドメインを取得&lt;/h4&gt;
&lt;p&gt;私はお名前.comで取得しました。
使いたいURLを検索して決定した後、コンビニ等でお金を払えばOKです。
お名前.comの管理画面から確認できます。&lt;/p&gt;
&lt;h4&gt;Firebaseの管理画面からドメイン接続を行う&lt;/h4&gt;
&lt;p&gt;Firebase管理画面のHostingのメニューで「ドメイン接続」のボタンを選択します。
接続したいドメインを聞かれるので、先程取得したドメインを入力します。&lt;/p&gt;
&lt;p&gt;「以下の TXT レコードを DNS プロバイダに追加して〜」と表示されます。
そこに記載の値をこのあと使います。この画面のままおいておきます。&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;google-site-verification=〜
てやつです。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;ドメインにTXTレコードを追加&lt;/h4&gt;
&lt;p&gt;お名前.comでは
ドメイン設定メニューのDNS関連機能の設定を選択して、「DNSレコード設定」を利用します。&lt;/p&gt;
&lt;p&gt;DNSレコードの内容を追加できるフォームが表示されるので、以下のように設定して追加します。&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;TYPE：TXT
VALUE：google-site-verification=〜
状態：有効&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記の設定画反映されるまではしばらく時間がかかります。&lt;/p&gt;
&lt;h4&gt;Firebaseからドメイン所有権の確認&lt;/h4&gt;
&lt;p&gt;先程おいておいた画面から「確認」ボタンを押して先に進みます。&lt;/p&gt;
&lt;p&gt;上記で行った操作の反映が済んでいれば承認完了です。失敗する場合は時間をおいてからもう一度行いましょう。場合によりますが半日くらいかかる場合もあります（サイトによると最大72時間だそうです）。&lt;/p&gt;
&lt;h4&gt;ドメインに対応するIPの設定&lt;/h4&gt;
&lt;p&gt;所有権が確認されると、FirebaseのHostingしているサイトのIPアドレスが表示されます。その内容をドメイン側に登録します。&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;セットアップモード：クイックセットアップ&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;レコードタイプ「A」、値「IPアドレス」が2行表示されるので両方ドメインに登録します。&lt;/p&gt;
&lt;p&gt;お名前.comのドメイン設定メニューのDNS関連機能の設定を選択して、「DNSレコード設定」をもう一度利用します。
DNSレコードの内容を追加できるフォームが表示されるので、以下のように設定して追加します。
IPが2つ表示されていたので、2レコード追加することになります。&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;TYPE：A
VALUE：Firebaseで表示されたIP
状態：有効&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;反映されてもしばらくのうちは証明書によるアラートが表示されます。
しばらく時間が立つとFirebaseが証明書を発行してくれるので、待っていると解決します。&lt;/p&gt;
&lt;p&gt;反映の状況はFirebaseのHostingの管理画面から確認できます。&lt;/p&gt;
&lt;p&gt;ここまでで一通りサイトの発信が完了です。&lt;/p&gt;
&lt;h2&gt;サイトの更新&lt;/h2&gt;
&lt;p&gt;以降はgatsby buildすると、public以下にサイトが出力されます。&lt;br&gt;
firebase deployすることでpublic以下のファイルがFirebaseにデプロイされ、サイトが公開・更新されます。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;こんな感じで簡単にWEBサイトが公開できます。
いろいろカスタマイズしたいところですが、Gatsbyのカスタマイズ方法等はまだあまり情報がないです。
このブログでもどんどん試してみて紹介していきます。&lt;/p&gt;
&lt;p&gt;自分の備忘のためにも手順まとめてみましたが、改めてやってみて簡単でした。上記の手順をまとめながら別カテゴリーの別ブログを公開してます。ドメイン等設定できたらリンク貼っておきます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://betsumushi.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;別テーマのブログ&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Amazon アソシエイトの審査に合格しました]]></title><description><![CDATA[タイトルの通り、Amazon…]]></description><link>https://honmushi.com/2018/11/21/amazon2/</link><guid isPermaLink="false">https://honmushi.com/2018/11/21/amazon2/</guid><pubDate>Thu, 22 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルの通り、Amazonアソシエイトの審査に合格しました。
前回申請した際には不合格だったのですが、しばらく時間がたって記事数も増えたので再申請したところ合格でした。&lt;/p&gt;
&lt;p&gt;合格時点でのブログの状況を参考として記載しておきます。&lt;/p&gt;
&lt;h2&gt;合格時点のブログの状態&lt;/h2&gt;
&lt;h3&gt;申込みから合格まで&lt;/h3&gt;
&lt;p&gt;Google AdSenseに2018年11月22日15時に申し込み&lt;br&gt;
当日の2018年11月22日17時半に合格の連絡が来ました。2時間半で完了しました。&lt;/p&gt;
&lt;p&gt;審査は2回目です。1回目の審査の際はコンテンツ不足で判断できないという旨のメールが届き不合格でした。&lt;/p&gt;
&lt;h3&gt;記事数&lt;/h3&gt;
&lt;p&gt;29件（2018年11月22日）&lt;/p&gt;
&lt;p&gt;一度目の審査でコンテンツ不足を指摘されていたので、それ以降はなるべく文字数等多くするよう心がけました。
1000文字くらい目指そうというくらいです。実際、1000文字達している記事はいくつかあるくらいです。&lt;/p&gt;
&lt;h3&gt;内容&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;読書感想&lt;/li&gt;
&lt;li&gt;Gatsbyでの実装方法&lt;/li&gt;
&lt;li&gt;Firebaseの利用法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;など&lt;/p&gt;
&lt;h3&gt;ポリシーの記載&lt;/h3&gt;
&lt;p&gt;プライバシーポリシーのページは設置してました。&lt;br&gt;
&lt;a href=&quot;/privacypolicy/&quot;&gt;プライバシーポリシー&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;作成時点では審査の合格は来てませんでしたが、広告配信についての記載はしていました。&lt;/p&gt;
&lt;h3&gt;Gatsbyを利用したSPA&lt;/h3&gt;
&lt;p&gt;SPAで実装したブログです。&lt;br&gt;
Gatsbyを使って静的なHTMLを生成して、Firebaseでホスティングしています。&lt;/p&gt;
&lt;h3&gt;独自ドメインを取得済み&lt;/h3&gt;
&lt;p&gt;ブログサービスなどを利用せず、独自ドメインを取得して配信しています。&lt;/p&gt;
&lt;h3&gt;SEO関連の対応&lt;/h3&gt;
&lt;p&gt;メタタグなどの対応は行いました。
OGPタグも設定してました。&lt;/p&gt;
&lt;p&gt;SNSのへのシェア用のリンクは設置済みで、FeedlyのRSSも設置してます。&lt;br&gt;
sitemap.xmlも設置済みです。&lt;br&gt;
robots.txtも設置済みです。  &lt;/p&gt;
&lt;p&gt;Google Analiticsの設定も対応済みです。アクセスの情報等確認できる状態です。&lt;br&gt;
Search Consoleの設定も対応済みです。&lt;/p&gt;
&lt;h2&gt;Gatsbyで実装するに当たって&lt;/h2&gt;
&lt;p&gt;次はAmazonのリンク作成して記事に設置していきます。
このブログはGatsbyで生成しているのでマークダウンで記事を書いています。&lt;br&gt;
マークダウンファイルの中にいい感じでリンクを埋め込めるのかということと、SPAで正常にリンクの部分が表示されるかといったところが気になります。&lt;/p&gt;
&lt;p&gt;また試してみたら報告します。とりあえずは読書感想の記事内に書籍のリンクを置こうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[プログラミングの101個の原理原則『プリンシプル オブ プログラミング』]]></title><description><![CDATA[プログラミングを行うときに意識するべきことや役に立つことを101個の原理原則としてまとめています。
今までに先人たちが提唱してきたアドバイスやメソッドをわかりやすく紹介した本です。 プリンシプルとしてまとまっていますので1つ…]]></description><link>https://honmushi.com/2018/11/21/principles/</link><guid isPermaLink="false">https://honmushi.com/2018/11/21/principles/</guid><pubDate>Wed, 21 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;プログラミングを行うときに意識するべきことや役に立つことを101個の原理原則としてまとめています。
今までに先人たちが提唱してきたアドバイスやメソッドをわかりやすく紹介した本です。&lt;/p&gt;
&lt;p&gt;プリンシプルとしてまとまっていますので1つ1つが薄くなっている場合もあります。詳細な意味や内容が気になる場合は出典も読むといいです。出典書籍の情報や関連書籍がしっかり掲載されているので、気になったものはそちらをチェックして掘り下げましょう。巻末にはindexもあり、気になったものを検索することもできます。&lt;/p&gt;
&lt;p&gt;プリンシプル オブ プログラミングという名前の通り、プログラミングを行う際のテクニックが多いです。もっと考え方や態度など、技術以外のエンジニアの心がけが知りたい場合は&lt;a target=&quot;_blank&quot; href=&quot;https://www.amazon.co.jp/gp/product/4873118204/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873118204&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=ad14a6b8a25ae08f942851380984d2b3&quot;&gt;ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4873118204&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;br&gt;
&lt;a href=&quot;/2019/02/08/better-programer/&quot;&gt;【おすすめ読書】ベタープログラマ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これからプログラミングを始めるという人には、&lt;a href=&quot;/2019/02/18/dokugakuprogramer/&quot;&gt;【実践技術書】独学プログラマー&lt;/a&gt;など、入門の本を先に読みましょう。プリンシプル オブ プログラミングについては、ひとまずプロダクトを作ってみてから読むのがおすすめです。&lt;/p&gt;
&lt;p&gt;プリンシプル オブ プログラミングを読んで、「こんな経験したなあ」とか「昔見たけど忘れていたな」というものを思い出すきっかけになります。
この記事では、WEBエンジニアの私が重要だと感じたものを取り上げて紹介します。&lt;/p&gt;
&lt;p&gt;みなさんも自分なりのプリンシプル オブ プログラミングをつくってみてはいかがでしょうか。
まとめて机に貼っておくか、デスクトップ用の壁紙にでもして思い出せるようにするといいですよ。&lt;/p&gt;
&lt;h2&gt;Don’t repeat yourself&lt;/h2&gt;
&lt;p&gt;DRY（ドライ）と言われる有名な原則です。
ざっくりとは同じコードを重複して書いてはいけないということです。コピペ禁止です。
あちこちにコピペした結果、修正や変更の際に全部の箇所に手を入れなくてはいけません。これはあくまでも一例で、コードの改善が難しくなってしまうことはありがちな問題です。&lt;/p&gt;
&lt;p&gt;関数化やモジュール化などを検討して、コードを抽象化することで回避できます。時間がなくて急いでいるときほどコピペしがちです。忙しくて問題が起きてほしくないときに限って問題が発生する印象があります。ですので、常に落ち着いて対処することを心がけましょう。&lt;/p&gt;
&lt;p&gt;実際の現場ではすでに実装されている箇所への影響を防ぐために、コピペで作ろうという判断もありました。今思えば議論の余地はなく修正を行うべきだったのではないかとも思います。
長い目で見れば損を産んでしまうので、忙しい時でもリファクタリングして重複を取り除くことができればよかったです。
これから実装するものだけでなく、すでに実装されているものに対しても積極的に修正・リファクタリングを行っていくべきです。&lt;/p&gt;
&lt;p&gt;プログラミングにおいてこのDRYはかなり重要な原則です。「おやっ」と思うことがあれば必ず直すべきと思ってもいいくらい強いものだと思います。
予めユニットテストを準備しておくことや、リファクタリングの時間を予めスケジュールすることなどができれば、快適にこの原則を守れそうです。&lt;/p&gt;
&lt;p&gt;ちなみに、DRYはプログラミング以外のことにも役立つと思います。テストであったりデプロイなどの作業についても、何度も繰り返しやることになります。日々のメールによる報告とかもそうでしょうか。
早いうちに自動化を検討して、繰り返し行わなくていいようにしましょう。&lt;/p&gt;
&lt;h2&gt;ブルックスの法則&lt;/h2&gt;
&lt;p&gt;「人月の神話」にて出てくる言葉です。
プロジェクトの進捗が悪いために新たに人員を追加すると、火に油を注ぐ形となりさらなる遅延につながります。&lt;/p&gt;
&lt;p&gt;工数の見積もりには人月を使います。人×月なのですが、実は「人」と「月」は交換不可能になっています。
すなわち2×6と6×2ではどちらも12人月なのですが、現実では同じにはなりません。&lt;/p&gt;
&lt;p&gt;依存関係のオーバーヘッドであったり、新しく参加するに当たっての教育や共有などに時間がかかるため、この現象が発生します。
リスケジュールしたり、機能に優先度をつけて一部のみ開発するなどの機能面での対応が望ましいです。それらの相談は勇気が必要ですが、それをできるかどうかが良いエンジニアを分けるのではないかと思います。良いエンジニアはプログラミング以外のところで強さを発揮すると思います。プログラミングの技術やスピードだけが良いエンジニアとは限りません。コミュニケーション力や調整力など、さまざまな技能が必要なようです。&lt;/p&gt;
&lt;h2&gt;割れた窓の法則&lt;/h2&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;p&gt;他にもたくさんの原理原則があり、どれも重要と感じるものばかりです。プリンシプル オブ プログラミングというタイトル通りです。なんせ101個もあるので全部は紹介できません。プログラミングをしていく中でこれら以外のものと出会うこともあります。
実際にプログラミングでものをつくる、納品していく中で嫌でも身にしみて覚えていくと思います。&lt;/p&gt;
&lt;p&gt;現場や文化、作っているシステムの性質などによっても変わることがあります。できれば原則に従うことが大切だと思いますが、現場のルールや方針によってはそれに従わないという選択をする場合もあります。&lt;br&gt;
原則に背くことになったとしても、それによって何を得られて何を失うのかといったことを考えておくことが重要です。&lt;br&gt;
大概の場合は未来の時間を消費しています。現時点では何が起こるか、未来にどうなっているのかは正確にはわからないので、この点はしっかり抑えておきたいです。「あの時こうしておけばなあ」と感じることが合ったらしっかり覚えておいたほうがよいです。次の機会では同じことをしないように気をつけることができるようになります。&lt;/p&gt;
&lt;p&gt;私はシステムに関する原則は他の仕事や実際の生活にも当てはまるなあと思っています。とくにDRYの原則なんかとてもそう思います。
ここでは紹介しませんでしたが&lt;code&gt;YAGNI（You Aren&apos;t Going to Need It）&lt;/code&gt;とか&lt;code&gt;KISS（Keep It Simple,Stupid. Keep it Short and Simple.）&lt;/code&gt;なども、なんにでも当てはまるのではないかと思っています。
&lt;code&gt;Less is more.&lt;/code&gt;なんかも素敵です。いい言葉ですね。&lt;/p&gt;
&lt;p&gt;また機会があれば紹介します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「エッセンシャル思考」]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2018/11/20/essential/</link><guid isPermaLink="false">https://honmushi.com/2018/11/20/essential/</guid><pubDate>Tue, 20 Nov 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;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;エッセンシャル思考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;グレッグ・マキューン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;訳&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;高橋 璃子&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;かんき出版&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4761270438/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4761270438&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=d28341e3ed0616b22bd14eae9b27978a&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4761270438&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4761270438&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&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&gt;感想メモ&lt;/h2&gt;
&lt;h3&gt;エッセンシャル思考とは何か&lt;/h3&gt;
&lt;p&gt;より少なく、より良く。&lt;/p&gt;
&lt;p&gt;全部やろうとはしない。仕事を増やすよりも減らすことを考えます。現代では選択肢が多いこと、欲張りな時代、他人の意見がうるさすぎることなどにより、報告性を見失いがちになっています。&lt;/p&gt;
&lt;h3&gt;クローゼットと同じ&lt;/h3&gt;
&lt;p&gt;仕事もクローゼットと同じ、整理しないといつかいっぱいになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;評価する&lt;br&gt;
いつか着るかもではなく、大好きかどうか。また買いたいと思うか&lt;/li&gt;
&lt;li&gt;捨てる&lt;br&gt;
捨てるのは努力が必要&lt;/li&gt;
&lt;li&gt;実行する&lt;br&gt;
定期的に整理する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;選択肢は限られていても、何を選ぶかは自由。外的側面（どんな選択肢があるか）ばかりに目を向けている。しかし、内的側面（選ぶ能力）に目を向けるべきです。&lt;/p&gt;
&lt;p&gt;よく聞きますが、80対20の法則（パレートの法則）のように、大多数の情報は不要なものです。&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;パレートの法則はなんにでも当てはまるのでしょうか、今度調べてみたいです。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;何を選ぶかは何を捨てるかということ&lt;/h3&gt;
&lt;p&gt;全部優先する、は何も優先していないのと同じです。どうすれば全部できるかよりも、どれに集中するかを考えるほうが良いです。&lt;/p&gt;
&lt;h3&gt;睡眠は8時間以上&lt;/h3&gt;
&lt;p&gt;効率が良くなります。すごい人もそれくらいは寝ているらしいです。&lt;/p&gt;
&lt;p&gt;遊びも重要です。選択肢を広げること、ストレスを軽減すること、脳を活性化させる効果があります。&lt;/p&gt;
&lt;h3&gt;捨てる技術&lt;/h3&gt;
&lt;p&gt;断り方のレパートリーを日頃から増やしましょう。&lt;/p&gt;
&lt;p&gt;途中でやめることを恐れない。もったいないを克服する。人間は今行っている状態を重要に感じてしまう、現状維持バイアスにとらわれてしまいます。
ゼロベースで考えることが大切です。&lt;/p&gt;
&lt;h3&gt;続ける仕組み&lt;/h3&gt;
&lt;p&gt;ボトルネックを取り除く。小さく初めて、まず終わらせることが大切。小さく前進して目に見える形で測定していくことがモチベーションにつながります。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;いくつかの具体的なアドバイスもあり、わかりやすいです。全部を良くしようとするのではなく、まず対象となる大事なものを減らして、集中することで良くして行こうという考え方です。&lt;/p&gt;
&lt;p&gt;減らすのには勇気が入りますが、たしかに対象となるものを減らせばその分一つ一つに集中できることは間違いありません。&lt;/p&gt;
&lt;p&gt;あれもこれもと忙しくなりそうなタイミングで、手を付ける前に一度読み直してみるのがいいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「思考をやわらかくする授業」]]></title><description><![CDATA[先入観などにとらわれない、自由度の高いアタマを作るためのセルフイノベーション術の本です。
なんかややこしい言い方になってしまいましたが、自分らしく生きるために意識するべきことが6…]]></description><link>https://honmushi.com/2018/11/20/yawarakakusuru/</link><guid isPermaLink="false">https://honmushi.com/2018/11/20/yawarakakusuru/</guid><pubDate>Tue, 20 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;先入観などにとらわれない、自由度の高いアタマを作るためのセルフイノベーション術の本です。
なんかややこしい言い方になってしまいましたが、自分らしく生きるために意識するべきことが61個の言葉で書かれています。&lt;/p&gt;
&lt;p&gt;気づいたら硬い思考をしていることってよくあると思います。もっと柔らかい頭で考えられれば。と思ったことは何度もあります。なぞなぞとか脳トレによるものではなく、考え方や行動を変えることで思考を柔らかくします。&lt;/p&gt;
&lt;p&gt;なんとなくこういった本はよく見かけますよね。同じようなことが書いてあるかもしれないですが、重要だと思うところを自分なりにまとめて見るのも面白そうです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;思考をやわらかくする授業&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;本田直之&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;サンクチュアリ出版&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4861139988/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4861139988&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=37e9c7e8a73d214b86cf9aa087a1f0b5&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4861139988&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4861139988&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;印象に残ったところ&lt;/h2&gt;
&lt;h3&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&gt;変わることを否定する人間になってはいけない&lt;/h3&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;p&gt;部屋にものが少ないとスッキリします。思考も軽くなる気がします。捨てられないものの大半はなくしても気が付かないものだそうです。
迷ったら捨てるくらいが良いそうです。1年以上使っていないものは自分にとっていらないもの。引っ越しのときにいっぱい処分しようと思います。&lt;/p&gt;
&lt;p&gt;ものを増やすのは簡単ですが、減らすのって難しいですよね。
無料のサンプルや、誰かがただでくれるものは受け取らないのがおすすめだそうです。私は結構断る方で、プレゼントとかも不要ならすぐ捨てます。みなさんはどうでしょうか。&lt;/p&gt;
&lt;p&gt;ものを持たない人ほど物の価値がよくわかっている証拠だそうです。&lt;/p&gt;
&lt;h3&gt;何を知っているかよりも何を生み出せるか&lt;/h3&gt;
&lt;p&gt;自らがが教えるときに最もよく学べるそうです。知識は溜め込まずどんどん発信していきましょう。
相手にどうやって伝えるか、わかりやすくできるか。ポイントを整理したり、筋道を立てたりすることが、自分の理解にもつながります。&lt;/p&gt;
&lt;p&gt;自分から発信するようになると、他の発信している人と繋がれるといったことも利点です。
簡単にWEB上で発信出来る時代なので、どんどんやってるべきです。&lt;/p&gt;
&lt;h3&gt;普通の人には嫌われろ&lt;/h3&gt;
&lt;p&gt;誰かに好かれているということは、誰かに嫌われているということ。&lt;br&gt;
勇気が必要ですがとても納得です。そうなのかもしれません。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;普段の行動や考え方を改めることで、柔らかい思考を目指すことができます。
実際書いてあることは、そういう考え方も合ったか、と納得してしまうようなものが多いです。&lt;/p&gt;
&lt;p&gt;当たり前だと思っていたことも別の視点から見れば全く逆だったりということはあるので、様々な考え方に触れて取り入れてみることで、新しく知ることもあると思います。&lt;/p&gt;
&lt;p&gt;先入観にとらわれているのではないか、と日々自問しながら柔らかい思考を目指したいと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「日経LINNUX 7月号付録 Ubuntu 18.04 LTS」]]></title><description><![CDATA[突然ですが私はLinuxのPCを使っています。
NECのLaVieシリーズの薄くて軽いノートパソコンにUbuntuを入れて利用しています。
もともとはWindowsが入っていましたがOS…]]></description><link>https://honmushi.com/2018/11/16/ubuntu18/</link><guid isPermaLink="false">https://honmushi.com/2018/11/16/ubuntu18/</guid><pubDate>Fri, 16 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;突然ですが私はLinuxのPCを使っています。
NECのLaVieシリーズの薄くて軽いノートパソコンにUbuntuを入れて利用しています。
もともとはWindowsが入っていましたがOS書き換えました。困ることもありますが、個人的には便利です。&lt;/p&gt;
&lt;p&gt;ちょっと前に新しいバージョンになってから色々便利になったのですが、ちゃんとチェックしていなかったのでこの機会に学ぼうと思います。
以前買いっぱなしでちゃんと読んでいなかった日経Linuxの付録冊子を読んで、覚えたいことなど記録していきます。&lt;/p&gt;
&lt;h2&gt;Ubuntuの操作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Super&lt;br&gt;
アクティビティ画面
起動中のアプリケーションを切り替え
アプリケーションの検索やワークスペースの切り替えも可能&lt;/li&gt;
&lt;li&gt;Super + a&lt;br&gt;
アプリケーション画面
インストール済みのアプリケーションを表示&lt;/li&gt;
&lt;li&gt;Super + tab&lt;br&gt;
アプリの切り替え&lt;/li&gt;
&lt;li&gt;Super + ↑&lt;br&gt;
全画面表示&lt;/li&gt;
&lt;li&gt;Super + →←&lt;br&gt;
画面右や左に寄せて表示&lt;/li&gt;
&lt;li&gt;Super + pageup pagedown&lt;br&gt;
ワークスペースの切り替え&lt;br&gt;
Ctrl + alt + ↑↓でも可能&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ctrl + alt + t&lt;br&gt;
端末の起動&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ctrl + shift + t&lt;br&gt;
新しいタブ&lt;/li&gt;
&lt;li&gt;Ctrl + pageup&lt;br&gt;
タブ移動&lt;/li&gt;
&lt;li&gt;Ctrl + shift + t&lt;br&gt;
新しいウインドウ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ファイルマネージャー&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ctrl + l&lt;br&gt;
パスをテキスト化して選択&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;とりあえずそんなに情報なかったのでこれくらいにしておきます。&lt;br&gt;
またどこかで便利なテクニック等見つけたら備忘のために書き足しておきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[広告表示のためにreact-adsenseを利用する]]></title><description><![CDATA[Google AdSenseの広告を設置してみましたが、うまく表示されていません。
Gatsbyを用いてSPAでで配信しているためだと思います。
どうやら、「react-adsense…]]></description><link>https://honmushi.com/2018/11/15/reactadsense/</link><guid isPermaLink="false">https://honmushi.com/2018/11/15/reactadsense/</guid><pubDate>Thu, 15 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Google AdSenseの広告を設置してみましたが、うまく表示されていません。
Gatsbyを用いてSPAでで配信しているためだと思います。
どうやら、「react-adsense」というプラグインを利用することで解決できるようなので、それを使ってみました。&lt;/p&gt;
&lt;p&gt;結果、広告は正常に表示されました。&lt;br&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;  &amp;lt;ins className={&amp;quot;adsbygoogle&amp;quot;}
       style={{display:&amp;#39;block&amp;#39;}}
       data-ad-client=&amp;quot;xxxxxxxxxxxxxxxxxxxxxx&amp;quot;
       data-ad-slot=&amp;quot;xxxxxxxxxxxxxx&amp;quot;
       data-ad-format=&amp;quot;auto&amp;quot;
            data-full-width-responsive=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/ins&amp;gt;
  &amp;lt;script&amp;gt;
  {`
            (adsbygoogle = window.adsbygoogle || []).push({});
  `}
  &amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;広告が表示されない&lt;br&gt;
googleが提供するjsファイルについてはhead内で一度ロードするようにしています。&lt;br&gt;
HTML上には出力されていますが、動的に広告に置き換えられていない様子です。
最初の画面では表示されることがあります、しかし画面遷移の場合は表示されません。
SPAで実装していることが原因と考えられます。&lt;br&gt;
pluginの導入により、正しくスクリプトが動作するようになるはずです。&lt;/li&gt;
&lt;li&gt;デザインが崩れる&lt;br&gt;
文字が中央寄せになります。自動広告の設定をしているためDOMが書き換えられている様子。&lt;br&gt;
記事のDOMの親として中央寄せのdivが追加されるので、これの仕業だと考えられる。
自動広告をOFFにするよう設定したので、時間が経過すれば解決するはず。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;プラグインを利用する&lt;/h2&gt;
&lt;p&gt;プラグインをnpmでインストールします。&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 react-adsense&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;その後、head内に以下の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;&amp;lt;script async src=&amp;quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;広告を表示したい箇所に以下のタグを挿入。各ページやtemplateに追加します。
&lt;code&gt;client&lt;/code&gt;と&lt;code&gt;slot&lt;/code&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;import AdSense from &amp;#39;react-adsense&amp;#39;

~~~

&amp;lt;AdSense.Google 
    client={siteConfig.adClient} 
    slot={siteConfig.adSlot} 
    style={{ display: &amp;quot;block&amp;quot; }} 
    layout=&amp;quot;in-article&amp;quot; format=&amp;quot;auto&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;結果、広告が正常に表示されるようになりました。
非同期でページを取得するたびに、広告を生成するスクリプトが実行されるようになったのだと思います。&lt;/p&gt;
&lt;p&gt;詳細は今度調べてみようと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Google AdSenseの広告の設定]]></title><description><![CDATA[以前記事にしましたが、Google AdSenseの審査に合格しました。
現在は自動広告の設定にしているため、Google…]]></description><link>https://honmushi.com/2018/11/14/addsetting/</link><guid isPermaLink="false">https://honmushi.com/2018/11/14/addsetting/</guid><pubDate>Wed, 14 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前記事にしましたが、Google AdSenseの審査に合格しました。
現在は自動広告の設定にしているため、Googleが自動で学習して広告を設置してくれています。&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;Gatsbyを用いてSPAでで実装していることが大きな原因かと思っていますが、どうなんでしょうか。&lt;br&gt;
このままではまずいので、自動広告の設定をやめてちゃんと設定をし直します。&lt;/p&gt;
&lt;h2&gt;広告の設置イメージ&lt;/h2&gt;
&lt;p&gt;以下の部分に広告を設置する方針です。&lt;br&gt;
思い通りに設定できるかわかりませんがとりあえず以下を目標にします。&lt;/p&gt;
&lt;h3&gt;TOPページ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記事リンクの中にテキストの広告を挟む。4記事ごとに1広告くらい。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;記事ページ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記事の上部タイトル下&lt;/li&gt;
&lt;li&gt;記事の下部&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;タグ一覧ページ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記事リンクの中に広告を挟む。 &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;広告設置タグの生成&lt;/h2&gt;
&lt;p&gt;Google AdSenseの管理画面で設定します。結構細かく設定できます。&lt;/p&gt;
&lt;p&gt;設定方法や内容については後日紹介します。とりあえずこのブログはレスポンシブなので、レスポンシブに対応した広告を設置することにします。&lt;/p&gt;
&lt;h2&gt;自動広告の無効化&lt;/h2&gt;
&lt;p&gt;Google AdSenseの管理画面にて設定変更します。
サイト側のタグやスクリプトは入ったままでいい様子です&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;広告 メニューの 「自動広告」を選択&lt;/li&gt;
&lt;li&gt;全般設定の右の方の鉛筆マークを選択&lt;/li&gt;
&lt;li&gt;ページ内広告の種類が4つ、オーバーレイ広告の種類が2つくらい並んでいる画面が表示&lt;/li&gt;
&lt;li&gt;この画面内のスイッチを全部オフにします。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;設定変更後しばらく時間が立つとサイトに反映されるようです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[タグページへのリンク作成]]></title><description><![CDATA[タグページの作成 にて、タグごとの記事一覧を作成しました。 記事内に表示されているタグの部分を、このページへのリンクに修正します。 SEO的にも関連ページへの内部リンクはあったほうが良いでしょう。 記事ページのテンプレート修正 タグに設定されている単語はGraphQL…]]></description><link>https://honmushi.com/2018/11/13/tagpagelink/</link><guid isPermaLink="false">https://honmushi.com/2018/11/13/tagpagelink/</guid><pubDate>Tue, 13 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/2018/11/08/tagpage/&quot;&gt;タグページの作成&lt;/a&gt; にて、タグごとの記事一覧を作成しました。&lt;/p&gt;
&lt;p&gt;記事内に表示されているタグの部分を、このページへのリンクに修正します。&lt;br&gt;
SEO的にも関連ページへの内部リンクはあったほうが良いでしょう。&lt;/p&gt;
&lt;h2&gt;記事ページのテンプレート修正&lt;/h2&gt;
&lt;p&gt;タグに設定されている単語はGraphQLにて配列形式で取得しています。&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;markdownRemark(fields: { slug: { eq: $slug } }) {
  html
  frontmatter {
    title
    tags
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この配列を使って、以下のようなURLへのリンクを生成します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/tags/gatsby/&quot;&gt;タグページ(gatsby)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;記事ページのテンプレートを修正します。&lt;br&gt;
&lt;code&gt;/src/template/blog-post.js&lt;/code&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;タグ：{post.frontmatter.tags.map(( value , id ) =&amp;gt; (
&amp;lt;Link 
  key={id}
  to={`/tags/${kebabCase(value)}/`}
&amp;gt;
    {value}
&amp;lt;/Link&amp;gt;
))}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;記事上部のタグ部分がリンクになりました。&lt;br&gt;
タグで絞り込んだ一覧ページへ遷移できるようになりました。&lt;/p&gt;
&lt;h2&gt;タグ一覧ページの内容&lt;/h2&gt;
&lt;p&gt;現在はトップページとほぼ同じで、該当するタグに合致する記事のみ絞り込む状態になっています。
できれば、SEOの対策としてタグごとの概要などをかければいいですが、一旦このままにしておきます。&lt;/p&gt;
&lt;p&gt;とりあえずですが、タグのリンクはできました。結構簡単にできます。Gatsbyの情報はあまりないのですが、このへんまでなら結構見つかります。もっと独自の改修をしようと思うと困ることが多いです。&lt;/p&gt;
&lt;p&gt;各記事の下部とかに、「同じタグのおすすめ記事」のような内部リンクを足して回遊をしやすくする機能を追加する予定もあります。また実装したら記事にします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Google AdSenseの審査に合格しました]]></title><description><![CDATA[タイトルの通り、Google AdSense…]]></description><link>https://honmushi.com/2018/11/12/gadsense/</link><guid isPermaLink="false">https://honmushi.com/2018/11/12/gadsense/</guid><pubDate>Mon, 12 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;タイトルの通り、Google AdSenseの審査に合格しました。
とりあえず自動で広告が表示されるように設定していたので、広告が表示されていることが確認できます。&lt;/p&gt;
&lt;p&gt;合格時点でのブログの状況を参考として記載しておきます。&lt;/p&gt;
&lt;p&gt;現時点ではデザインが崩れてしまったり、うまく表示されないことがあります。&lt;br&gt;
広告の表示方法などの設定を行い、いい感じに表示できるようにしていきたいです。&lt;/p&gt;
&lt;h2&gt;合格時点のブログの状態&lt;/h2&gt;
&lt;h3&gt;申込みから合格まで&lt;/h3&gt;
&lt;p&gt;Google AdSenseに2018年10月18日に申し込み&lt;br&gt;
2018年11月12日に合格の連絡が来ました。&lt;/p&gt;
&lt;p&gt;結構時間かかりましたが、一回の申請で通りました。&lt;br&gt;
審査中もコンテンツの投稿や、デザインや要素の変更などやってました。&lt;/p&gt;
&lt;h3&gt;記事数&lt;/h3&gt;
&lt;p&gt;23件（2018年11月12日）&lt;/p&gt;
&lt;p&gt;文字数は少ないです。1000文字達している記事はいくつかあるくらいです。&lt;/p&gt;
&lt;h3&gt;内容&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Gatsbyでの実装方法&lt;/li&gt;
&lt;li&gt;Firebaseの利用法&lt;/li&gt;
&lt;li&gt;読書感想&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;など&lt;/p&gt;
&lt;h3&gt;ポリシーの記載&lt;/h3&gt;
&lt;p&gt;プライバシーポリシーのページは設置してました。&lt;br&gt;
&lt;a href=&quot;/privacypolicy/&quot;&gt;プライバシーポリシー&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;作成時点では審査の合格は来てませんでしたが、Google AdSenseの広告配信についての記載はしていました。&lt;/p&gt;
&lt;h3&gt;Gatsbyを利用したSPA&lt;/h3&gt;
&lt;p&gt;SPAで実装したブログです。&lt;br&gt;
Gatsbyを使って静的なHTMLを生成して、Firebaseでホスティングしています。&lt;/p&gt;
&lt;h3&gt;独自ドメインを取得済み&lt;/h3&gt;
&lt;p&gt;ブログサービスなどを利用せず、独自ドメインを取得して配信しています。&lt;/p&gt;
&lt;h3&gt;SEO関連の対応&lt;/h3&gt;
&lt;p&gt;メタタグなどの対応は行いました。
OGPタグも設定してました。&lt;/p&gt;
&lt;p&gt;SNSのへのシェア用のリンクは設置済みで、FeedlyのRSSも設置してます。&lt;/p&gt;
&lt;p&gt;sitemap.xmlも設置済みです。&lt;/p&gt;
&lt;p&gt;robots.txtも設置済みです。&lt;/p&gt;
&lt;p&gt;Google Analiticsの設定も対応済みです。アクセスの情報等確認できる状態です。&lt;br&gt;
Search Consoleの設定も対応済みです。&lt;/p&gt;
&lt;h2&gt;Gatsbyで実装するに当たって&lt;/h2&gt;
&lt;p&gt;現時点ではGoogle AdSenseの設定で、自動で広告が表示されるようにしています。&lt;br&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;このブログをGatsbyを用いてSPAで構築しているためだと思います。&lt;br&gt;
正常な表示になるように、表示する広告の調整を行おうと思います。&lt;/p&gt;
&lt;p&gt;とりあえず、自動での表示ではなく広告の形などを設定してタグを埋め込む形での広告配信を試してみます。&lt;/p&gt;
&lt;h2&gt;追記&lt;/h2&gt;
&lt;p&gt;自動広告をやめて、広告ユニットを用意して設置するように変更しました。&lt;/p&gt;
&lt;p&gt;広告のサイズなどはレスポンシブを設定しているので、画面幅に合わせて変形してくれます。画面の崩れなどもなくなりましたしいい感じです。&lt;/p&gt;
&lt;p&gt;情報を見ている限りでは自動広告は結構効果がいいらしいのでもったいないのですが、GatsbyまたはSPAと相性が悪い様子なので諦めます。&lt;/p&gt;
&lt;p&gt;とりあえずはこのスタイルでやってみます。&lt;/p&gt;
&lt;p&gt;広告には関連記事のリンクなど、いろいろな種類があるのでそれらも試していこうと思っています。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[タグページの作成]]></title><description><![CDATA[SEO対応と記事閲覧の観点から、タグごとの記事一覧ページを作成します。 記事ごとにつけられているタグを使って、タグを使った記事絞り込みを行えるようにしました。 Gatsbyのドキュメントにざっくり実装方法書いてあります。参考にしながら実装していきます。 md…]]></description><link>https://honmushi.com/2018/11/08/tagpage/</link><guid isPermaLink="false">https://honmushi.com/2018/11/08/tagpage/</guid><pubDate>Thu, 08 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SEO対応と記事閲覧の観点から、タグごとの記事一覧ページを作成します。&lt;br&gt;
記事ごとにつけられているタグを使って、タグを使った記事絞り込みを行えるようにしました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gatsbyjs.org/docs/adding-tags-and-categories-to-blog-posts/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Gatsbyのドキュメント&lt;/a&gt;にざっくり実装方法書いてあります。参考にしながら実装していきます。&lt;/p&gt;
&lt;h2&gt;mdファイル側にタグを設定&lt;/h2&gt;
&lt;p&gt;マークダウンのfrontmatterにtagsを追加します。&lt;/p&gt;
&lt;p&gt;私は勝手にカンマ区切りで設定していましたが、ドキュメントでは配列で指定するように説明されてました。&lt;br&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;---
title: &amp;quot;A Trip To the Zoo&amp;quot;
tags: [&amp;quot;animals&amp;quot;, &amp;quot;Chicago&amp;quot;, &amp;quot;zoos&amp;quot;]
---&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;src/templates/tags.js&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;GraphQL で以下のように取得します。
tagの文字列を受け取って、&lt;code&gt;filter: { frontmatter: { tags: { in: [$tag] } } }&lt;/code&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;	query($tag: String) {
		allMarkdownRemark(
			filter: { frontmatter: { tags: { in: [$tag] } } }
	) {
		totalCount
		edges {
			node {
			  id
			  frontmatter {
				title
				date(formatString: &amp;quot;YYYY/MM/DD&amp;quot;)
			  }
			  excerpt
			}
	   }
   }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;gatsby-node.js でページを生成するように記述&lt;/h2&gt;
&lt;p&gt;もともと、記事詳細を作成していた処理に追加します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;graphQLでfrontmatterのtagsも取得&lt;/li&gt;
&lt;li&gt;tagsの内容を配列にして保持し、これを使ってタグごとの一覧ページを作成&lt;/li&gt;
&lt;/ul&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 tags = []   
      tags = tags.concat(edge.node.frontmatter.tags)

      // Make tag pages
	  tags.forEach(tag =&amp;gt; {
	    createPage({
	  	  path: `/tags/${_.kebabCase(tag)}/`,
          component: path.resolve(`./src/templates/tags.js`),
	  	  context: {
	  	    tag,
	  	  },
        })
      })&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ドキュメントのまんまの実装で、タグに属する記事を表示するページができました。見た目はいまいちですね。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/tags/gatsby/&quot;&gt;タグページ(gatsby)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c408831b00574b04a00f06ece8c07b12/694d5/tagpage1.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.78378378378378%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAMABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAECBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdm6oQw//8QAGBABAQADAAAAAAAAAAAAAAAAARAAEjH/2gAIAQEAAQUCAzUhyf/EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABYQAQEBAAAAAAAAAAAAAAAAADEAIP/aAAgBAQAGPwIjP//EABoQAAICAwAAAAAAAAAAAAAAAAERACEQMXH/2gAIAQEAAT8hKpIF2EAQQmvmf//aAAwDAQACAAMAAAAQSw//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPxCn/8QAHBABAAIBBQAAAAAAAAAAAAAAAQARIRAxQVFh/9oACAEBAAE/EBCxYceTA26pxAAADYIAp6a//9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;タグページ&quot;
        title=&quot;タグページ&quot;
        src=&quot;/static/c408831b00574b04a00f06ece8c07b12/1c72d/tagpage1.jpg&quot;
        srcset=&quot;/static/c408831b00574b04a00f06ece8c07b12/a80bd/tagpage1.jpg 148w,
/static/c408831b00574b04a00f06ece8c07b12/1c91a/tagpage1.jpg 295w,
/static/c408831b00574b04a00f06ece8c07b12/1c72d/tagpage1.jpg 590w,
/static/c408831b00574b04a00f06ece8c07b12/694d5/tagpage1.jpg 592w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;/tags/ に すべてのタグをリストするページを作成&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;src/pages/tags.js&lt;/code&gt;にページを作成&lt;/p&gt;
&lt;p&gt;GraphQLで以下の指定を行いタグを取得。この配列を使って一覧を出力します。&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;query {
	allMarkdownRemark(
		limit: 2000
	) {
		group(field: frontmatter___tags) {
			fieldValue
			totalCount
		}
	}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こちらもドキュメントまんまの実装をして、マークダウンのtagsの部分を配列の形式で書き直したところ、以下のようにページができました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/tags/&quot;&gt;タグ一覧ページ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/44ef99b481a24e6e1a07e60a8991d63e/3f8a9/tagpage.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.21621621621621%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIDBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe7U2Zg//8QAFxABAAMAAAAAAAAAAAAAAAAAAAECMf/aAAgBAQABBQKuJVxL/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAFhABAQEAAAAAAAAAAAAAAAAAMRAA/9oACAEBAAE/ITjo9//aAAwDAQACAAMAAAAQQN//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPxBn/8QAGxABAAICAwAAAAAAAAAAAAAAAQBxEDERIbH/2gAIAQEAAT8QAEHXGCJqaKPMaan/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;タグ一覧ページ&quot;
        title=&quot;タグ一覧ページ&quot;
        src=&quot;/static/44ef99b481a24e6e1a07e60a8991d63e/1c72d/tagpage.jpg&quot;
        srcset=&quot;/static/44ef99b481a24e6e1a07e60a8991d63e/a80bd/tagpage.jpg 148w,
/static/44ef99b481a24e6e1a07e60a8991d63e/1c91a/tagpage.jpg 295w,
/static/44ef99b481a24e6e1a07e60a8991d63e/1c72d/tagpage.jpg 590w,
/static/44ef99b481a24e6e1a07e60a8991d63e/3f8a9/tagpage.jpg 855w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;タグページとタグリストページをデザイン反映&lt;/h2&gt;
&lt;p&gt;基本的にはトップページと同様の要素を並べます。&lt;br&gt;
ヘッダーフッターとタグに該当する記事です。&lt;/p&gt;
&lt;p&gt;見出しとかの要素をindexページに合わせて修正するくらいです。&lt;br&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;src/templates/tags.js&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「8割捨てる！情報術」]]></title><description><![CDATA[情報の扱い方についての書籍です。普段手に入る情報のうち8割はムダで、残り…]]></description><link>https://honmushi.com/2018/11/07/8warisuteru/</link><guid isPermaLink="false">https://honmushi.com/2018/11/07/8warisuteru/</guid><pubDate>Wed, 07 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;情報の扱い方についての書籍です。普段手に入る情報のうち8割はムダで、残り2割のみが重要であるという考えです。&lt;/p&gt;
&lt;p&gt;情報過多と言われる時代なので、目に入るものすべてを取り入れていくわけには行きません。うまく取捨選択していくための技術や考え方を得られそうです。
どちらかといえば、ほとんどいらないことばかりなので、見逃した情報が合ってもそれほど問題にはならないよ。という内容です。&lt;/p&gt;
&lt;p&gt;情報の上手な取扱、取捨選択や記事のスリム化などに向けて、知識を得られればと思い読みました。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;8割捨てる！情報術&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;理央 周&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;日本経済新聞出版社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4532321395/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4532321395&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=943abcd3dc089c3c491133a10e622532&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4532321395&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4532321395&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;感想&lt;/h2&gt;
&lt;h3&gt;80：20 パレートの法則&lt;/h3&gt;
&lt;p&gt;「80：20」というパレートの法則に沿って説明されています。&lt;/p&gt;
&lt;p&gt;取得した情報のうち8割は無駄、交換した名刺も8割は無駄です。&lt;br&gt;
確かに、自分の持っている名刺なんかを見てもそうかもと思いました。2度と連絡もしないようなものが大半です。&lt;/p&gt;
&lt;p&gt;学校で使った教科書なんかも8割は無駄なのかもしれません。
基礎を身に着けておけば、以降に目に入る情報のうち8割が基礎的なことで、残り2割が新しい情報だそうです。&lt;br&gt;
ここも80：20の法則です。&lt;/p&gt;
&lt;h3&gt;情報のPDCA&lt;/h3&gt;
&lt;p&gt;不要なものを切り捨てることのみでなく、情報のPDCAについても書かれてます。&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;しっかりアウトプットまでして、その結果の反響などを測定します。
そのことによって習慣化であったり、効率的な情報術が身につきます。&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;アウトプットするために解釈して整理することで情報が定着する  
誰かに読まれることを意識してアウトプットを考えることが大切&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;「何」よりも「なぜ？」を考えることが大切&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;見出しだけを見てわかった気になっていたり、集めるだけ集めて満足する状況に気をつけます。&lt;/p&gt;
&lt;p&gt;わかりやすい情報には2種類あります。見た情報がどちらなのかしっかり振り返るべきです。  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;知らないことや難しいことを解きほぐしている&lt;/li&gt;
&lt;li&gt;複雑なことを割愛している&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;成果測定はSNSの「いいね」などでもいいそうです。&lt;/p&gt;
&lt;h3&gt;習慣化&lt;/h3&gt;
&lt;p&gt;報酬や成果をしっかり把握して、自分がアウトプットするモチベーションにします。&lt;/p&gt;
&lt;p&gt;人は「近くのものを過大評価し、遠くのものを過小評価」します。&lt;br&gt;
目の前のことに手が一杯になるあまり、未来の自分に投資できなくなっていることはよくあることかと思います。&lt;/p&gt;
&lt;p&gt;重要なことをやるためには、まずそのための時間をブロックすることが必要です。
未来に向けた投資を行うために、まずまとまった時間を用意することから取り組みます。&lt;/p&gt;
&lt;h3&gt;捨てる勇気&lt;/h3&gt;
&lt;p&gt;ドラッカーが言うには、必要なものを決めるより、不要なものを決めるほうが難しいとされるそうです。&lt;br&gt;
「劣後順位」を決める上で重要なのは、分析ではなく勇気です。&lt;/p&gt;
&lt;p&gt;何でも大切だと抱え込んで一杯になってしまうときは、思い切って不要だと捨てる勇気が必要です。&lt;br&gt;
8割という、物事の大半を捨てるというのがこの本のテーマで、勇気を持って捨てていきたいです。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;8割は不要と言う考え方です。ですので、大抵は必要な無いので捨てても問題ないという考え方です。ただし、残りの2割についてはしっかり仕分けして、知恵に変換していくことを進めています。&lt;/p&gt;
&lt;p&gt;あまたある情報のうち重要な部分に着目して、しっかり自分のものにしていくことが大切な考え方です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】「言葉にできる」は武器になる。]]></title><description><![CDATA[…]]></description><link>https://honmushi.com/2018/11/07/kotobanidekiru/</link><guid isPermaLink="false">https://honmushi.com/2018/11/07/kotobanidekiru/</guid><pubDate>Wed, 07 Nov 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;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;言葉にできるは武器になる。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;梅田 悟司&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;日本経済新聞出版社&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4532320755/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4532320755&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=37c59c11329b00941ce3372d752aa1bb&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4532320755&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4532320755&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;感想&lt;/h2&gt;
&lt;p&gt;伝わる言葉を生むためには「意見を育てるプロセスが重要」。&lt;br&gt;
人から出てくる言葉は思考の上澄みなので、思考が深くなければ言葉も浅いものになってしまいます。&lt;/p&gt;
&lt;p&gt;大きく、以下の2点が大切です。&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. 外に向かう言葉に変換する&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;うまく言葉にできない&lt;/h3&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;br&gt;
複雑な思いと向き合うことで考えたつもりから脱することができます。&lt;/p&gt;
&lt;p&gt;そうでなければ、いつまでも「あるべき自分から発せられる建前」を発することになります。&lt;br&gt;
これでは、どこかで借りてきたようなものになってしまい、迫力も説得力も出ません。&lt;/p&gt;
&lt;p&gt;言葉に幅と奥行きをもたせることが理想です。&lt;/p&gt;
&lt;h3&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;以下の7つのプロセスで行います。ざっくりいえば、書き出すことで記憶領域を空にして思考域を利用できるようにします。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;思ったことを書き出す&lt;/li&gt;
&lt;li&gt;T字型思考法で考える&lt;br&gt;
本当に？で昔へ、それで？で未来へ、なぜ？で深くへ考えを進めます&lt;/li&gt;
&lt;li&gt;仲間を分類する&lt;br&gt;
方向と深さで分類します。&lt;/li&gt;
&lt;li&gt;足りない箇所を埋める&lt;/li&gt;
&lt;li&gt;時間を置く&lt;br&gt;
2,3日程度が理想&lt;/li&gt;
&lt;li&gt;真逆を考える&lt;/li&gt;
&lt;li&gt;違う人の視点から考える&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;人を動かすには思いをどれだけ込められるかが重要です。自分の内なる言葉を理解しきれない状態では人に伝わりません。ぱっと最初に出てきた言葉は感情の表面的な部分でしかなく、自分の中で深くまで考え抜くことで、本当に伝えたいことや、共感しやすい言葉が出てくるのだそうです。
自分自身の言葉と向き合い、育てることによって伝わる言葉が生まれます。&lt;/p&gt;
&lt;p&gt;上記の7つのプロセスをやろうと思うととても時間かかります。&lt;br&gt;
人を動かすような言葉を考える際にはこれくらい必要なのでしょう。&lt;/p&gt;
&lt;p&gt;細書はとても大変だと思いますが、少しずつでもやっていこうと思います。本を読んだり映画を見たりして思ったことや感じたことを言葉にしていけるように特訓してみます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[スマホアプリの作成に向けて]]></title><description><![CDATA[11月の目標としてスマホアプリを作ることを目標にしています。 今までにWEBサイトやWEB…]]></description><link>https://honmushi.com/2018/11/07/createapp/</link><guid isPermaLink="false">https://honmushi.com/2018/11/07/createapp/</guid><pubDate>Wed, 07 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;11月の目標としてスマホアプリを作ることを目標にしています。&lt;/p&gt;
&lt;p&gt;今までにWEBサイトやWEBアプリは作ったことがあります。&lt;br&gt;
しかし、スマホアプリは作ったことがないので勉強のつもりで作成したいと思います。&lt;/p&gt;
&lt;p&gt;作る過程で学んだことや、引っかかたことなどこのブログに残していきます。&lt;br&gt;
同じようにこれから作ってみようという人の参考になればと思います。&lt;/p&gt;
&lt;h2&gt;方針&lt;/h2&gt;
&lt;h3&gt;何作るか&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;簡単なスマホアプリ&lt;/li&gt;
&lt;li&gt;iOSとAndroid両方のつもり、難しければどちらか&lt;/li&gt;
&lt;li&gt;Todoとか？簡単なゲームとか&lt;/li&gt;
&lt;/ul&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;h3&gt;何使うか&lt;/h3&gt;
&lt;p&gt;このブログと同じくFirebaseを利用する&lt;br&gt;
言語はReact Nativeを利用する方針    &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;Unreal Engineなども気になるが一旦これで作り切る&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;開発環境等はなるべくお金がかからない方法を選択します。
だれでもできるような方法で構築して、情報を記録していこうと考えています。&lt;/p&gt;
&lt;h2&gt;やること&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;参考書籍の購入&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;スマホアプリ &lt;/li&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;開発環境の準備&lt;/li&gt;
&lt;li&gt;Firebaseのプロジェクトを用意&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;進捗&lt;/h2&gt;
&lt;p&gt;なにか進捗があれば追記します。完成に至るまでの進捗や手順など残していくつもりです。
リリース後は運用しながら振り返りなどやっていきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【おすすめ読書】情報の編集と発信 「コメントする力」]]></title><description><![CDATA[情報の編集と発信することについての書籍です。インプットした情報をアウトプットする際の技術が書かれています。   SNS…]]></description><link>https://honmushi.com/2018/11/05/tatoeruchikara/</link><guid isPermaLink="false">https://honmushi.com/2018/11/05/tatoeruchikara/</guid><pubDate>Mon, 05 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;情報の編集と発信することについての書籍です。インプットした情報をアウトプットする際の技術が書かれています。  &lt;/p&gt;
&lt;p&gt;SNSなどで何かしらのコンテンツに対してコメントをすることはよくあります。そのときにどうすれば独自の目線で面白いコメントができるのかということを知ることができます。&lt;/p&gt;
&lt;p&gt;この本を読んで、ブログでの本の紹介のパターンや方向性を考えたいと思い手に取りました。
定期的に読み返したい本です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;タイトル&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;コメントする力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;著者&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;竹田圭吾&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;出版&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;PHP研究所&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;画像リンク&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;a target=&quot;_blank&quot;  href=&quot;https://www.amazon.co.jp/gp/product/4569811388/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4569811388&amp;linkCode=as2&amp;tag=koshihonmushi-22&amp;linkId=70575af7cb8ce9f8758ad807a94168d5&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=4569811388&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=koshihonmushi-22&quot; &gt;&lt;/a&gt;&lt;img src=&quot;//ir-jp.amazon-adsystem.com/e/ir?t=koshihonmushi-22&amp;l=am2&amp;o=9&amp;a=4569811388&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;感想&lt;/h2&gt;
&lt;p&gt;情報との接し方、整理する技術、発信するコツについて書かれています。これからの発信の際の参考になりそうです。
文章術といったことは触れられておらず、情報の接し方、情報の整理についての内容が多い印象でした。&lt;/p&gt;
&lt;p&gt;「情報から距離を置く」「他の人と同じことは言わない」、これらは私も意識していきたいです。&lt;/p&gt;
&lt;h3&gt;複眼思考&lt;/h3&gt;
&lt;p&gt;何度か本文中に出てきましたが、複眼思考を日頃から訓練していきたいです。  &lt;/p&gt;
&lt;p&gt;2軸で考えること。地理と時間であったり科学と芸術とか。&lt;br&gt;
些細なことであってもいろんな面を持っていると思います。意識して複眼思考を身につけたいです&lt;/p&gt;
&lt;p&gt;以下のような、著者がやらないように気をつけている表現方法が記載されていました。&lt;br&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;h3&gt;ストーリーで語る&lt;/h3&gt;
&lt;p&gt;事実を物語として再構築して発信します。付加価値をつけて提供することを目指します。&lt;br&gt;
情報を扱う中で難しいことですが、日頃から五感を使うことや上記の複眼思考を磨くことで身につけていきたいです。&lt;/p&gt;
&lt;p&gt;実際自分で体験してみたなどの五感を使った情報が、一番わかり易いと思ってます。&lt;br&gt;
チェックポイントも書いてあったので、それを参考に考えていこうと思います。&lt;/p&gt;
&lt;h3&gt;言うことがなければコメントしない&lt;/h3&gt;
&lt;p&gt;これは大事かなと思いました。
何でもアウトプットを増やすことは大事です。&lt;br&gt;
しかし、何を言うかということは何を言わないかということでもあるので、このことは頭の片隅においておきたいです。&lt;/p&gt;
&lt;p&gt;グレーな情報に対して白黒はっきりしてしまうのは気持ちいいですが、危ないかもしれません。&lt;br&gt;
色々余白を残して、情報の多面性が残っていることがいいことなのかもしれないです。&lt;/p&gt;
&lt;h2&gt;内容ごとのまとめ&lt;/h2&gt;
&lt;h3&gt;1章 情報は疑え&lt;/h3&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;これらを実現するためにいくつかのコツがあります。私が重要だと感じたものを選択して記載します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;タテ軸-ヨコ軸で考える&lt;br&gt;
「地理と時間」や「科学と芸術」など2軸で考える&lt;/li&gt;
&lt;li&gt;全体像で見る&lt;br&gt;
ズームアウト、ズームインして見る&lt;/li&gt;
&lt;li&gt;情報は疑う&lt;br&gt;
同調圧力や原則などによってごまかされやすいので注意する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2章 情報は集めるな&lt;/h3&gt;
&lt;p&gt;情報を整理しないで、大きな箱に入れるイメージです。他の情報との文脈を守るためにそうします。&lt;br&gt;
あと、どこらへんにあったかといったことをざっくり把握できればいいとのことです。&lt;/p&gt;
&lt;h4&gt;本の読み方&lt;/h4&gt;
&lt;p&gt;1つのテーマに対して3冊本を読みます。&lt;br&gt;
青と黄色の付箋を使って、重要は黄色、とても重要は青で付箋を貼っていくそうです。&lt;/p&gt;
&lt;p&gt;情報源は定期的に見直したほうがいいです。&lt;/p&gt;
&lt;h3&gt;3章 ストーリーで語れ&lt;/h3&gt;
&lt;h4&gt;複眼思考が大切&lt;/h4&gt;
&lt;p&gt;これを日頃から鍛えておき、事実を物語として再構築して発信します。&lt;br&gt;
必要な要素を並べて、その後肉付けによって魅力的になリます。何をポイントとして、何をカットするか。&lt;/p&gt;
&lt;h4&gt;情報の整理&lt;/h4&gt;
&lt;p&gt;読者の五感に訴えるような表現を目指すために、五感を使った取材やインプットが必要です。&lt;br&gt;
Newsweekでは以下のようなチェックがあるそうです。&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;展開するペース&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;h3&gt;4章 付加価値をつけろ&lt;/h3&gt;
&lt;h4&gt;2つの奥義&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;言うことがないならコメントしない&lt;br&gt;
ただでさえ情報が過多なので、発信する側も気をつける&lt;/li&gt;
&lt;li&gt;刺さるコメントは目指さない&lt;br&gt;
しみるコメントを目指します&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;複眼思考をここでも発揮する&lt;/h4&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;h4&gt;4つの言わないようにしている論&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;代替なき批判&lt;br&gt;
代替案や解決策なしでただただ批判のみはしないほうがいい
議論は進まないので意味がありません。&lt;/li&gt;
&lt;li&gt;極端な悲観論&lt;br&gt;
もしもこうなったらということについてあまりに悲観的に考えすぎると、余計な不安を煽ってしまいます。&lt;/li&gt;
&lt;li&gt;未来すぎる提案&lt;br&gt;
解決できるかもしれないが、時間がかかり過ぎて現実的でない。これも話が進みません。&lt;/li&gt;
&lt;li&gt;原則論&lt;br&gt;
「人命が何より優先だ！」とか大きなことを言ってしうと他のことが考えられなくなるので避けます。&lt;br&gt;
その場面や文脈に沿って議論・検討して解決すべきです。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;自分なりの付加価値とは？&lt;/h4&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;h4&gt;発信する前のチェックリスト&lt;/h4&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;反論があるとすればどんなものか&lt;/li&gt;
&lt;li&gt;自分の過去やこれからと整合性は取れているか&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[2018年10月の振り返り]]></title><description><![CDATA[このブログを立ち上げて…]]></description><link>https://honmushi.com/2018/11/01/reflection201810/</link><guid isPermaLink="false">https://honmushi.com/2018/11/01/reflection201810/</guid><pubDate>Thu, 01 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このブログを立ち上げて1ヶ月が経過しました。&lt;br&gt;
この一ヶ月をしっかり振り返って、記録していこうと思います。&lt;/p&gt;
&lt;h2&gt;成果&lt;/h2&gt;
&lt;h3&gt;ブログの公開はできた&lt;/h3&gt;
&lt;p&gt;まずはこのブログの公開ができたこと。よかったです。使ったことない技術やサービスに挑戦できたので学びもたくさんありました。&lt;/p&gt;
&lt;h4&gt;ホスティング&lt;/h4&gt;
&lt;p&gt;Firebaseでサーバを用意して、独自ドメインを取得して公開できました。&lt;br&gt;
ドメインの代金とそのオプションで1700円くらいでした。それ以外にはお金はかかってません。&lt;/p&gt;
&lt;h4&gt;CMS&lt;/h4&gt;
&lt;p&gt;初めて利用するGatsbyを使って静的なサイトとして、コンテンツ作成できました。&lt;br&gt;
とても便利です。これからはマークダウン形式でメモ作成しておけば、そのまま記事にできます。&lt;/p&gt;
&lt;p&gt;静的なHTMLで公開されるので、処理も軽いはずです。
SPAなのでちょうどいい勉強です。仕組み等継続して勉強していこうと思います。&lt;/p&gt;
&lt;p&gt;React を使っているのも良い勉強になっています。案件で何度か使ったことがあったので作り始めも特に困ることはありませんでしたが、より理解が深まったと感じています。&lt;/p&gt;
&lt;p&gt;Gatsbyに関連する書籍などはあまりないようなので、ちょっと不便しています。Reactに関連する書籍はいくつかあるので、購入して読み込む予定です。&lt;/p&gt;
&lt;h3&gt;広告は審査中&lt;/h3&gt;
&lt;p&gt;AmazonとGoogleを申し込みましたが、まだ審査通過していません。速いところ審査をクリアして、少しでも収益を得たいと思います。&lt;/p&gt;
&lt;p&gt;とりあえずコンテンツの量が少ないので、記事をたくさん書こうと思います。その後、再度申請を行うつもりです。&lt;/p&gt;
&lt;h3&gt;コンテンツの作成がまだまだ&lt;/h3&gt;
&lt;p&gt;いくつかblog構築時に行ったことのメモを書きました。Gatsby関連の立ち上げの内容です。&lt;br&gt;
これからは書評を中心にコンテンツをガンガン増やすつもりです。&lt;/p&gt;
&lt;p&gt;アプリの作成、公開なども考えているので、それらの設計や構築についても残していきます。&lt;/p&gt;
&lt;h2&gt;来月の目標&lt;/h2&gt;
&lt;p&gt;可能かはわかりませんがとりあえず、来月の目標です。来月また同じような振り返りを行って反省する予定です。&lt;/p&gt;
&lt;h3&gt;収益を得る！&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;広告収益3万円を目指す&lt;/li&gt;
&lt;li&gt;iOSかAndroidどちらかでアプリ公開&lt;/li&gt;
&lt;li&gt;別カテゴリのブログ、またはWEBサイトの作成を開始&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;来月以降もしっかり振り返りを続けていこうと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[SEO関連の対応をいくつか実施]]></title><description><![CDATA[SEO対策のために以下の機能を実装しました。
すべてGatsbyのプラグインで簡単に実装できました。 sitemap.xmlの設置 RSSの設置 robots.txt…]]></description><link>https://honmushi.com/2018/10/31/sitemap/</link><guid isPermaLink="false">https://honmushi.com/2018/10/31/sitemap/</guid><pubDate>Wed, 31 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SEO対策のために以下の機能を実装しました。
すべてGatsbyのプラグインで簡単に実装できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sitemap.xmlの設置&lt;/li&gt;
&lt;li&gt;RSSの設置&lt;/li&gt;
&lt;li&gt;robots.txtの設置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;どれもオプションで詳細な設定ができる様子ですが、とりあえずデフォルトで実装しました。&lt;br&gt;
後日詳細を確認して設定を見直そうと思います。&lt;/p&gt;
&lt;h2&gt;sitemap.xmlの設置&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;npm install --save gatsby-plugin-sitemap&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;gatsby-config.js&lt;/code&gt;のpluginsに以下の記述を追加&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;&amp;#39;gatsby-plugin-sitemap&amp;#39;,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;結果&lt;code&gt;/sitemap.xml&lt;/code&gt; にサイトマップが配置されました。&lt;br&gt;
developで動かせるlocal環境では生成されていなかったので、buildした結果で確認しました。&lt;/p&gt;
&lt;p&gt;サイトマップに出力したくないディレクトリやパスを設定できるようです。&lt;br&gt;
必要そうなので後日やっておきます。&lt;/p&gt;
&lt;h2&gt;RSSの設置&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;npm install --save gatsby-plugin-feed&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;gatsby-config.js&lt;/code&gt;のpluginsに以下の記述を追加&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;&amp;#39;gatsby-plugin-feed&amp;#39;,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;結果&lt;code&gt;/rss.xml&lt;/code&gt; にフィードが配置されました。&lt;/p&gt;
&lt;p&gt;こちらもdevelopで動作するlocal環境では生成されていなかったので、buildした結果で確認しました。&lt;/p&gt;
&lt;p&gt;FeedlyなどでRSSを受け取れました！&lt;br&gt;
サイト内にリンク設置しないといけませんね。後日対応します。&lt;/p&gt;
&lt;h2&gt;robots.txtの設置&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;npm install --save gatsby-plugin-robots-txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;gatsby-config.js&lt;/code&gt;のpluginsに以下の記述を追加&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;&amp;#39;gatsby-plugin-robots-txt&amp;#39;,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;結果&lt;code&gt;/robots.txt&lt;/code&gt; に配置されました。&lt;/p&gt;
&lt;p&gt;これも同様で、developで動作するlocal環境では生成されていなかったので、buildした結果で確認しました。&lt;/p&gt;
&lt;p&gt;オプションで内容を変更できるようです。noindexなどの設定ができると思います。&lt;br&gt;
必要になったら対応します。&lt;/p&gt;
&lt;p&gt;どれも、Gatsbyのプラグインを使って簡単に実装できました。とても便利です。&lt;/p&gt;
&lt;p&gt;一通りの設定ができたら環境を記録しておいて、他のブログを立ち上げる時に再利用できるようにしようと思います。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[読書感想アウトプットを始めます]]></title><description><![CDATA[毎週…]]></description><link>https://honmushi.com/2018/10/30/tecmatome/</link><guid isPermaLink="false">https://honmushi.com/2018/10/30/tecmatome/</guid><pubDate>Tue, 30 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;毎週1冊以上本を読んで、まとめや感想などを書いていこうと思います。&lt;br&gt;
ブログのコンテンツを増やすためと自分の勉強が目的です。&lt;/p&gt;
&lt;h2&gt;読書感想アウトプット&lt;/h2&gt;
&lt;p&gt;読んだことの備忘や学習のためにも、わかりやすくまとめてアウトプットしていこうと考えました。&lt;/p&gt;
&lt;p&gt;できれば本を買ってみたくなる、または追加の情報や気づきを与えられるようなコンテンツが作れたらと思います。&lt;/p&gt;
&lt;p&gt;目標として最低でも毎週1冊以上とします。&lt;br&gt;
といっても、1冊以上書けると思いますので、上限は設けずガンガン書いていこうと思います。&lt;br&gt;
最低1冊のペースは守りたいと思います。&lt;/p&gt;
&lt;h2&gt;内容について&lt;/h2&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;どんな人におすすめか&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;br&gt;
とりあえずよくあるような内容ですが、始めていきます。&lt;/p&gt;
&lt;p&gt;WEBエンジニアとして5年半働いていましたので、実際に本の内容を試してみることもできます。&lt;br&gt;
内容をやってみて、継続してみて、どうなったかといったについても書きたいです。&lt;/p&gt;
&lt;p&gt;買ったけどよくわからなかったという方や、買おうか迷っている方の参考になればいいです。&lt;/p&gt;
&lt;h2&gt;ジャンルについて&lt;/h2&gt;
&lt;p&gt;特別こだわったジャンルにはしませんが、個人的な興味で技術書が多くなります。&lt;/p&gt;
&lt;p&gt;技術書以外の本ももちろん興味あるので、読み次第どんどん紹介していきます。&lt;br&gt;
ビジネス関連の本であったり、デザイン関連も出てくると思います。&lt;/p&gt;
&lt;p&gt;コンテンツ追加したあとは、OGP画像等の設定をしてからツイッターでも広報しようと考えています。&lt;br&gt;
RSSも設定して置きたいと思います。後日対応予定です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[アフィリエイトの審査]]></title><description><![CDATA[以前「アフィリエイトの導入」という内容を投稿しました。その続きです。 アフィリエイトプログラムに申請を行ってみました。 結論、審査通らなかったので対応を行おうと思います。 基本的には以下の広告を利用する方針 Amazon アソシエイト・プログラム https…]]></description><link>https://honmushi.com/2018/10/26/add/</link><guid isPermaLink="false">https://honmushi.com/2018/10/26/add/</guid><pubDate>Fri, 26 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;以前「&lt;a href=&quot;/2018/10/15/affiliate/&quot;&gt;アフィリエイトの導入&lt;/a&gt;」という内容を投稿しました。その続きです。&lt;/p&gt;
&lt;p&gt;アフィリエイトプログラムに申請を行ってみました。&lt;br&gt;
結論、審査通らなかったので対応を行おうと思います。&lt;/p&gt;
&lt;h2&gt;基本的には以下の広告を利用する方針&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Amazon アソシエイト・プログラム&lt;br&gt;
&lt;a href=&quot;https://affiliate.amazon.co.jp&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://affiliate.amazon.co.jp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;google アドセンス&lt;br&gt;
&lt;a href=&quot;https://www.google.co.jp/adsense/start/#/?modal_active=none&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.google.co.jp/adsense/start/#/?modal_active=none&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記に審査を依頼しています。&lt;/p&gt;
&lt;h2&gt;不合格通知が届きました&lt;/h2&gt;
&lt;p&gt;Amazonの方は翌日に不合格の通知が来ました。&lt;br&gt;
ざっくりとは「コンテンツが少ないため判断不能」とのことです。&lt;/p&gt;
&lt;p&gt;Googleの方はまだ審査中とのことです。&lt;/p&gt;
&lt;h2&gt;対応について&lt;/h2&gt;
&lt;p&gt;アフィリエイトの導入は行いたいので、対応を検討します。&lt;br&gt;
まずは言われたとおりコンテンツの拡充を行います。&lt;/p&gt;
&lt;p&gt;本格的にコンテンツを書いていくことになりそうです。
目標として３０記事くらい作って再申請の依頼を行う予定です。&lt;br&gt;
1記事内の文字数も1000文字くらいが目安らしいので、そのへん考えながら書いていこうと思います。&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;RSSフィード作成&lt;/li&gt;
&lt;li&gt;サイトマップ作成&lt;/li&gt;
&lt;li&gt;プライバシーポリシーの追記&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[SNSのシェアボタン・リンクを設置]]></title><description><![CDATA[各SNSへのシェアボタンやSNSアカウントへのリンクを設置します。   できればGatsbyのプラグインを有効に利用して、実装できないか調査します。 SNSシェアボタンを設置 react-shareのプラグインを利用しました。 https://github.com/nygardk…]]></description><link>https://honmushi.com/2018/10/25/sns/</link><guid isPermaLink="false">https://honmushi.com/2018/10/25/sns/</guid><pubDate>Thu, 25 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;各SNSへのシェアボタンやSNSアカウントへのリンクを設置します。  &lt;/p&gt;
&lt;p&gt;できればGatsbyのプラグインを有効に利用して、実装できないか調査します。&lt;/p&gt;
&lt;h2&gt;SNSシェアボタンを設置&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;react-share&lt;/code&gt;のプラグインを利用しました。&lt;br&gt;
&lt;a href=&quot;https://github.com/nygardk/react-share&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/nygardk/react-share&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;上記をnpmでインストールします。&lt;/li&gt;
&lt;/ul&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 react-share --save&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;シェアボタンを実装する箇所で以下のコードを追加します。&lt;/li&gt;
&lt;/ul&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 {
	  FacebookShareButton,
	  GooglePlusShareButton,
	  LinkedinShareButton,
	  TwitterShareButton,
	  FacebookIcon,
	  TwitterIcon,
	  GooglePlusIcon,
	  LinkedinIcon,
} from &amp;#39;react-share&amp;#39;;&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;&amp;lt;FacebookShareButton url={postUrl}&amp;gt;
    &amp;lt;FacebookIcon size={32} round /&amp;gt;
&amp;lt;/FacebookShareButton&amp;gt;
&amp;lt;GooglePlusShareButton url={postUrl}&amp;gt;
    &amp;lt;GooglePlusIcon size={32} round /&amp;gt;
&amp;lt;/GooglePlusShareButton&amp;gt;
&amp;lt;LinkedinShareButton url={postUrl}&amp;gt;
    &amp;lt;LinkedinIcon title={post.frontmatter.title} size={32} round /&amp;gt;
&amp;lt;/LinkedinShareButton&amp;gt;
&amp;lt;TwitterShareButton title={post.frontmatter.title} via=&amp;quot;koshihonmushi&amp;quot; url={postUrl}&amp;gt;
    &amp;lt;TwitterIcon size={32} round /&amp;gt;
&amp;lt;/TwitterShareButton&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上記指定でシェアボタンが表示されます。   &lt;/p&gt;
&lt;p&gt;&lt;code&gt;url&lt;/code&gt;には記事のURLを指定します。&lt;br&gt;
&lt;code&gt;title&lt;/code&gt;には記事のタイトルを指定します。&lt;/p&gt;
&lt;h2&gt;SNSへのリンクを設置&lt;/h2&gt;</content:encoded></item><item><title><![CDATA[アナリティクスの導入]]></title><description><![CDATA[googleアナリティクスを導入します。 SEOとかアフィリエイトを導入するに当たって、流入であったり効果を測定する目的で導入します。 いろいろなデータを見ながら効果的に施策・運用を行えるようになりたいです。 結論 Gatsbyを使っている場合、プラグインgatsby…]]></description><link>https://honmushi.com/2018/10/19/analytics/</link><guid isPermaLink="false">https://honmushi.com/2018/10/19/analytics/</guid><pubDate>Fri, 19 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;googleアナリティクスを導入します。&lt;/p&gt;
&lt;p&gt;SEOとかアフィリエイトを導入するに当たって、流入であったり効果を測定する目的で導入します。&lt;br&gt;
いろいろなデータを見ながら効果的に施策・運用を行えるようになりたいです。&lt;/p&gt;
&lt;h2&gt;結論&lt;/h2&gt;
&lt;p&gt;Gatsbyを使っている場合、プラグイン&lt;code&gt;gatsby-plugin-google-analytics&lt;/code&gt;を利用することで簡単に実装できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アナリティクスでトラッキングID取得&lt;/li&gt;
&lt;li&gt;プラグインを導入&lt;/li&gt;
&lt;li&gt;gatsby-config.jsを編集&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただしシングルページアップリケーションの場合は特別な対処が必要そう。
&lt;a href=&quot;https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications?hl=ja&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;非同期でURLが変わるタイミングで効果を取得するようにjsで対応する必要がありそうです。&lt;br&gt;
後日対応します。&lt;/p&gt;
&lt;h2&gt;参考&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://analytics.google.com/analytics/web/provision/?authuser=0#/provision&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://analytics.google.com/analytics/web/provision/?authuser=0#/provision&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;すること&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Google アナリティクスに申し込む&lt;br&gt;
上記のサイトから進んで申し込み完了
ドメインなど必要な情報を登録します。&lt;br&gt;
トラッキングIDが発行されます。  &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;トラッキング コードを追加する&lt;br&gt;
通常はグローバルサイトタグという項目内のスクリプトをコピーしてサイトの&lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt;タグに貼り付けることで利用できるようです。&lt;br&gt;
Gatsbyの場合は専用のプラグインがある様子なので、それを利用します。&lt;/p&gt;
&lt;p&gt;gatsby-plugin-google-analytics&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;gatsby-config.js&lt;/code&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;{
    resolve: &amp;#39;gatsby-plugin-google-analytics&amp;#39;,
    options: {
        trackingId: &amp;#39;ここにはトラッキングIDを挿入する&amp;#39;,
    },
},&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;オーディエンスの詳細を確認する&lt;br&gt;
localの環境ではアナリティクスのタグは出力されない様子。&lt;br&gt;
&lt;code&gt;gatsby build&lt;/code&gt;した結果のソースに出力されるので、そちらで確認する。&lt;/li&gt;
&lt;li&gt;SPA用の対応を導入する&lt;br&gt;
以下のページに記載されているような内容が必要そうです。&lt;br&gt;
調査した上で対応してみます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications?hl=ja&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;SPAの対応ができていなさそう？&lt;/h2&gt;
&lt;p&gt;シングルページアップリケーションの場合は特別な対処が必要そう。
&lt;a href=&quot;https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications?hl=ja&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;非同期でURLが変わるタイミングで効果を取得するようにjsで対応する必要がありそうです。&lt;br&gt;
後日対応します。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[SEOタグの設計]]></title><description><![CDATA[アフィリエイトの導入にむけて、SEO関連の対応を進めます。 いくつかやるべきことがるので列挙しつつ設計を進めていきます。 SEO検索ワードの設計 各種メタタグの設計 サイトマップ カテゴリ・タグ一覧ページの作成 PWA…]]></description><link>https://honmushi.com/2018/10/17/seotag/</link><guid isPermaLink="false">https://honmushi.com/2018/10/17/seotag/</guid><pubDate>Wed, 17 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;アフィリエイトの導入にむけて、SEO関連の対応を進めます。&lt;br&gt;
いくつかやるべきことがるので列挙しつつ設計を進めていきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SEO検索ワードの設計&lt;/li&gt;
&lt;li&gt;各種メタタグの設計&lt;/li&gt;
&lt;li&gt;サイトマップ&lt;/li&gt;
&lt;li&gt;カテゴリ・タグ一覧ページの作成&lt;/li&gt;
&lt;li&gt;PWA対応&lt;/li&gt;
&lt;li&gt;記事の作成時の見出し等のルール・フォーマット&lt;/li&gt;
&lt;li&gt;noindexの解除&lt;/li&gt;
&lt;li&gt;analiticsの導入・設定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それなりにGatsbyが対応してくれる様子だが、それぞれ詳細な実装を確認しておきたい。&lt;/p&gt;
&lt;p&gt;他にも対応必要なことがありそうだが一旦これらを対応をした後に、
「noindexの解除」を行い、googleにインデックスしてもらいます。&lt;/p&gt;
&lt;h2&gt;各種メタタグの設計&lt;/h2&gt;
&lt;h4&gt;title&lt;/h4&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;サイト名 | ページ名&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;keywords&lt;/h4&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;いくつかのキーワードをカンマ区切りで、
記事ページではtagとカテゴリの内容を出力する&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;description&lt;/h4&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;サイト内で固定の内容か？
記事ページでは記事の要約を記載する？&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;icon&lt;/h4&gt;
&lt;p&gt;それっぽい画像を作る。&lt;/p&gt;
&lt;h4&gt;ogp タグ&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;&amp;lt;meta name=&amp;quot;twitter:card&amp;quot; content=&amp;quot;summary_large_image&amp;quot;&amp;gt;
&amp;lt;meta name=&amp;quot;twitter:creator&amp;quot; content=&amp;quot;&amp;quot;&amp;gt;
&amp;lt;meta name=&amp;quot;twitter:site&amp;quot; content=&amp;quot;&amp;quot;&amp;gt;
&amp;lt;meta name=&amp;quot;twitter:title&amp;quot; content=&amp;quot;&amp;quot;&amp;gt;
&amp;lt;meta name=&amp;quot;twitter:image&amp;quot; content=&amp;quot;&amp;quot;&amp;gt;
&amp;lt;link rel=&amp;quot;canonical&amp;quot; href=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;link rel=&amp;#39;dns-prefetch&amp;#39; href=&amp;#39;&amp;#39; /&amp;gt;
&amp;lt;link rel=&amp;#39;https://api.w.org/&amp;#39; href=&amp;#39;&amp;#39; /&amp;gt;
&amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/json+oembed&amp;quot; href=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;text/xml+oembed&amp;quot; href=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:title&amp;quot; content=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:description&amp;quot; content=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:type&amp;quot; content=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:url&amp;quot; content=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:image&amp;quot; content=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:site_name&amp;quot; content=&amp;quot;&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:locale&amp;quot; content=&amp;quot;ja_JP&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;fb:app_id&amp;quot; content=&amp;quot;&amp;quot;&amp;gt;
&amp;lt;link rel=&amp;quot;icon&amp;quot; href=&amp;quot;&amp;quot; sizes=&amp;quot;32x32&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こちら実相しました。React-helmetというプラグインを使って簡単に実装できました。&lt;/p&gt;
&lt;p&gt;基本的にOGPタグの対応は完了しています。SEO関連の対策はコンテンツ的な話で他にもいろいろできますので、順次そちらに取り組んでいく予定です。&lt;/p&gt;
&lt;p&gt;OGP画像は固定になっています。できれば記事ごとに異なる画像を設定したいですが、ちょっと様子見です。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[アフィリエイトの導入]]></title><description><![CDATA[ブログ動かすにあたって、ドメインの料金などの出費もあります。 できれば黒字にしたいのでアフィリエイト等の広告を掲載して収益を得ようと思います。 基本的には以下の広告を利用する方針 Amazon アソシエイト・プログラム https://affiliate.amazon.co.jp…]]></description><link>https://honmushi.com/2018/10/15/affiliate/</link><guid isPermaLink="false">https://honmushi.com/2018/10/15/affiliate/</guid><pubDate>Mon, 15 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ブログ動かすにあたって、ドメインの料金などの出費もあります。&lt;br&gt;
できれば黒字にしたいのでアフィリエイト等の広告を掲載して収益を得ようと思います。&lt;/p&gt;
&lt;h2&gt;基本的には以下の広告を利用する方針&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Amazon アソシエイト・プログラム&lt;br&gt;
&lt;a href=&quot;https://affiliate.amazon.co.jp&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://affiliate.amazon.co.jp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;google アドセンス&lt;br&gt;
&lt;a href=&quot;https://www.google.co.jp/adsense/start/#/?modal_active=none&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.google.co.jp/adsense/start/#/?modal_active=none&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;メジャーな奴を利用したいです。他に便利な奴などあれば採用してレビューしていきたいですが、一旦これらを利用する方針です。&lt;/p&gt;
&lt;p&gt;導入に向けては審査などあると思いますので、そのあたりの対応など後日記載していきます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[画像の埋め込み]]></title><description><![CDATA[コンテンツ内に画像を表示したいです。 Gatsbyかつマークダウンでどうやってやるのか実装してみます。 以下の方法で試してみるがうまく行かず。 画像を静的コンテンツ設置ディレクトリに設置 マークダウンと同じディレクトリsrc/pages…]]></description><link>https://honmushi.com/2018/10/12/image/</link><guid isPermaLink="false">https://honmushi.com/2018/10/12/image/</guid><pubDate>Fri, 12 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;コンテンツ内に画像を表示したいです。&lt;br&gt;
Gatsbyかつマークダウンでどうやってやるのか実装してみます。&lt;/p&gt;
&lt;h2&gt;以下の方法で試してみるがうまく行かず。&lt;/h2&gt;
&lt;h3&gt;画像を静的コンテンツ設置ディレクトリに設置&lt;/h3&gt;
&lt;p&gt;マークダウンと同じディレクトリ&lt;code&gt;src/pages/&lt;/code&gt;に画像を設置しました。&lt;/p&gt;
&lt;h3&gt;マークダウン内に上記URLを指定してimgタグを記載&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;![My Image](./image.jpg)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;マークダウンと同じディレクトリに静的コンテンツとして出力されるのではないか。&lt;br&gt;
やってみた結果、表示できず。  &lt;/p&gt;
&lt;p&gt;imgタグの参照先は以下になっており、想定と異なっていました。&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;/2018/10/12/image/image.jpg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この記事のURLは以下&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;/2018/10/12/image/&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;/2018/10/12/image.jpg  

Cannot GET /2018/10/12/image.jpg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6983da75cf1969c5793ade3e3a333177/92987/image.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDAf/EABUBAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAFl2UqkCn//xAAbEAEBAAIDAQAAAAAAAAAAAAABAgADERITIf/aAAgBAQABBQIFn5FO7qybHG3n0ic//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFhEAAwAAAAAAAAAAAAAAAAAAEBEh/9oACAECAQE/Aax//8QAGxAAAgIDAQAAAAAAAAAAAAAAAAERIQIicTH/2gAIAQEABj8C8ay4QylJwtWjfCWf/8QAGhABAQEBAQEBAAAAAAAAAAAAAREAIUExUf/aAAgBAQABPyHoECRweoQPTWwb7dUkBd7836Fc91TVWrd//9oADAMBAAIAAwAAABDcz//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/EFf/xAAWEQEBAQAAAAAAAAAAAAAAAAAAQRH/2gAIAQIBAT8QhGP/xAAdEAEBAAIDAAMAAAAAAAAAAAABEQAhQVGBYZHh/9oACAEBAAE/EAHKERObT9xSFcanw+MYvFSd18yaMAfqbyuRA6bhsam8Dfc6L6dZ/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;My Image&quot;
        title=&quot;My Image&quot;
        src=&quot;/static/6983da75cf1969c5793ade3e3a333177/1c72d/image.jpg&quot;
        srcset=&quot;/static/6983da75cf1969c5793ade3e3a333177/a80bd/image.jpg 148w,
/static/6983da75cf1969c5793ade3e3a333177/1c91a/image.jpg 295w,
/static/6983da75cf1969c5793ade3e3a333177/1c72d/image.jpg 590w,
/static/6983da75cf1969c5793ade3e3a333177/a8a14/image.jpg 885w,
/static/6983da75cf1969c5793ade3e3a333177/fbd2c/image.jpg 1180w,
/static/6983da75cf1969c5793ade3e3a333177/92987/image.jpg 1478w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;プラグイン入れたらできるのか？&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;gatsby-remark-images&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;このプラグインが画像をいい感じにしてくれるらしいです。次回やってみます。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[画像挿入用プラグインの導入]]></title><description><![CDATA[前回の【画像の埋め込み】 の記事の続きです。 記事内への画像挿入がうまくできなかったので、画像用のプラグインを導入してみます。 gatsby-remark-imagesを使ってみる npmで必要なプラグインをインストール https://github.com/gatsbyjs…]]></description><link>https://honmushi.com/2018/10/12/imageplugin/</link><guid isPermaLink="false">https://honmushi.com/2018/10/12/imageplugin/</guid><pubDate>Fri, 12 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前回の&lt;a href=&quot;/2018/10/12/image/&quot;&gt;【画像の埋め込み】&lt;/a&gt; の記事の続きです。&lt;/p&gt;
&lt;p&gt;記事内への画像挿入がうまくできなかったので、画像用のプラグインを導入してみます。&lt;/p&gt;
&lt;h2&gt;gatsby-remark-imagesを使ってみる&lt;/h2&gt;
&lt;h3&gt;npmで必要なプラグインをインストール&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images&lt;/a&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 --save install gatsby-remark-images gatsby-plugin-sharp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;gatsby-config.jsに以下内容を追加&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;  `gatsby-plugin-sharp`,
  {
    resolve: `gatsby-transformer-remark`,
    options: {
      plugins: [
        {
          resolve: `gatsby-remark-images`,
          options: {
            // It&amp;#39;s important to specify the maxWidth (in pixels) of
            // the content container as this plugin uses this as the
            // base for generating different widths of each image.
            maxWidth: 590,
          },
        },
      ],
    },
  },&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;表示できるようになった様子。&lt;/p&gt;
&lt;p&gt;mdファイルと同じ場所に画像を配置すれば、
前回の&lt;a href=&quot;/2018/10/12/image/&quot;&gt;【画像の埋め込み】&lt;/a&gt; の記事のやり方で問題なく表示できるようになった。&lt;/p&gt;
&lt;h3&gt;画像を静的コンテンツ設置ディレクトリに設置&lt;/h3&gt;
&lt;p&gt;マークダウンと同じディレクトリに画像を設置しました。&lt;/p&gt;
&lt;h3&gt;マークダウン内に上記URLを指定してimgタグを記載&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;![My Image](./image.jpg)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6983da75cf1969c5793ade3e3a333177/92987/image.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDAf/EABUBAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAFl2UqkCn//xAAbEAEBAAIDAQAAAAAAAAAAAAABAgADERITIf/aAAgBAQABBQIFn5FO7qybHG3n0ic//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFhEAAwAAAAAAAAAAAAAAAAAAEBEh/9oACAECAQE/Aax//8QAGxAAAgIDAQAAAAAAAAAAAAAAAAERIQIicTH/2gAIAQEABj8C8ay4QylJwtWjfCWf/8QAGhABAQEBAQEBAAAAAAAAAAAAAREAIUExUf/aAAgBAQABPyHoECRweoQPTWwb7dUkBd7836Fc91TVWrd//9oADAMBAAIAAwAAABDcz//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/EFf/xAAWEQEBAQAAAAAAAAAAAAAAAAAAQRH/2gAIAQIBAT8QhGP/xAAdEAEBAAIDAAMAAAAAAAAAAAABEQAhQVGBYZHh/9oACAEBAAE/EAHKERObT9xSFcanw+MYvFSd18yaMAfqbyuRA6bhsam8Dfc6L6dZ/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;My Image&quot;
        title=&quot;My Image&quot;
        src=&quot;/static/6983da75cf1969c5793ade3e3a333177/1c72d/image.jpg&quot;
        srcset=&quot;/static/6983da75cf1969c5793ade3e3a333177/a80bd/image.jpg 148w,
/static/6983da75cf1969c5793ade3e3a333177/1c91a/image.jpg 295w,
/static/6983da75cf1969c5793ade3e3a333177/1c72d/image.jpg 590w,
/static/6983da75cf1969c5793ade3e3a333177/a8a14/image.jpg 885w,
/static/6983da75cf1969c5793ade3e3a333177/fbd2c/image.jpg 1180w,
/static/6983da75cf1969c5793ade3e3a333177/92987/image.jpg 1478w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;画像のパスは以下のようになっており、&lt;code&gt;/static/&lt;/code&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;/static/image-63f8d35deb28cd32cef133e59100e5e5-f8fb9.jpg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[ドメインの取得・Firebaseへの設定]]></title><description><![CDATA[ブログ開設ということで、ドメインの取得を行いました。 広告を設置したり、グーグルアナリティクスで分析などやりたいので必要でしょう。 ドメインをお名前ドットコムにて取得 取得したい文字列で検索して、すでに存在していないかチェック。 今回は「honmushi…]]></description><link>https://honmushi.com/2018/10/10/domain/</link><guid isPermaLink="false">https://honmushi.com/2018/10/10/domain/</guid><pubDate>Wed, 10 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ブログ開設ということで、ドメインの取得を行いました。&lt;br&gt;
広告を設置したり、グーグルアナリティクスで分析などやりたいので必要でしょう。&lt;/p&gt;
&lt;h2&gt;ドメインをお名前ドットコムにて取得&lt;/h2&gt;
&lt;p&gt;取得したい文字列で検索して、すでに存在していないかチェック。&lt;br&gt;
今回は「&lt;strong&gt;honmushi&lt;/strong&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;契約時にいくつかオプションがありました。ドメインごとにいろいろ設定できます。
後日まとめます。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Firebaseでドメイン接続&lt;/h2&gt;
&lt;h3&gt;ドメインの所有権の確認&lt;/h3&gt;
&lt;p&gt;Firebaseの管理画面で、契約したドメインを設定します。&lt;/p&gt;
&lt;p&gt;ドメインを所持していることを確認するために、合言葉をドメインサービスで設定します。&lt;br&gt;
Firebaseから問い合わせさせて合言葉を確認することで、ドメインを所有していることが認められます。&lt;/p&gt;
&lt;p&gt;[Firebase]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hostingのメニューから、「&lt;strong&gt;ドメインを接続&lt;/strong&gt;」ボタンを選択&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ドメインの入力を求められるので、先ほど契約したドメイン文字列を入力&lt;/p&gt;
&lt;p&gt;「&lt;strong&gt;〇〇を既存のウェブサイトにリダイレクトする&lt;/strong&gt;」の設定は、www.付きのURLの解決や、複数ドメインが存在するときの解決として利用するようです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TXTレコードが表示されるので、値の部分をコピーする&lt;/p&gt;
&lt;p&gt;これが合言葉になります。
「&lt;strong&gt;google-・・・・&lt;/strong&gt;」の部分から全部必要です。まるごとコピーしましょう。  &lt;/p&gt;
&lt;/li&gt;
&lt;li&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[ドメインサービス]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ドメイン管理画面（お名前ドットコム）で上記のTXTレコードを登録&lt;/p&gt;
&lt;p&gt;DNS関連機能設定から「DNSレコード設定」へ&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;TYPE:TXT
VALUE:「コピーした文字列」
状態:有効&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;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ドメイン接続の実行&lt;/h3&gt;
&lt;p&gt;[Firebase]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hostingのメニューから、「&lt;strong&gt;ドメインを接続&lt;/strong&gt;」ボタンを選択&lt;/li&gt;
&lt;li&gt;ドメインの入力を求められるので、先ほど契約したドメイン文字列を入力&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;「&lt;strong&gt;確認&lt;/strong&gt;」ボタンを押します。&lt;/p&gt;
&lt;p&gt;十分に時間が立っていれば、Firebaseがドメインに問い合わせを行い、合言葉で認証されます。&lt;br&gt;
ドメインの所有権が認められれば次に進めます。&lt;/p&gt;
&lt;p&gt;認証されない場合は、もうしばらく待ってから繰り返し操作します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Aレコードに設定するIPアドレスが表示されます。&lt;/p&gt;
&lt;p&gt;このIPアドレスをドメインとひも付けます。メモしましょう。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[ドメインサービス]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ドメイン管理画面（お名前ドットコム）で上記のAレコードを登録&lt;/p&gt;
&lt;p&gt;DNS関連機能設定から「DNSレコード設定」へ&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;TYPE:A
VALUE:IPアドレス
状態:有効&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;十分に時間が経ってからドメインにアクセスすると、Firebaseにホスティングしているサイトが表示されるようになります。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SSH証明書&lt;/h2&gt;
&lt;p&gt;ドメインが接続できたのでSSH証明書も設定したい。
Firebase側が用意してくれる様子なので、一旦それで済ませることにします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://firebase.google.com/docs/hosting/custom-domain&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://firebase.google.com/docs/hosting/custom-domain&lt;/a&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;認証レベルがわからないので後日調べて記載します。ドメインでしょうかね。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;待っていればそのうち反映される様子なので待ちます。&lt;br&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;This page is secure (valid HTTPS).&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Firebaseの管理画面では以下の表示になったら反映済みの様子です。&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c35d7851b774576d7d3166685a50b029/614df/domain.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 26.351351351351354%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAFABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAIEBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdewEAf/xAAXEAADAQAAAAAAAAAAAAAAAAAAAQIR/9oACAEBAAEFAoe0Yj//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAQ/9oACAEBAAY/An//xAAXEAADAQAAAAAAAAAAAAAAAAAAARFB/9oACAEBAAE/IWsTwhLD/9oADAMBAAIAAwAAABCDz//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/EEf/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAgEBPxBX/8QAGBABAAMBAAAAAAAAAAAAAAAAAQARUSH/2gAIAQEAAT8QXZQObKZFDQL6z//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;ドメイン反映済み&quot;
        title=&quot;ドメイン反映済み&quot;
        src=&quot;/static/c35d7851b774576d7d3166685a50b029/1c72d/domain.jpg&quot;
        srcset=&quot;/static/c35d7851b774576d7d3166685a50b029/a80bd/domain.jpg 148w,
/static/c35d7851b774576d7d3166685a50b029/1c91a/domain.jpg 295w,
/static/c35d7851b774576d7d3166685a50b029/1c72d/domain.jpg 590w,
/static/c35d7851b774576d7d3166685a50b029/a8a14/domain.jpg 885w,
/static/c35d7851b774576d7d3166685a50b029/614df/domain.jpg 978w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[タグとカテゴリーの実装]]></title><description><![CDATA[将来ページが増えていくことを想定して、以下を実装しようと思います。 タグとカテゴリーをコンテンツに設定 それぞれの情報からアクセスするための一覧ページを作成 各記事内にカテゴリーやタグのリンクを設置 タグとカテゴリーをコンテンツに設定 これは.mdファイルのfrontmatter…]]></description><link>https://honmushi.com/2018/10/10/tagscategory/</link><guid isPermaLink="false">https://honmushi.com/2018/10/10/tagscategory/</guid><pubDate>Wed, 10 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&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;h2&gt;タグとカテゴリーをコンテンツに設定&lt;/h2&gt;
&lt;p&gt;これは&lt;strong&gt;.md&lt;/strong&gt;ファイルのfrontmatterにそれぞれ追加します。
以降記事を書くときに設定することにします。&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;---
title : &amp;#39;タグとカテゴリーの実装&amp;#39;
date : &amp;#39;2018-10-10&amp;#39;
tags : &amp;#39;実装,Gatsby,ブログ構築&amp;#39;
category : &amp;#39;blog&amp;#39;
---&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コンテンツが増加した時に管理が面倒になりそうなので、再設定・管理できる仕組みを考えたいです。&lt;br&gt;
&lt;em&gt;タグの追加や削除、カテゴリーの再整理など&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;一覧ページの実装&lt;/h2&gt;
&lt;p&gt;カテゴリーやタグの一覧ページを作ります。&lt;br&gt;
何らかの方法で渡したカテゴリーの文字列を使って記事を絞り込んで取得して、一覧で表示します。&lt;br&gt;
投稿日の降順にします。&lt;/p&gt;
&lt;h2&gt;カテゴリーやタグのリンク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;コンテンツテンプレートにGraphQLでfrontmatterからtagsとcategoryを取得できるように追加&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;上記の内容を出力するようにHTMLに追加&lt;/p&gt;
&lt;p&gt;タグの部分は一覧ページへのリンクにする&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[プライバシーポリシー]]></title><description><![CDATA[個人情報の保護について 「https://honmushi.com…]]></description><link>https://honmushi.com/privacypolicy/</link><guid isPermaLink="false">https://honmushi.com/privacypolicy/</guid><pubDate>Fri, 05 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;個人情報の保護について&lt;/h2&gt;
&lt;p&gt;「&lt;code&gt;https://honmushi.com&lt;/code&gt;」（以下、当サイト）を利用される方は、以下に記載する諸条件に同意したものとみなします。&lt;/p&gt;
&lt;br&gt;
&lt;h3&gt;個人情報の収集について&lt;/h3&gt;
&lt;p&gt;利用者は匿名のままで、当サイトを自由に閲覧する事ができます。&lt;br&gt;
お問合せ等、場合によっては、利用者の氏名やメールアドレスなどの個人情報の開示をお願いする事があります。&lt;br&gt;
しかし、利用者の個人情報を利用者の許可なく、当サイトから第三者へ開示・共有する事はありません。&lt;/p&gt;
&lt;br&gt;
&lt;h3&gt;広告の配信について&lt;/h3&gt;
&lt;h4&gt;Google アドセンス&lt;/h4&gt;
&lt;p&gt;当サイトはGoogle及びGoogleのパートナーウェブサイト（第三者配信事業者）の提供する広告を設置しております。その広告配信にはCookieを使用し、当サイトを含めた過去のアクセス情報に基づいて広告を配信します。&lt;/p&gt;
&lt;p&gt;DoubleClick Cookie を使用することにより、GoogleやGoogleのパートナーは当サイトや他のサイトへのアクセス情報に基づいて、適切な広告を当サイト上でお客様に表示できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://adssettings.google.com/u/0/authenticated?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Googleアカウントの広告設定ページ&lt;/a&gt;で、パーソナライズ広告の掲載に使用される DoubleClick Cookie を無効にできます。また &lt;a href=&quot;https://www.aboutads.info&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;aboutads.info&lt;/a&gt; にアクセスして、パーソナライズ広告の掲載に使用される第三者配信事業者のCookieを無効にできます。&lt;/p&gt;
&lt;p&gt;その他、Googleの広告におけるCookieの取り扱いについての詳細については、&lt;a href=&quot;ihttps://policies.google.com/technologies/ads?hl=ja&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Googleのポリシーと規約ページ&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;Amazon アソシエイト&lt;/h4&gt;
&lt;p&gt;「Honmushi blog」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。&lt;/p&gt;
&lt;br&gt;
&lt;h3&gt;ウェブサーバの記録&lt;/h3&gt;
&lt;p&gt;当サイトのウェブサーバは、利用者のコンピュータのIPアドレスを自動的に収集・記録しますが、これらは利用者個人を特定するものではありません。&lt;br&gt;
利用者が自ら個人情報を開示しない限り、利用者は匿名のままで、当サイトを自由に閲覧する事ができます。&lt;/p&gt;
&lt;br&gt;
&lt;h3&gt;免責事項&lt;/h3&gt;
&lt;p&gt;利用者は、当サイトを閲覧し、その内容を参照した事によって何かしらの損害を被った場合でも、当サイト管理者は責任を負いません。&lt;br&gt;
また、当サイトからリンクされた、当サイト以外のウェブサイトの内容やサービスに関して、当サイトの個人情報の保護についての諸条件は適用されません。&lt;br&gt;
当サイト以外のウェブサイトの内容及び、個人情報の保護に関しても、当サイト管理者は責任を負いません。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ブログのカラーテーマを考える]]></title><description><![CDATA[デザインするにあたって大まかな色使いを決めます。
結論暫定的に以下にします。 sky
75b1a9 sunglow
d9b44a mountains 
4f6457 mist
acd0c…]]></description><link>https://honmushi.com/2018/10/05/color/</link><guid isPermaLink="false">https://honmushi.com/2018/10/05/color/</guid><pubDate>Fri, 05 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;デザインするにあたって大まかな色使いを決めます。
結論暫定的に以下にします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=color:#75b1a9;&gt;sky
75b1a9&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=color:#d9b44a;&gt;sunglow
d9b44a&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=color:#4f6457;&gt;mountains
4f6457&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=color:#acd0c0;&gt;mist
acd0c0&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;後々変更すると思いますが、一旦これで開始します。
あまりに色がないと寂しいので。&lt;/p&gt;
&lt;p&gt;前衛的なものでなく、見やすさを重視したいです。
それっぽくスタイルを更新していきます。&lt;/p&gt;
&lt;h2&gt;大きなイメージはスタイリッシュ＆レトロ&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;sky
75b1a9&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;sunglow
d9b44a&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;mountains 
4f6457&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;mist
acd0c0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;霧です。&lt;/p&gt;
&lt;p&gt;色のイメージは結構適当です。日々運用していく中でいいデザインを見つけたら真似して変更するかもしれません。あまりころころ変えないようにしますが、久しぶりに訪れたらデザイン変わっていたということもあるかもしれませんのでご了承ください。&lt;/p&gt;
&lt;h2&gt;Gatsby のスタイルの定義&lt;/h2&gt;
&lt;p&gt;いい感じにコンポーネント化されている？様子なので、勘所掴みつつ修正していきます。
現在、大まかなスタイルは「layout.css」に定義されており、各レイアウトパーツのスタイルはインラインで記載されている様子です。&lt;/p&gt;
&lt;p&gt;意図的にそうなっているのだと思いますがどうなのでしょうか。いろいろ調査してみます。&lt;/p&gt;
&lt;h3&gt;スタイルの定義&lt;/h3&gt;
&lt;p&gt;いったんtypography.jsに追加しました。
typographyで選択しているテーマ内のスタイルを上書きできる書き方があったのでそれを試しています。
それっぽくはなっていますがどうなのでしょうか。&lt;/p&gt;
&lt;p&gt;あまりあちこちに書くのは運用するに当たって良くないので一元化したいのですが、なかなか難しいです。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[プロフィール]]></title><description><![CDATA[自己紹介 石川県在住のフリーランスエンジニアです。 「自分の仕事をつくる」という目標を掲げ、IT…]]></description><link>https://honmushi.com/profile/</link><guid isPermaLink="false">https://honmushi.com/profile/</guid><pubDate>Thu, 04 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;自己紹介&lt;/h2&gt;
&lt;p&gt;石川県在住のフリーランスエンジニアです。&lt;br&gt;
「自分の仕事をつくる」という目標を掲げ、IT関連の仕事・勉強・活動に取り組んでいます。&lt;br&gt;
石川県の野々市市という小さな市に住んでます。&lt;/p&gt;
&lt;p&gt;ざっくり得意なことをあげると、以下になります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ビジネス成功に向けたデータ解析・改善の検討&lt;/li&gt;
&lt;li&gt;Webシステムの設計・開発・運用&lt;/li&gt;
&lt;li&gt;スマホアプリのUI/UX設計・開発&lt;/li&gt;
&lt;li&gt;RDBを始めとするデータベースの設計・開発&lt;/li&gt;
&lt;li&gt;読書と面白かった書籍の紹介&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;略歴&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;2013年〜2018年&lt;br&gt;
Web系コンサルティング会社にてシステムエンジニア&lt;/li&gt;
&lt;li&gt;2018年〜&lt;br&gt;
フリーランスで活動&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;コンサルティング会社にて&lt;/h3&gt;
&lt;p&gt;新卒入社した京都の企業で2013年から2018年まで、大規模Webシステムのコンサルティングを始め、運用・構築など幅広く携わっていました。&lt;/p&gt;
&lt;p&gt;規模の大きいサイトでサーバ運用や改善の実装などの対応を行うともに、顧客の抱える問題を解決するためのコンサルティングも担当しました。&lt;/p&gt;
&lt;p&gt;大規模DBの設計・開発・運用。各種サーバの運用・メンテナンス。Webフレームワークを使った効率的な開発、大規模システムの運用などの知識と技術を身に着けました。&lt;/p&gt;
&lt;p&gt;所属していたチームはデザイナーやテスター・ディレクターといった、さまざまな職種のメンバーで構成されていました。
協調性を持ち、仲間とのコミュニケーションを積極的に進めるとともに、互いに力を発揮できる環境づくりに取り組むことを心がけることができます。
クライアントへ改善の提案や、設計・仕様のすり合わせなども担当し成果を上げていました。&lt;/p&gt;
&lt;h3&gt;フリーランスエンジニアとして&lt;/h3&gt;
&lt;p&gt;現在、出身地である石川県にてフリーランスエンジニアとして活動しています。
Webシステムの設計・構築、ホームページ・CMSの導入支援、スマホアプリの開発・UI設計やプログラミングメンターなどをやっています。&lt;/p&gt;
&lt;p&gt;前職にて身につけた、Webシステムの設計・開発の経験を活かして、現在はスマホアプリのUI設計・実装などに力を入れて取り組んでいます。
個人開発・受託開発をいくつか経験し、UI/UX設計・デザイン・ReactNativeによる実装の部分と総合的な知識と技術を持っています。&lt;/p&gt;
&lt;p&gt;ReactNative を利用したクロスプラットフォームアプリの開発・運用が得意です。&lt;/p&gt;
&lt;p&gt;他にもGoProを使ったカメラ操作アプリなどの設計・開発も経験しました。IoTなども得意です。&lt;/p&gt;
&lt;h2&gt;経験&lt;/h2&gt;
&lt;h3&gt;WEBシステムのコンサルティング・提案&lt;/h3&gt;
&lt;p&gt;クライアントが運用するサービスについて、運用代行や改善コンサルティングを担当しました。エンジニアとしての担当だったためシステム面からの懸念や提案を考え、問題の改善に取り組みました。&lt;br&gt;
エンジニアリングの知識と技術を活かして、潜在的な問題の発見とその解決を考えることができます。&lt;/p&gt;
&lt;p&gt;コンサルタントとしての考え方や仕事感も身についたため、ビジネスの成功・あるべき理想の姿をクライアントとともに考え、本当に価値のあるシステムや機能を定義して届けることができます。&lt;/p&gt;
&lt;h3&gt;WEBシステム設計・開発・運用&lt;/h3&gt;
&lt;p&gt;Webサーバ複数台・DBサーバ複数台を使用して、負荷分散を使ってリソースを有効に活用した、巨大なWebシステムの開発・運用を担当しました。&lt;/p&gt;
&lt;p&gt;日々の運用業務に加え、効果改善や提案・リニューアルの設計も担当していました。時期によってはアクセスが集中することもあり、大規模サイトならではの経験や知識を多く身につけました。&lt;/p&gt;
&lt;h3&gt;大規模RDBの設計・開発・運用&lt;/h3&gt;
&lt;p&gt;RDBを使った大規模なデータ構造の設計・開発・運用経験が有ります。&lt;br&gt;
IPAのデータベーススペシャリストの資格も所有しており、まとまった知識・経験を用いたDBの設計・運用・開発・SQLの改善も得意です。&lt;/p&gt;
&lt;p&gt;もちろん最近利用が進んでいるNoSQLなども興味を持って学習しており、それらについても案件の経験があります。&lt;/p&gt;
&lt;h3&gt;業務用CMSの設計・デザイン・構築&lt;/h3&gt;
&lt;p&gt;地域の観光サイトのCMS構築を経験しました。多言語に対応したサイトの設計を行い、Wordpressを用いて構築を行いました。&lt;br&gt;
他にもこのサイトを始めとした、いくつかのGatsbyを使った静的ブログ構築にも積極的に取り組んでいます。&lt;/p&gt;
&lt;p&gt;Wordpress以外のCMSを使ったJAMStackなブログやサイトの設計構築も得意です。&lt;/p&gt;
&lt;h3&gt;個人ブログ用のWordpress導入&lt;/h3&gt;
&lt;p&gt;個人用ブログのWordpress導入の手伝い、テーマ作成を行いました。&lt;br&gt;
システムやITに詳しくない方にもわかるように、丁寧な説明・サポートを心がけます。&lt;/p&gt;
&lt;h3&gt;企業コーポレートサイトのデザイン・ フロントエンド開発&lt;/h3&gt;
&lt;p&gt;企業のコーポレートサイトのデザイン・フロントエンド開発を担当しました。&lt;br&gt;
jestを利用したtest導入など開発をサポートする環境づくりについても知識と経験があります。&lt;/p&gt;
&lt;h3&gt;ReactNativeを使ったクロスプラットフォームアプリ開発&lt;/h3&gt;
&lt;p&gt;ReactNatvieを使ったスマホアプリ開発をチームで行いました。&lt;br&gt;
クロスプラットフォームならではの悩みやノウハウを蓄えており、チームメンバーと共有しつつ開発を効率的に進めることができます。&lt;/p&gt;
&lt;h3&gt;複数人でのスクラム開発&lt;/h3&gt;
&lt;p&gt;エンジニアとして複数人でのスクラム開発も経験しました。&lt;br&gt;
スクラム開発の考え方や意識を持つことができるとともに、考え方の頒布や伝達もできます。&lt;br&gt;
スクラム導入やスクラムマスター的な動き方も可能です。&lt;/p&gt;
&lt;h3&gt;スマホアプリのUI/UXデザイン・開発&lt;/h3&gt;
&lt;p&gt;個人開発でもアプリを作成しており、日々アプリのUI/UXデザインの研究を行っています。&lt;br&gt;
デザインの設計とアプリ開発を行えることに加えて、実践的な経験・数値に基づいた上でビジネス・開発者両方の目線でUI/UXのあり方を考えることができます。&lt;/p&gt;
&lt;h3&gt;スタートアップ企業でのアーキテクチャ設計&lt;/h3&gt;
&lt;p&gt;スタートアップ企業でのアプリのアーキテクチャの設計・相談・アドバイスなどを経験しました。&lt;br&gt;
スマホアプリのソースコード、Native層の実装なども考慮した設計を行いました。&lt;br&gt;
Webアプリケーションについても設計・レビューなど行います。&lt;/p&gt;
&lt;h3&gt;プログラミングメンター&lt;/h3&gt;
&lt;p&gt;MENTAにてプログラミングメンターをしています。Reactに関する相談が多いですが、RDBやWeb関連の知識も得意ですので幅広く解答できます。&lt;/p&gt;
&lt;p&gt;DMM WebCampにてメンターをしています。初学者に向けてもわかりやすくモチベーションも維持できるように、質問や相談などに対応しています。&lt;/p&gt;
&lt;p&gt;コンサルティング企業での業務経験があるので、問題解決やエンジニアの論理的思考の成長を心がけて教えることを意識しています。&lt;/p&gt;
&lt;h2&gt;技術&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;HTML,CSS,&lt;/li&gt;
&lt;li&gt;JavaScript,TypeScript,React,Next&lt;/li&gt;
&lt;li&gt;PHP,Ruby,ColdFusion&lt;/li&gt;
&lt;li&gt;SQLServer,MySQL&lt;/li&gt;
&lt;li&gt;WindowsServer,Linux&lt;/li&gt;
&lt;li&gt;ReactNative,Expo,Electron&lt;/li&gt;
&lt;li&gt;Firebase&lt;/li&gt;
&lt;li&gt;VBA&lt;/li&gt;
&lt;li&gt;Git,SVN,VSS&lt;/li&gt;
&lt;li&gt;Vim&lt;/li&gt;
&lt;li&gt;PhotoShop&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&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;li&gt;セキュリティスペシャリスト（現在は別の資格に変わっています）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;お問い合わせ・ご依頼&lt;/h2&gt;
&lt;p&gt;システム設計・構築を始め、アプリのUI/UX設計や開発、webサイトのデザイン・構築も行っています。&lt;br&gt;
店舗や個人の情報サイトやLPなどの制作も可能です。&lt;br&gt;
プログラミング講師やメンターなどの依頼も是非。&lt;/p&gt;
&lt;p&gt;依頼等あればtwitterなどでお問い合わせください。&lt;/p&gt;
&lt;p&gt;Twitterアカウント&lt;br&gt;
&lt;a href=&quot;https://twitter.com/koshihonmushi&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;@koshihonmushi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MENTA&lt;br&gt;
&lt;a href=&quot;https://menta.work/plan/1500&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://menta.work/plan/1500&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;趣味&lt;/h2&gt;
&lt;p&gt;プログラミング・読書・ゲーム・旅行が趣味です。&lt;/p&gt;
&lt;p&gt;もともと、WEB系のエンジニアをしていたこともあり、プログラミングに関心があります。
WEB関連の新しい技術やデザイン、UIなどについても興味を持っています。
どんどん新しい技術がでてくるので、それをキャッチするのがとても楽しいです。
数十年後の未来はどうなっているのか、妄想が膨らみます。&lt;/p&gt;
&lt;p&gt;読書については、頻繁に大型書店によって衝動買いしてます。
気に入った本についてはこの「&lt;a href=&quot;https://honmushi.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Honmushi blog&lt;/a&gt;」にて紹介していきます。
特にジャンルにこだわりはありません。何でも読みます。技術書を多くしていくつもりですが、時間かかるので後回しになってます。月に20冊、半年で120冊くらい読みました。どんどんブログに感想を書きのこします。&lt;/p&gt;
&lt;p&gt;ゲームも好きなので面白いゲームなどがあれば紹介したいです。別のブログも立ち上げていますのでそちらで紹介します。&lt;br&gt;
&lt;a href=&quot;https://betsumushi.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;別mushi blog&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;このブログについて&lt;/h2&gt;
&lt;p&gt;読書好きなエンジニアによる、WEB関連のテクニカルな情報やデザインのこと、お気に入りの本の書評や試してみたことなどを紹介するブログです。&lt;/p&gt;
&lt;p&gt;このブログはいろいろな技術の実験にも使おうと思っています。&lt;br&gt;
新しく世の中に出てくる技術をどんどん取り入れていきたいと思っています。&lt;/p&gt;
&lt;p&gt;Gatsbyを用いてHTMLを生成しており、Netlifyでホスティングしています。
コンテンツの実態はマークダウンで作っていき、仕組みの部分はどんどん改造していきます。&lt;/p&gt;
&lt;p&gt;自分の気に行ったものや好きなものについて、実際に利用・体験しておすすめすることは良いことだと思っています。
訪れてくれる皆様に少しでも有意義な情報や視点を提供できればと考えてます。&lt;/p&gt;
&lt;p&gt;よろしくお願いします。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ブログ始めます！]]></title><description><![CDATA[本日、2018年10月…]]></description><link>https://honmushi.com/2018/10/04/origin/</link><guid isPermaLink="false">https://honmushi.com/2018/10/04/origin/</guid><pubDate>Thu, 04 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本日、2018年10月4日開始です。
自分の勉強も兼ねています。有益な情報を訪れた方に提供できればと思います。&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;h2&gt;まだまだ作成中&lt;/h2&gt;
&lt;p&gt;枠組みからコンテンツまで、常に改良を続けていきたいと思います。&lt;/p&gt;
&lt;p&gt;とはいえ、目標なしにとりあえず進むのは悪手だと思っています。
目下のゴールとしては以下にしました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PV増やして広告で収入を得る&lt;/li&gt;
&lt;li&gt;それなりに見やすいUIにすること&lt;/li&gt;
&lt;li&gt;コンテンツを十分に増やしアクセス数を伸ばす&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;具体的な数値など決める必要がありますが、それは追々共有します。&lt;/p&gt;
&lt;h2&gt;このブログはGatsbyで作りました&lt;/h2&gt;
&lt;p&gt;Gatsbyを使って静的なブログを生成しています。
Reactに関する知識なども必要になるのでちょうど勉強になると思い取り入れています。&lt;/p&gt;
&lt;p&gt;まだ日本語の情報は少ない様子なので手探り感があります。
いくつも躓くポイントあると思いますが、なんとか解決して情報を載せていくつもりです。&lt;/p&gt;
&lt;h2&gt;エンジニアです&lt;/h2&gt;
&lt;p&gt;もともとWEB系のエンジニアでしたので、WEB関連の知識が多めになるつもりです。
それ以外でも気になる本とかあればジャンル問わず紹介していきます。&lt;/p&gt;
&lt;p&gt;目下の興味としてはスマホアプリの設計・構築に興味を持っています。
このブログがある程度軌道に乗ったら、アプリの勉強を初めていくつもりです。&lt;/p&gt;
&lt;p&gt;これからよろしくお願いします！&lt;/p&gt;</content:encoded></item><item><title><![CDATA[このブログについて]]></title><description><![CDATA[「ブログはじめよう！」という方や、技術関連のことで勉強中の方の参考になればと思うので、制作に関連する情報は積極的に記載していこうと思います。 このブログについて、以下の環境で作ってます。勉強の意味も込めて、これまでの業務では使ったことのないものを選択しています。 Gatsby…]]></description><link>https://honmushi.com/2018/10/04/making/</link><guid isPermaLink="false">https://honmushi.com/2018/10/04/making/</guid><pubDate>Thu, 04 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「ブログはじめよう！」という方や、技術関連のことで勉強中の方の参考になればと思うので、制作に関連する情報は積極的に記載していこうと思います。&lt;/p&gt;
&lt;p&gt;このブログについて、以下の環境で作ってます。勉強の意味も込めて、これまでの業務では使ったことのないものを選択しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gatsbyで静的なHTMLなどを生成&lt;/li&gt;
&lt;li&gt;~Firebaseにて公開~ Netlifyで公開&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;はてなブログやライブドアブログなどのブログサービスは利用していません。&lt;/p&gt;
&lt;h2&gt;選択の意図&lt;/h2&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;h3&gt;Gatsby&lt;/h3&gt;
&lt;p&gt;静的なブログを生成することになりますが、今のところは快適です。
あまりスタイルの指定など細かく付け足していくと、レンダリング後に上書きされることとかあるので注意が必要です。&lt;/p&gt;
&lt;p&gt;デフォルトで用意されているスターター（テーマのようなもの）は結構種類が存在しており、かっこいいものもあるので一通り眺めてみることをおすすめします。&lt;/p&gt;
&lt;h3&gt;Firebase&lt;/h3&gt;
&lt;p&gt;こちらもとりあえず快適です。Gatsbyで生成されるものが静的なHTMLとjsなので、FirebaseのHostingで十分配信できています。&lt;/p&gt;
&lt;p&gt;動的なコンテンツ（問い合わせフォームや検索など）は実装できなんだと思いますが、Functionを定義することもできるのでそちらを使えばもしかするとできるかもしれないです。デプロイもコマンドから簡単にできるので快適です。ロールバックも管理画面で簡単にできて良いです。&lt;/p&gt;
&lt;p&gt;現在は無料のアカウント使っています。サーバにアップロードできるファイルのサイズに制限があるので5日いっぱいになってしまうと思います。その時はAWSに移行するか、有料アカウントにするか考えようと思っています。&lt;/p&gt;
&lt;h3&gt;Netlify&lt;/h3&gt;
&lt;p&gt;最初は上記に記載のFirebaseのHostingを利用していましたが、現在はNetlifyにて発信しています。
こちらも静的なHTMLとjsであれば配信が可能です。&lt;/p&gt;
&lt;p&gt;とりあえず無料の枠で配信できています。&lt;/p&gt;
&lt;p&gt;GitHubのリポジトリと連携することで、自動デプロイの設定も可能です。
いちいちビルドしてサーバに設置ということをしなくても、mainブランチにマージすると自動できにNetlifyのサーバ上でビルドが始まりデプロイされます。
とても便利です。&lt;/p&gt;
&lt;p&gt;ビルド時のコンソール出力なども見れますので、ビルドで転けている場合のデバッグなども容易です。
他にも開発ブランチでのビルドプレビュー機能などもあるので、とても便利に使えています。&lt;/p&gt;
&lt;p&gt;無料枠の場合は使用できる帯域の制限とか、ビルドの合計時間などに制限があります。今のところは制限に引っ掛かることなく利用できています。&lt;/p&gt;
&lt;h3&gt;ドメイン&lt;/h3&gt;
&lt;p&gt;ドメインはお名前.comにて契約しています。ここにのみお金がかかっています。1年で1000円くらいです。
ドメイン契約して、Firebaseに反映させるには作業が必要ですが、かなり簡単でした。&lt;/p&gt;</content:encoded></item></channel></rss>