<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>技術書 on tsumari blog</title><link>https://tsumari.pupu.jp/blog/tags/%E6%8A%80%E8%A1%93%E6%9B%B8/</link><description>Recent content in 技術書 on tsumari blog</description><generator>Hugo -- gohugo.io</generator><language>ja</language><copyright>tsumari</copyright><lastBuildDate>Sat, 27 Jan 2024 10:47:32 +0900</lastBuildDate><atom:link href="https://tsumari.pupu.jp/blog/tags/%E6%8A%80%E8%A1%93%E6%9B%B8/index.xml" rel="self" type="application/rss+xml"/><item><title>『動かして学ぶ！Flutter開発入門』</title><link>https://tsumari.pupu.jp/blog/posts/2024/01/27/</link><pubDate>Sat, 27 Jan 2024 10:47:32 +0900</pubDate><guid>https://tsumari.pupu.jp/blog/posts/2024/01/27/</guid><description>&lt;h2 id="モチベーション">モチベーション
&lt;/h2>&lt;ul>
&lt;li>iOS、Androidアプリの作り方をあまりイメージできない
&lt;ul>
&lt;li>学生の時にJavaでAndroidアプリ作ったことしかない…&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>他の言語に触れる機会をつくりたい&lt;/li>
&lt;/ul>
&lt;h2 id="メモ">メモ
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>Flutterのプログラミング言語はDart&lt;/p>
&lt;ul>
&lt;li>Java/Python/JavaScriptの特徴を備える&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;a class="link" href="https://docs.flutter.dev/get-started/install/macos/mobile-ios?tab=vscode" target="_blank" rel="noopener"
>https://docs.flutter.dev/get-started/install/macos/mobile-ios?tab=vscode&lt;/a>&lt;/p>
&lt;ul>
&lt;li>VSCode Flutter extensions install
&lt;ul>
&lt;li>Download the Flutter SDK&lt;/li>
&lt;li>Add Flutter to your PATH&lt;/li>
&lt;li>&lt;code>~/.zshenv&lt;/code> file.:&lt;code>export PATH=$HOME/development/flutter/bin:$PATH&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Configure Xcode
&lt;ul>
&lt;li>&lt;code>sudo sh -c 'xcode-select -s /Applications/Xcode.app/Contents/Developer &amp;amp;&amp;amp; xcodebuild -runFirstLaunch'&lt;/code>&lt;/li>
&lt;li>&lt;code>xcodebuild -downloadPlatform iOS&lt;/code>&lt;/li>
&lt;li>&lt;code>sudo xcodebuild -license&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Install CocoaPods
&lt;ul>
&lt;li>&lt;code>brew install cocoapods&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Android Studio install
&lt;ul>
&lt;li>&lt;a class="link" href="https://developer.android.com/studio?hl=ja" target="_blank" rel="noopener"
>https://developer.android.com/studio?hl=ja&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>HelloWorld&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>『モダンJavaScriptの基本から始める React実践の教科書』</title><link>https://tsumari.pupu.jp/blog/posts/2023/11/06/</link><pubDate>Mon, 06 Nov 2023 18:52:25 +0900</pubDate><guid>https://tsumari.pupu.jp/blog/posts/2023/11/06/</guid><description>&lt;blockquote>
&lt;p>モダンJavaScriptの基本から始める React実践の教科書&lt;/p>&lt;/blockquote>
&lt;h2 id="モチベーション">モチベーション
&lt;/h2>&lt;ul>
&lt;li>jQuery全盛期でフロントエンドの知識が止まっている&lt;/li>
&lt;li>もともとJavaScriptはWebブラウザ上で複雑な動きを実装する程度のものでしたが、今はフロントエンドだけではなく、バックエンドも実装することができます（Node.jsなど）&lt;/li>
&lt;li>スマホアプリ、デスクトップアプリケーション等もJavaScriptで実装できてしまいます
&lt;ul>
&lt;li>どうやって？そのイメージができてない…。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="メモ">メモ
&lt;/h2>&lt;h3 id="chapter1-モダンjavascript-の基礎">Chapter1 モダンJavaScript の基礎
&lt;/h3>&lt;ul>
&lt;li>
&lt;p>従来のコードは、手続き的でわかりやすい反面、レンダリングコストの問題が発生しやすかったり、コードが肥大化してくるとどこで何をしているかわからないつらさ→これを解決するのが仮想DOM&lt;/p>
&lt;ul>
&lt;li>
&lt;p>プレーンなJavaScript例&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getElemenyById&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;nushida&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">aapendChild&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">textElement&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>jQueryの例&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">$&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;#&lt;/span>&lt;span class="nx">nushida&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">textElement&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>パッケージマネージャー&lt;/p>
&lt;ul>
&lt;li>npm
&lt;ul>
&lt;li>&lt;code>npm install [パッケージ名]&lt;/code>&lt;/li>
&lt;li>&lt;code>npm install&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>yarn
&lt;ul>
&lt;li>&lt;code>yarn add [パッケージ名]&lt;/code>&lt;/li>
&lt;li>&lt;code>yarn install&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>node_modules&lt;/code> フォルダが生成される&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>ECMAScript&lt;/p>
&lt;ul>
&lt;li>JavaScriptの標準仕様&lt;/li>
&lt;li>1年に1回更新される「ES2015」「ES2016」
&lt;ul>
&lt;li>ES2015(ES6) が転換期
&lt;ul>
&lt;li>let, constを用いた変数宣言&lt;/li>
&lt;li>アローファンクション&lt;/li>
&lt;li>Class構文&lt;/li>
&lt;li>分割代入&lt;/li>
&lt;li>テンプレート文字列&lt;/li>
&lt;li>スプレッド構文&lt;/li>
&lt;li>Promise&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>モジュールハンドラー（webpack）&lt;/p>
&lt;ul>
&lt;li>jsやcssをひとつのファイルにまとめてくれる&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>トランスパイラ（Babel）&lt;/p>
&lt;ul>
&lt;li>JavaScriptの記法をブラウザで実行できる形に変換してくれるもの&lt;/li>
&lt;li>新しい記法で書かれたJavaScriptを古い記法に変換してくれる&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Vite&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="chapter2-モダンjavascript-の機能に触れる">Chapter2 モダンJavaScript の機能に触れる
&lt;/h3>&lt;h4 id="let-constを用いた変数宣言">let, constを用いた変数宣言
&lt;/h4>&lt;ul>
&lt;li>var
&lt;ul>
&lt;li>上書き可能&lt;/li>
&lt;li>再宣言可能&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>let
&lt;ul>
&lt;li>上書き可能&lt;/li>
&lt;li>再宣言不可能&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>const ※ほとんどの場合で使用
&lt;ul>
&lt;li>上書き不可能
&lt;ul>
&lt;li>オブジェクト型の場合、中の値を変更可能&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>再宣言不可能&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4 id="テンプレート文字列">テンプレート文字列
&lt;/h4>&lt;ul>
&lt;li>従来
&lt;ul>
&lt;li>&lt;code>&amp;quot;私の名前は&amp;quot; + name + &amp;quot;です。&amp;quot;&lt;/code>;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ES2015以降
&lt;ul>
&lt;li>&lt;code>`私の名前は${name}です。`&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4 id="アロー関数">アロー関数
&lt;/h4>&lt;ul>
&lt;li>
&lt;p>従来&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span> &lt;span class="nx">func1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">value&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>アロー関数 （「&lt;code>=&amp;gt;&lt;/code> があれば関数」と考える）&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">func2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">value&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//引数が1つの場合、カッコを省略可能
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">func3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">value&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">value&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//処理が単一行の場合は波括弧とreutnrを省略可能
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">func4&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">num1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">num2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">num1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">num2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//カッコで囲んでまとめて省略して返却
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">func5&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">val1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">val2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">val1&lt;/span>&lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">age&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">val2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ul>
&lt;h4 id="分割代入">分割代入
&lt;/h4>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">myProfile&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;つまり&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">age&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mi">24&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// myProfile.~ が冗長
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sb">`私の名前は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">myProfile&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">です。年齢は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">myProfile&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">age&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">歳です。`&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//分割代入を使用。一致するプロパティ名を取り出せる
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">age&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">myProfile&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sb">`私の名前は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">です。年齢は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">age&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">歳です。`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//抽出したプロパティ名に別名をつける
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">newName&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">age&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">newAge&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">myProfile&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sb">`私の名前は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">newName&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">です。年齢は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">newAge&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">歳です。`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//デフォルト値指定可能
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;ゲスト&amp;#34;&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">myProfile&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sb">`私の名前は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">です。`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//配列も可。格納順通りに。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">myProfile&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;つまり&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">24&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="p">[&lt;/span> &lt;span class="nx">name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">age&lt;/span> &lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">myProfile&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sb">`私の名前は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">です。年齢は&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">age&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">歳です。`&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="スプレッド構文">スプレッド構文
&lt;/h4>&lt;ul>
&lt;li>
&lt;p>要素の展開&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">arr1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">summaryFunc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">num1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">num2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">num1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">num2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//普通に配列の値を渡す場合
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">summaryFunc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">arr1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="nx">arr1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//スプレッド構文 内部の要素を順番に展開してくれる
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">summaryFunc&lt;/span>&lt;span class="p">(...&lt;/span>&lt;span class="nx">arr1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>要素をまとめる&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">arr1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nx">num1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">num2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">...&lt;/span>&lt;span class="nx">arr2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">arr1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">num1&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">//1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">num2&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">//2
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">arr2&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">//[3,4,5]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>要素のコピー、結合&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">arr4&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">arr5&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">arr6&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[...&lt;/span>&lt;span class="nx">arr4&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">arr4&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">//[10,20]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">arr6&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">//[10,20]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//イコールでコピーすると
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">arr8&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">arr4&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">arr4&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">//[10,20]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">arr8&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">//[10,20]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">arr4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">arr4&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">//[100,20]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">arr8&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">//[100,20] ←こいつにも影響が出る
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ul>
&lt;h4 id="map関数">map関数
&lt;/h4>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">nameArr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;佐藤&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;高橋&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;つまり&amp;#34;&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">nameArr&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">map&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="filter関数">filter関数
&lt;/h4>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">numArr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">newNumArr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">numArr&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">filter&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nx">num&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">num&lt;/span> &lt;span class="o">%&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">===&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">newNumArr&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">//[1,3,5]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="-と--について">&lt;code>&amp;amp;&amp;amp;&lt;/code> と &lt;code>||&lt;/code> について
&lt;/h4>&lt;ul>
&lt;li>
&lt;p>&lt;code>||&lt;/code> はその左側がfalseなら右側を返す&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">fee&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">num&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="s2">&amp;#34;金額未設定です&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">fee&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">//金額未設定です
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;code>&amp;amp;&amp;amp;&lt;/code> はその左側がtrueなら右側を返す&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">fee&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">num&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="s2">&amp;#34;何か設定されました&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">fee&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">//何か設定されました
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ul>
&lt;h3 id="chapter3-javascript-でのdom-操作">Chapter3 JavaScript でのDOM 操作
&lt;/h3>&lt;ul>
&lt;li>プレーンなJavaScriptやjQueryでは「この要素を」「高操作する」というように&lt;strong>手続き的&lt;/strong>にDOM操作を行う
&lt;ul>
&lt;li>Reactは「宣言的」&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>HTMLのidやclass、DOMの階層構造とJavaScriptが密接で複雑になりやすく保守が難しかった&lt;/li>
&lt;/ul>
&lt;h3 id="chapter4-react-の基本">Chapter4 React の基本
&lt;/h3>&lt;ul>
&lt;li>コンポーネント
&lt;ul>
&lt;li>他のファイルでも使えるように &lt;code>export&lt;/code>&lt;/li>
&lt;li>他のファイルから使う &lt;code>import&lt;/code>&lt;/li>
&lt;li>拡張子は &lt;code>.jsx&lt;/code> で作成する&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>イベント名、CSSプロパティ名すべてキャメルケースになる
&lt;ul>
&lt;li>&lt;code>onClickButton&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>props
&lt;ul>
&lt;li>コンポーネントに渡す引数のようなもの&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>state
&lt;ul>
&lt;li>コンポーネントが持つ状態&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>再レンダリング
&lt;ul>
&lt;li>変更を検知してコンポーネントを再処理する&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>React Hooks
&lt;ul>
&lt;li>useState&lt;/li>
&lt;li>useEffect&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="chapter5-react-とcss">Chapter5 React とCSS
&lt;/h3>&lt;ul>
&lt;li>
&lt;p>CSS Modules&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">classes&lt;/span> &lt;span class="nx">from&lt;/span> &lt;span class="s2">&amp;#34;./CssModules.module.scss&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Styled JSX&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="nx">style&lt;/span> &lt;span class="nx">jsx&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="sb">`
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">/* ここにCSSを書く */
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">`&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="err">/style&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>styled components&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Emotion&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/** @jsxImportSource @emotion/react */&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Tailwind CSS&lt;/p>
&lt;/li>
&lt;li>
&lt;p>コンポーネントライブラリ&lt;/p>
&lt;ul>
&lt;li>Headless UI&lt;/li>
&lt;li>Chakra UI&lt;/li>
&lt;li>Material-UI&lt;/li>
&lt;li>Semantic UI React&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="chapter6-再レンダリングの仕組みと最適化">Chapter6 再レンダリングの仕組みと最適化
&lt;/h3>&lt;ul>
&lt;li>
&lt;p>再レンダリングが起きる条件&lt;/p>
&lt;ul>
&lt;li>Stateが更新された&lt;/li>
&lt;li>propsが変更された&lt;/li>
&lt;li>再レンダリングされたコンポーネント配下のコンポーネントすべて&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>コンポーネントのメモ化（memo）&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">Component&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">memo&lt;/span>&lt;span class="p">(()&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>関数のメモ化（useCallback）&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">onClickButton&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">useCallback&lt;/span>&lt;span class="p">(()&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">alert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;ボタンが押されました&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">},&lt;/span> &lt;span class="p">[]);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>変数のメモ化（useMemo）&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">sum&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">useMemo&lt;/span>&lt;span class="p">(()&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">},[]);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ul>
&lt;h3 id="chapter7-グローバルなstate-管理">Chapter7 グローバルなState 管理
&lt;/h3>&lt;ul>
&lt;li>バケツリレー
&lt;ul>
&lt;li>下層のコンポ ーネントで使うために本来不要なpropsを受け渡していくこと&lt;/li>
&lt;li>コードが複雑化&lt;/li>
&lt;li>再利用しづらいコンポーネントになる&lt;/li>
&lt;li>不要な再レンダリングが増える&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Reactが提供しているContext を使うことでグローバルな値を管理
&lt;ul>
&lt;li>React.createContext で Context の器を作成&lt;/li>
&lt;li>Provider で囲む&lt;/li>
&lt;li>コンポーネントで React.useContext を使う&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>グローバルState管理ライブラリ
&lt;ul>
&lt;li>Redux&lt;/li>
&lt;li>Recoil&lt;/li>
&lt;li>Apollo Client&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="chapter8-react-とtypescript">Chapter8 React とTypeScript
&lt;/h3>&lt;ul>
&lt;li>
&lt;p>TypeScript&lt;/p>
&lt;ul>
&lt;li>JavaScript で Type(型)を扱えるようにしているもの&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// : string で指定
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kd">let&lt;/span> &lt;span class="nx">str&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">string&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;A&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">str&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;10&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">//OK
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">str&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">//NG
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>&lt;code>npx create-react-app [プロジェクト名] --template typescript&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>tsconfig.json&lt;/code> にプロジェクトに合わせた設定をおこなうことでルールをカスタマイズ&lt;/p>
&lt;/li>
&lt;li>
&lt;p>型を定義することでエラーを防ぐ&lt;/p>
&lt;/li>
&lt;li>
&lt;p>コンポーネントにも型を付与する&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="chapter9-カスタムフック">Chapter9 カスタムフック
&lt;/h3>&lt;ul>
&lt;li>任意の処理をまとめて自作のHooks(use〜)を作成する実装
&lt;ul>
&lt;li>ロジックをコンポーネントから分離&lt;/li>
&lt;li>複数コンポーネントでのロジックの再利用&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>React標準Hooks
&lt;ul>
&lt;li>useState&lt;/li>
&lt;li>useEffect&lt;/li>
&lt;li>useCallback&lt;/li>
&lt;li>useMemo&lt;/li>
&lt;li>useContext&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>『システム運用アンチパターン』</title><link>https://tsumari.pupu.jp/blog/posts/2023/10/24/</link><pubDate>Tue, 24 Oct 2023 18:02:04 +0900</pubDate><guid>https://tsumari.pupu.jp/blog/posts/2023/10/24/</guid><description>&lt;blockquote>
&lt;p>システム運用アンチパターン&lt;/p>&lt;/blockquote>
&lt;h2 id="モチベーション">モチベーション
&lt;/h2>&lt;ul>
&lt;li>「権限を持たない開発者」が私なので、何か出来そうなことがあれば参考にしたい&lt;/li>
&lt;/ul>
&lt;h2 id="メモ">メモ
&lt;/h2>&lt;h3 id="1章-devopsを構成するもの">1章 DevOpsを構成するもの
&lt;/h3>&lt;ul>
&lt;li>1日に30回のデプロイは、あなたの組織の最終目標ではないかもしれません。&lt;/li>
&lt;li>変更の内容を理解できない人がたとえ5人承認したとしても,変更の安全性は高まるはずがない
&lt;ul>
&lt;li>より多くの承認プロセスといった厳しい制限を増やし続けて安全性を手に入れているつもりになりがち&lt;/li>
&lt;li>このような時に無駄なやり取りこそがDevOpsが解決しようとしているもの&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>DevOpsはツールについてではなく、チームがどのように一緒に働くかについて考える
&lt;ul>
&lt;li>ツールによって可能になることに焦点を当てる&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>CAMS&lt;/strong>：cluture（文化）、automation（自動化）、metrics（メトリクス）、sharing（共有）&lt;/li>
&lt;/ul>
&lt;h3 id="2章-パターナリスト症候群">2章 パターナリスト症候群
&lt;/h3>&lt;ul>
&lt;li>パターナリスト症候群：ある行動の実行や承認に必要な資格や信頼性を持つのは特定の人物だけである&lt;/li>
&lt;li>自動化の価値は何度でも実行できるという点にある&lt;/li>
&lt;li>承認プロセスの本当の目的を分析 →自動化で解消する
&lt;ul>
&lt;li>作業が発生していることを必要な人に知らせていること&lt;/li>
&lt;li>変更を中止する必要があるような、アクションの衝突がないこと&lt;/li>
&lt;li>変更のリスクが組織にとって許容できるものであること
&lt;ul>
&lt;li>標準的な変更：すでに確立された変更管理によって事前に承認。やり方や影響を理解している&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>レビューが行われていること&lt;/li>
&lt;li>操作や変更が適切なテストサイクルを経ていること&lt;/li>
&lt;li>承認者がプロセスの中で何を確認しているか？
&lt;ul>
&lt;li>承認依頼を即座に却下する原因となるものはなにか？&lt;/li>
&lt;li>承認するすべての依頼が満たしているべき条件は何か？&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>タスクを実行できる人を制限することで、リスクを減らすことができているわけではなく、一部の人にプレッシャーを集中させているだけ&lt;/li>
&lt;li>何かが機能していると確認できることは、単にエラーがないと確認できることよりも価値がある
&lt;ul>
&lt;li>知識を共有ことは責任を共有するために必要なこと
&lt;ul>
&lt;li>責任の拡大に対応するためにはシステムの全体像を一定のレベルで理解する必要がある&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>電子メールでの通知、通知先のメールアドレスをアプリケーションで管理しない。既存の配信リストを利用
&lt;ul>
&lt;li>通知リストの管理は組織のサービスデスクのプロセスで行うことが出来るはず。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>自動化の継続的な改善に取り組む&lt;/li>
&lt;/ul>
&lt;h3 id="3章-盲目状態での運用">3章 盲目状態での運用
&lt;/h3>&lt;ul>
&lt;li>自分たちが開発したシステムが本番でどのように動作するかをより詳細に理解することが求められている
&lt;ul>
&lt;li>本番前の環境で完全かつ徹底的にテストするのは実行不可能になりつつある&lt;/li>
&lt;li>本番環境で初めてテストされる処理もある&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>運用の可視化
&lt;ul>
&lt;li>メトリクス：システムリソースのある時点での測定値
&lt;ul>
&lt;li>CPU使用率・メモリ使用率など＋&lt;strong>アプリケーション用のカスタムメトリクスを開発すること&lt;/strong>&lt;/li>
&lt;li>リクエスト数：どのくらいの頻度でこの処理が発生しているか？&lt;/li>
&lt;li>エラー数：どのくらいの頻度で失敗しているか？&lt;/li>
&lt;li>レイテンシ：完了するまでにどのくらいの時間がかかるか？&lt;/li>
&lt;li>何を測定するか？健全なメトリクスと不健全なメトリクスを分けるものは何か？&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ログ：システムで発生したイベントを記述した、システムが生成するメッセージ
&lt;ul>
&lt;li>価値あるものとするために&lt;/li>
&lt;li>構造化されたログフォーマットにする（JSONのような）&lt;/li>
&lt;li>適切なログレベルで記録する&lt;/li>
&lt;li>エラーメッセージを読む時に生じる疑問を想定する&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="4章-情報ではなくデータ">4章 情報ではなくデータ
&lt;/h3>&lt;ul>
&lt;li>利用者が値の良し悪しを知ることができるように、ウィジェットに文脈を与える&lt;/li>
&lt;li>最も重要な項目が最初に目に入るようにダッシュボードを構成&lt;/li>
&lt;/ul>
&lt;h3 id="5章-最後の味付けとしての品質">5章 最後の味付けとしての品質
&lt;/h3>&lt;ul>
&lt;li>テストピラミッド
&lt;ul>
&lt;li>ユニットテスト＞統合テスト＞エンドツーエンドテスト&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ユニットテスト
&lt;ul>
&lt;li>テスト対象のユニットに含まれないものは、モックやスタブを使用（統合テストで扱うべき）&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>統合テスト
&lt;ul>
&lt;li>実際のDB接続してデータの書き込みや読み込みを検証&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="6章-アラート疲れ">6章 アラート疲れ
&lt;/h3>&lt;ul>
&lt;li>システムメトリクス（CPU使用率・メモリ使用率など）のアラートを受けても何をしたら良いかわからないことが多い。
&lt;ul>
&lt;li>なぜ、どのようにしてその状態になったのかについて何の文脈も与えてくれない&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>アラートには関連するドキュメントが必要
&lt;ul>
&lt;li>アラートを受け取った時に取るべき手順を説明する手順書&lt;/li>
&lt;li>そもそもなぜそれが通知する必要のあるアラートなのかも記載&lt;/li>
&lt;li>アラートメッセージに手順書へのリンクを記載&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>5分待てば自然に解除されるかもしれない時ではなく、すぐに調査する必要があると確信したときにアラートをトリガする&lt;/li>
&lt;li>必ずしも真夜中に誰かを起こす必要はない。発生していることを認知すれば十分なアラートは、メールなどにする&lt;/li>
&lt;/ul>
&lt;h3 id="7章-空の道具箱">7章 空の道具箱
&lt;/h3>&lt;ul>
&lt;li>システム全体が自動化を念頭に置いて設計されていないと、自動化の欠如が生じる&lt;/li>
&lt;li>&lt;strong>運用&lt;/strong>とは、プロダクトを構築し維持するために必要なすべてのタスクや活動のこと
&lt;ul>
&lt;li>サーバの監視&lt;/li>
&lt;li>テストパイプラインの管理&lt;/li>
&lt;li>ローカル開発環境の構築
&lt;ul>
&lt;li>これらが頻繁に繰り返される場合、標準化することが重要&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>自動化によって、権限を与え、スピードを上げ、再現性を高める&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="8章-業務時間外のデプロイ">8章 業務時間外のデプロイ
&lt;/h3>&lt;ul>
&lt;li>デプロイのレイヤ
&lt;ul>
&lt;li>機能デプロイ&lt;/li>
&lt;li>フリートデプロイ&lt;/li>
&lt;li>アーティファクトデプロイ&lt;/li>
&lt;li>データベースデプロイ&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>テストを組織の文化の一部にする
&lt;ul>
&lt;li>テストケースのないマージリクエストは不完全なマージリクエストであるという考えを徹底させる&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>自動化ですべてを確認できるわけではありません。しかし、それは手動のテストも同様です。
&lt;ul>
&lt;li>不確実性を組織が許容できる範囲まで減らすことは可能&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="9章-せっかくのインシデントを無駄にする">9章 せっかくのインシデントを無駄にする
&lt;/h3>&lt;ul>
&lt;li>人を直接批判してはならない。行動や振る舞いに焦点を当てる。&lt;/li>
&lt;li>今となっては明白な事実でも、その場では曖昧だった可能性があることを認識すう&lt;/li>
&lt;li>人ではなくシステムを責める&lt;/li>
&lt;/ul>
&lt;h3 id="10章-情報のため込みブレントだけが知っている">10章 情報のため込み：ブレントだけが知っている
&lt;/h3>&lt;ul>
&lt;li>組織全体での情報共有が促進されず、あるトピックに関してキーパーソンにすべてを任せるようになったとき&lt;/li>
&lt;li>目標は、スタッフが離職しても、組織が活動するために必要な知識を保持すること&lt;/li>
&lt;/ul>
&lt;h3 id="11章-命じられた文化">11章 命じられた文化
&lt;/h3>&lt;ul>
&lt;li>「○○を使ったシステムの使用経験が2～3年あること」
&lt;ul>
&lt;li>実際にはどのような経験が必要なのか？&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="12章-多すぎる尺度">12章 多すぎる尺度
&lt;/h3>&lt;ul>
&lt;li>組織の目標を意識すると、自分がこれから取り掛かる予定の仕事が違って見えるようになる&lt;/li>
&lt;/ul>
&lt;h2 id="感想">感想
&lt;/h2>&lt;p>後半は飛ばし飛ばし読んだけど…&lt;/p>
&lt;ul>
&lt;li>何を達成したいのか、目的をはっきりさせること&lt;/li>
&lt;/ul>
&lt;p>が大事だなってことを改めて感じました。&lt;br>
あとは、エラーメッセージ。「○○処理でエラーが発生しました」&lt;strong>…で？どうすればいいの？&lt;/strong> の部分を明確化するのも必要ですね。意外とできてない。&lt;/p></description></item><item><title>『分散システムデザインパターン』</title><link>https://tsumari.pupu.jp/blog/posts/2023/10/17/</link><pubDate>Tue, 17 Oct 2023 10:44:10 +0900</pubDate><guid>https://tsumari.pupu.jp/blog/posts/2023/10/17/</guid><description>&lt;blockquote>
&lt;p>分散システムデザインパターン&lt;/p>&lt;/blockquote>
&lt;h2 id="モチベーション">モチベーション
&lt;/h2>&lt;ul>
&lt;li>コンテナの使い道がわからないから理解を深めるため&lt;/li>
&lt;/ul>
&lt;h2 id="メモ">メモ
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>シングルノード&lt;br>
1台のマシン上で動く複数のコンテナについて&lt;/p>
&lt;ul>
&lt;li>サイドカー&lt;/li>
&lt;li>アンバサダ&lt;/li>
&lt;li>アダプタ&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>マルチノード&lt;br>
複数のマシンにまたがるコンテナについて&lt;/p>
&lt;ul>
&lt;li>レプリカがロードバランスされたサービス&lt;/li>
&lt;li>シャーディングされたサービス&lt;/li>
&lt;li>スキャッタ・ギャザー&lt;/li>
&lt;li>ファンクションとイベント駆動処理&lt;/li>
&lt;li>オーナーシップの選出&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>バッチ処理パターン (MapReduceとは‥？)&lt;/p>
&lt;ul>
&lt;li>ワークキューシステム&lt;/li>
&lt;li>イベント駆動バッチ処理&lt;/li>
&lt;li>協調的バッチ処理&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="感想">感想
&lt;/h2>&lt;p>ぜんっぜん意味がわからなかった…。&lt;br>
コンテナについての知識不足が一番の原因だと思うけど、翻訳された日本語を読むのが難しいのもあるかもしれない…。&lt;br>
「レプリカがロードバランスされたサービス」だけは辛うじてイメージできた。&lt;br>
いきなりこんな難しいオライリー本を読んで理解しようとするのではなく、いろいろ知らない単語があったのでそれをひとつひとつ調べて理解していくことから始めないとだめかなぁ…。&lt;/p></description></item></channel></rss>